工作中需要用java代码生成excel文件,所以就到网上查了一下,做下总结:代码如下
private List
cellmap.add("第一列");
cellmap.add("第二列");
cellmap.add(" 第三列");
cellmap.add("第四列");
cellmap.add("第五列");
cellmap.add( "第六列");
cellmap.add("第七列");
/**
* 导出excel模板
* @param rootpath 导出路径
* @return
* @throws IOException
* @throws ClassNotFoundException
*/
public String ExcelOut(String rootpath) throws IOException, ClassNotFoundException {
//数据总行数
int rows = 500;
//生成下拉框内容
String [] vehicles={"员工车辆","外协车辆","货运车辆","公司班车"};
//创建工作簿
HSSFWorkbook workbook = new HSSFWorkbook();
org.apache.poi.hssf.usermodel.HSSFSheet sheet = workbook.createSheet("车辆信息录入");
HSSFCellStyle style = workbook.createCellStyle(); // 样式对象
style.setWrapText(true);//自动换行
//水平居中
style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);// 垂直
style.setAlignment(HSSFCellStyle.ALIGN_CENTER);// 水平
//字体格式
HSSFFont fonttitle1 = workbook.createFont();
fonttitle1.setFontName("宋体");
fonttitle1.setFontHeightInPoints((short) 10);
style.setFont(fonttitle1);
//excel模板
int c =0;
HSSFRow row = sheet.createRow(0);//第一行
//设置列宽 这里我只是把需要的两列设置了宽度 sheet.getColumnWidth(6) 获取第七列的宽度
//网上查的可以自动设置列宽 但是不是我想要的模式,我做的是模板,导出后插入的数据列宽不会自动变,只好设置固定列宽
//设置列宽
sheet.setColumnWidth(6,sheet.getColumnWidth(6)*17/13);
sheet.setColumnWidth(9,sheet.getColumnWidth(9)*18/5);
/*sheet.autoSizeColumn(i); (版本不能太老)
sheet.autoSizeColumn(i, true);(合并的单元格使用)
sheet.setColumnWidth(i, “列名”.getBytes().length*2*256);(中文适用)
公式单元格自适应的是公式,将值算出后再设置:
HSSFFormulaEvaluator evaluator = new HSSFFormulaEvaluator(sheet.getWorkbook());
CellValue cell71Val = evaluator.evaluate(cell71);
cell71.setCellValue(cell71Val.getNumberValue());*/
for (String s:list) {
//把list中的值循环写入第一行
HSSFCell cell = row.createCell(c); //第c列
cell.setCellStyle(style);
cell.setCellValue(s);
c++;
}
//日期格式 这里我的模板内容从第二行开始,循环设置第6列的单元格为日期格式
for(int a=1;a<=rows;a++){
org.apache.poi.hssf.usermodel.HSSFCell cell = sheet.createRow(a).createCell(5);
//日期格式
HSSFDataFormat format= workbook.createDataFormat();
style.setDataFormat(format.getFormat("yyyy-MM-dd"));
cell.setCellStyle(style);
}
String specification = "hello\r\n world";// \r\n 换行
// 合并单元格
CellRangeAddress cra =new CellRangeAddress(2, 15, 12, 17); // 起始行, 终止行, 起始列, 终止列
sheet.addMergedRegion(cra);
cell.setCellValue(specification);
//显示结果为hello
// world
//生成下拉列表 起始行 列均从0开始
CellRangeAddressList vehicle = new CellRangeAddressList(1, rows, 4, 4);//起始行,终止行,起始列,终止列
// 创建下拉列表数据
DVConstraint constraint_v = DVConstraint.createExplicitListConstraint(vehicles);
// 绑定
HSSFDataValidation dataValidation_v = new HSSFDataValidation(vehicle, constraint_v);
//对sheet页生效
sheet.addValidationData(dataValidation_v);
//写入文件
FileOutputStream fileOut;
try{
fileOut = new FileOutputStream("E:\\aaaa.xls");//保存的文件路径
workbook.write(fileOut);
fileOut.close();
}catch(Exception e){
e.printStackTrace();
}
System.out.println(path);
return path;
}
第六列日期格式 输入日期 自动转换为设置的日期格式 读出的数据可直接插入数据库中的Date