本人使用的是poi-bin-3.10-FINAL-20140208.zip 版本的poi
以下是程序关键代码:

//需要引用的类

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List; import org.apache.poi.hssf.usermodel.DVConstraint;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFDataValidation;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.DataValidation;
import org.apache.poi.ss.usermodel.DataValidationConstraint;
import org.apache.poi.ss.usermodel.DataValidationHelper;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.util.CellRangeAddressList;
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
//主方法

public static String writeExcel(String str,List mList,String path) throws IOException {
Date dt = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
String temp_str = "";
temp_str = sdf.format(dt);
//System.out.println(InExcel.class.getClassLoader().getResource("/").getPath());
// String path = request.getSession().getServletContext().getRealPath("/");
//System.out.println(path+"00000000000000");
String pathname=path+"upload\\"+str+temp_str+".xls";
String pathname1="upload\\"+str+temp_str+".xls";
File file=new File(pathname);
String fileName = file.getName();
String extension = fileName.lastIndexOf(".") == -1 ? "" : fileName
.substring(fileName.lastIndexOf(".") + 1); //判断文件类型 if ("xls".equals(extension)) {
WriteIn(file,"xls");
String[][] data=check(str);
write2003Excel(file.getPath(),mList,data,str);
return pathname1; } else if ("xlsx".equals(extension)) {
String[][] data=check(str);
// write2007Excel(file.getPath(),mList,data); } else { throw new IOException("不支持的文件类型"); }
return "error"; }
//写入excel方法
public static String WriteIn(File file,String extension) throws IOException{
//2003xls文件创建模式
FileOutputStream fileOut = new FileOutputStream(file.getAbsolutePath());
if ("xls".equals(extension)) {
HSSFWorkbook wb = new HSSFWorkbook();
HSSFSheet sheet1 = wb.createSheet("Sheet1");
HSSFSheet sheet2 = wb.createSheet("Sheet2");
HSSFSheet sheet3 = wb.createSheet("Sheet3");
wb.write(fileOut);
}else if ("xlsx".equals(extension)){
//2007模式的写法
XSSFWorkbook wb = new XSSFWorkbook();
XSSFSheet sheet1 = wb.createSheet("Sheet1");
XSSFSheet sheet2 = wb.createSheet("Sheet2");
XSSFSheet sheet3 = wb.createSheet("Sheet3");
wb.write(fileOut);
} fileOut.close();
return "success";
}
/**
* 协查有效性和标题筛选
* @param str
* @return
*/
public static String[][] check(String str){
if("00201".equals(str)){
//标题 : 姓名 性别 身份证号码 死亡时间
String[] bzbt={"姓名","性别 ","身份证号码","救助业务名称","救助证号","救助金额","救助开始时间 ","救助结束时间"};
//有效性 : 0-未知的性别,1-男性,2-女性,9-未说明的性别
String[] bzdata2={ "0-未知的性别","1-男性","2-女性","9-未说明的性别"};
//01-救灾救济,02-城市社会救助,03-双拥、优抚、安置,04-社会事务与社会福利,05-慈善事业
String[] bzdata3={ "01-救灾救济","02-城市社会救助","03-双拥、优抚、安置","04-社会事务与社会福利","05-慈善事业"};
//行有效性
String [] bzdatarow={"1","3"};
String[][] a ={bzbt,bzdata2,bzdata3,bzdatarow};
return a;
} return null; }
//下拉列表元素很多的情况

