思路:创建好excel文件后,通过循环来创建不同的工作表;在创建某具体的工作表时,通过循环来创建表头、
表体;在创建表头是,先创建行,再循环创建单元格;在创建表体时,通过循环一行行的创建。
实例:
package com.ga.service;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.List;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFFont;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
/**
*
* @author ts
* 导出多張表到同一Excel文件的不同Sheet中
*/
public class CreateExcel{
// private HSSFWorkbook hssworkbook = null;
public DataCountExcelService2() {
// 创建工作薄
// hssworkbook = new HSSFWorkbook();
}
/**
* 创建excel文件
*
* @param path导出路径
* @param sheetName工作表名称数组
* @param titles表格标题
* @param rawList内容数据
* @throws IOException
*/
public void createExecl(String path, String[] sheetName, List<List<String>> titles,
List<List<String[]>> rawList) throws IOException {
FileOutputStream fout = null;
if (!path.endsWith(".xls")) {
path = path + ".xls";
}
try {
fout = new FileOutputStream(path);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
//创建Excel工作书册,对应一个excel文档
HSSFWorkbook hssworkbook = new HSSFWorkbook();
//创建(多个)sheet,对应excel文档中的(多个)工作表
for(int i=0; i<sheetName.length; i++){
HSSFSheet hsshsheet = hssworkbook.createSheet();
if(rawList.get(i)!=null){
String[] list = rawList.get(i).get(0);
if(list!=null){
for (int j = 0; j < list.length; j++) {
//设置每列宽度
hsshsheet.setColumnWidth(j, 8000);
}
}
}
// 设置工作表的名称(工作表在工作薄中的位置,工作表的名称)
hssworkbook.setSheetName(i, sheetName[i]);
//设置表格标题
this.setTitle(hssworkbook, hsshsheet, titles.get(i));
try {
//设置表体部分
this.setBody(hssworkbook, hsshsheet, rawList.get(i));
} catch (Exception e) {
e.printStackTrace();
}
}
//导出excel文件
hssworkbook.write(fout);
//刷新此输出流并强制写出所有缓冲的输出字节(强制将缓冲区所有的数据输出!)
fout.flush();
//关闭文件
fout.close();
}
/**
* 设置表格的标题栏
*
* @param hssfrow
*/
private void setTitle(HSSFWorkbook hssworkbook, HSSFSheet hsshsheet,
List<String> titles) {
//创建工作表中的一行(作为表头用)
HSSFRow hssfrow = hsshsheet.createRow(0);
//设置行高单位是px
hssfrow.setHeight((short) 500);
//设置单元格样式
HSSFCellStyle cellStyle = hssworkbook.createCellStyle();
// 设置单元格居中
cellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);
// 设置单元格垂直居中
cellStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);
// 设置单元格自动换行
cellStyle.setWrapText(true);
//设置字体
HSSFFont font = hssworkbook.createFont();
font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
font.setFontName("宋体");
font.setFontHeight((short) 200);
cellStyle.setFont(font);
//将每个属性分别写入创建好的单元格中
int size = titles.size();
for (int j = 0; j < size; j++) {
//在建好的行中创建单元格
HSSFCell hsscell = hssfrow.createCell(j);
//添加样式
hsscell.setCellStyle(cellStyle);
//添加表头属性名
hsscell.setCellValue(titles.get(j));
}
}
/**
* 设置表格的主体内容
*
* @param hsshsheet
* @throws Exception
*/
private void setBody(HSSFWorkbook hssworkbook, HSSFSheet hsshsheet,
List<String[]> rawList) throws Exception {
// 行list,行list
if (rawList == null) {
return;
}
HSSFCellStyle cellStyle = hssworkbook.createCellStyle();
// 设置单元格居中
cellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);
// 设置单元格垂直居中
cellStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);
// 设置单元格自动换行
cellStyle.setWrapText(true);
// cellStyle.setBorderBottom(HSSFCellStyle.BORDER_THIN);
// cellStyle.setBottomBorderColor(HSSFColor.BLACK.index);
HSSFFont font = hssworkbook.createFont();
font.setBoldweight(HSSFFont.BOLDWEIGHT_NORMAL);
font.setFontName("宋体");
font.setFontHeight((short) 200);
cellStyle.setFont(font);
int i = 1;
for (int j=0; j<rawList.size(); j++){
String[] columnList = (String[])rawList.get(j);
HSSFRow hssfrow = hsshsheet.createRow(i++);
hssfrow.setHeight((short) 400);
this.setRow(hssfrow, columnList, cellStyle);
}
}
/**
* 设置表格行的信息
*
* @param hssfrow
* @param testCase
* @param cellStyle
*/
private void setRow(HSSFRow hssfrow, String[] columnList,
HSSFCellStyle cellStyle) {
if (columnList == null) {
return;
}
int i = 0;
HSSFCell hsscell = null;
for (int j=0; j<columnList.length; j++) {
hsscell = hssfrow.createCell(i++);
hsscell.setCellStyle(cellStyle);
hsscell.setCellValue(columnList[j]);
}
}
//测试
public static void main(String[] args) throws IOException {
DataCountExcelService2 execl = new DataCountExcelService2();
String[] str = new String[2];
str[0]="123";
str[1]="234";
List<List<String>> titles = new ArrayList<List<String>>();
List<String> titles1 = new ArrayList<String>();
titles1.add("1的");
titles1.add("2阿尔法");
titles1.add("3阿尔法额");
titles1.add("4的发");
titles1.add("5啊");
List<String> titles2 = new ArrayList<String>();
titles2.add("6的");
titles2.add("7阿尔法");
titles2.add("8阿尔法额");
titles2.add("9的发");
titles2.add("10啊");
titles.add(titles1);
titles.add(titles2);
List<List<String[]>> rawList = new ArrayList<List<String[]>>();
List<String[]> bodys = new ArrayList<String[]>();
String[] str1 = new String[3];
str1[0]="wqe";
str1[1]="wqe";
str1[2]="wqe";
String[] str2 = new String[3];
str2[0]="sdf";
str2[1]="sdf";
str2[2]="sdf";
String[] str3 = new String[3];
str3[0]="jkh";
str3[1]="jkh";
str3[2]="jkh";
bodys.add(str1);
bodys.add(str2);
bodys.add(str3);
rawList.add(bodys);
List<String[]> bodys2 = new ArrayList<String[]>();
String[] str4 = new String[3];
str4[0]="lkj";
str4[1]="lkj";
str4[2]="lkj";
String[] str5 = new String[3];
str5[0]="hgf";
str5[1]="hfg";
str5[2]="hfg";
String[] str6 = new String[3];
str6[0]="nbb";
str6[1]="nbv";
str6[2]="vbv";
bodys2.add(str4);
bodys2.add(str5);
bodys2.add(str6);
rawList.add(bodys2);
execl.createExecl("d:/ex.xls", str, titles, rawList);
}
}