private static HSSFDataValidation SetDataValidation(String strFormula,int firstRow,int firstCol,int endRow,int endCol)
{
//String formula = "Sheet2!$A$2:$A$59" ;// 表示Z列1-N行作为下拉列表来源数据
// HSSFDataValidation dataValidation = new HSSFDataValidation((short) 1,
// (short) 1, (short) 300, (short) 1); //原顺序为 起始行 起始列 终止行 终止列
// dataValidation.setDataValidationType(HSSFDataValidation.DATA_TYPE_LIST);
// dataValidation.setFirstFormula(formula);
// dataValidation.setSecondFormula(null);
CellRangeAddressList regions = new CellRangeAddressList(firstRow, endRow, firstCol, endCol);
// CellRangeAddressList regions = new CellRangeAddressList( firstRow,
// (short) 300, (short) 1, (short) 1);//add 新顺序为 起始行 终止行 起始列 终止列
DVConstraint constraint = DVConstraint.createFormulaListConstraint(strFormula);//add
HSSFDataValidation dataValidation = new HSSFDataValidation(regions,constraint);//add dataValidation.createErrorBox("Error", "Error");
dataValidation.createPromptBox("", null); return dataValidation;
}
//255以内的下拉
public static DataValidation setDataValidation(Sheet sheet,String[] textList, int firstRow, int endRow, int firstCol, int endCol) { DataValidationHelper helper = sheet.getDataValidationHelper();
// 加载下拉列表内容
DataValidationConstraint constraint = helper.createExplicitListConstraint(textList);
// DVConstraint constraint = new DVConstraint();
constraint.setExplicitListValues(textList); // 设置数据有效性加载在哪个单元格上。
// 四个参数分别是:起始行、终止行、起始列、终止列
CellRangeAddressList regions = new CellRangeAddressList((short) firstRow, (short) endRow, (short) firstCol, (short) endCol); // 数据有效性对象
DataValidation data_validation = helper.createValidation(constraint, regions);
//DataValidation data_validation = new DataValidation(regions, constraint); return data_validation;
}
//write 2003Excel
public static void write2003Excel(String filePath,List list,String[][] data,String str) { try {
if(list.size()<=60000){
//创建excel文件对象 HSSFWorkbook wb = new HSSFWorkbook(new FileInputStream(filePath));
//创建一个张表
HSSFSheet sheet;
//创建行对象
HSSFRow row = null; //创建表格对象 HSSFCell cell = null; sheet = wb.getSheetAt(0); // sheet.addValidationData(setDataValidation(sheet,data[1], 1,list.size(), 1, 1));
String[] num=data[data.length-1];
System.out.println(num.length);
if (data.length>1) {
for(int i=0;i<num.length;i++){
int rowdata=Integer.parseInt(num[i]);
sheet.addValidationData(setDataValidation(sheet,data[i+1], 1,list.size(),rowdata , rowdata));
System.out.println("我出现"+rowdata);
}
}
if("00301".equals(str)){
String strFormula = "Sheet2!$A$2:$A$59" ;
sheet.addValidationData(SetDataValidation(strFormula, 1, 5, list.size(), 5));
} row=sheet.createRow(0);
for (int i = 0; i < data[0].length; i++) {
cell=row.createCell(i); cell.setCellValue(data[0][i]);
} //循环行
for (int i=1; i <=list.size(); i++) {
row = sheet.createRow(i);
//循环列 for (int j=0; j<data[0].length; j++) {
cell = row.createCell(j);//创建单元格
String m=String.valueOf(list.get(i-1)).replace("[", "").replace("]", "");
String[] a=m.split(",");
cell.setCellValue(a[j]);//赋值
// cell.setCellFormula("Sheet2!$A$2:$A$59"); }
}
//select Ahd010401,Ahd010405,Ahd010404,Ahd010409,Ahd010410,Ahd010406,Ahd010408,Ahd010416 from res_00301
if("00301".equals(str)){
String[] bzdata4={"民族","01-汉族","02-蒙古族","03-回族","04-藏族","05-维吾尔族","06-苗族","07-彝族","08-壮族","09-布依族","10-朝鲜族","11-满族","12-侗族","13-瑶族","14-白族","15-土家族","16-哈尼族","17-哈萨克族","18-傣族","19-黎族","20-傈僳族","21-佤族","22-畲族","23-高山族","24-拉祜族","25-水族","26-东乡族","27-纳西族","28-景颇族","29-柯尔克孜族","30-土族","31-达斡尔族","32-仫佬族","33-羌族","34-布朗族","35-撒拉族","36-毛难族","37-仡佬族","38-锡伯族","39-阿昌族","40-普米族","41-塔吉克族","42-怒族","43-乌孜别克族","44-俄罗斯族","45-鄂温克族","46-德昂族","47-保安族","48-裕固族","49-京族","50-塔塔尔族","51-独龙族","52-鄂伦春族","53-赫哲族","54-门巴族","55-珞巴族","56-基诺族","98-外国血统","99-其他"};
sheet=wb.getSheetAt(1);
for (int i = 0; i < bzdata4.length; i++) {
row=sheet.createRow(i);
cell=row.createCell(0);
cell.setCellValue(bzdata4[i]);
}
} FileOutputStream out = new FileOutputStream(filePath); wb.write(out); out.close();
}else {
throw new IOException("超出excel的可写范围,可写为60000行");
} } catch (Exception e) { e.printStackTrace(); } }

POI操作EXCEL之导出Excel(设置有效性,下拉列表引用)的更多相关文章

  1. poi操作oracle数据库导出excel文件2

    package com.test; import java.io.File;  import java.io.FileInputStream;  import java.io.FileNotFound ...

  2. poi操作oracle数据库导出excel文件

    HSSFWorkbook workBook = new HSSFWorkbook();// 创建 一个excel文档对象 HSSFSheet sheet = workBook.createSheet( ...

  3. C#变成数据导入Excel和导出Excel

    excel 基础 •整个excel 表格叫工作表:workbook:工作表包含的叫页:sheet:行:row:单元格:cell. •excel 中的电话号码问题,看起来像数字的字符串以半角单引号开头就 ...

  4. .Net NPOI 根据excel模板导出excel、直接生成excel

    一.根据Excel模板导出excel 1.导入NPOI.dll  2.DAL中添加类ExportExcel.cs using NPOI.SS.UserModel; using System; usin ...

  5. ASP.NET Core 2.2 : 十六.扒一扒新的Endpoint路由方案 try.dot.net 的正确使用姿势 .Net NPOI 根据excel模板导出excel、直接生成excel .Net NPOI 上传excel文件、提交后台获取excel里的数据

    ASP.NET Core 2.2 : 十六.扒一扒新的Endpoint路由方案   ASP.NET Core 从2.2版本开始,采用了一个新的名为Endpoint的路由方案,与原来的方案在使用上差别不 ...

  6. [转]Excel.dll 导出Excel控制

    Excel.dll 导出Excel控制 2010-06-12 11:26 2932人阅读 评论(2) 收藏 举报 excelmicrosoftstring产品服务器google 最近做了个导出Exce ...

  7. 纳税服务系统【用户模块之使用POI导入excel、导出excel】

    前言 再次回到我们的用户模块上,我们发现还有两个功能没有完成: 对于将网页中的数据导入或导出到excel文件中,我们是完全没有学习过的.但是呢,在Java中操作excel是相对常用的,因此也有组件供我 ...

  8. [poi使用]使用excel模版导出excel

    ​ Apache POI是基于Office Open XML标准(OOXML)和Microsoft的OLE 2复合文档格式(OLE2)处理各种文件格式的开源项目.简而言之,您可以使用Java读写MS ...

  9. 使用POI插件,提取导出excel的工具类

    在网站的不同的模块都需要使用到导入导出excel的功能,我们就需要写一个通用的工具类ExcelUtil. 我的思路:首先,导入和导出的Excel的文件格式固定:主标题,二级标题,数据行(姑且就这么叫) ...

  10. SSM poi通过模板 反射导出excel

    1 import java.lang.reflect.Field; 2 import java.lang.reflect.Method; 3 import java.util.Iterator; 4 ...

随机推荐

  1. jQuery语音播放插件

    自己做jQuery插件:将audio5js封装成jQuery语音播放插件   日前的一个项目需要用到语音播放功能.发现Audio5js符合需求且使用简单,又鉴于jQuery控件便于开发操作,于是有了以 ...

  2. Oracle按不同时间分组统计

    Oracle按不同时间分组统计 Oracle按不同时间分组统计的sql 如下表table1: 日期(exportDate) 数量(amount) -------------- ----------- ...

  3. 十天学Linux内核之第九天---向内核添加代码

    原文:十天学Linux内核之第九天---向内核添加代码 睡了个好觉,很晚才起,好久没有这么舒服过了,今天的任务不重,所以压力不大,呵呵,现在的天气真的好冷,不过实验室有空调,我还是喜欢待在这里,有一种 ...

  4. Redis集群环境安装指南

    环境 RHLinux-6.4-64-EN, 红帽6.4 64位,英文正式公布版. Redis3.0.0 redis2.x版本号还不支持集群,3.0版本号将会支持,如今3.0版本号还在开发中,如今是be ...

  5. 使用C#或javascript将Table里的数据导出到Excel

    原文:使用C#或javascript将Table里的数据导出到Excel Demo效果图: 用C#将Table数据导出Excel: 本方法已经将导出excel做成分部视图,引用时只需在视图中使用如下代 ...

  6. 我的MYSQL学习心得(四)

    原文:我的MYSQL学习心得(四) 我的MYSQL学习心得(四) 我的MYSQL学习心得(一) 我的MYSQL学习心得(二) 我的MYSQL学习心得(三) 我的MYSQL学习心得(五) 我的MYSQL ...

  7. acd - 1216 - Beautiful People(DLIS)

    意甲冠军:一个人有两个属性S, B(1 ≤ Si, Bi ≤ 10^9),当两个人满足这两个属性 S1 < S2 && B1 < B2 要么 S1 > S2 & ...

  8. BIEE在creating domain步骤停止的解决的方法

    1.错误现象: biee11g creating domain  csf entries will not be parsed since the adminserver is unreachable ...

  9. JavaScript之再谈回调与闭包

    前些阵子写了几篇关于回调和闭包的博文,感觉自己都是似懂非懂,最近在项目中又碰到了类似的情况,故在此咱们来重弹js中的回调与闭包. 先说说回调: 百度百科: 回调函数就是一个通过函数指针调用的函数.如果 ...

  10. T4模版引擎之生成数据库实体类

    在通过T4模版引擎之基础入门 对T4有了初步印象后,我们开始实战篇.T4模板引擎可以当做一个代码生成器,代码生成器的职责当然是用来生成代码(这不是废话吗).而这其中我们使用的最普遍的是根据数据库生成实 ...