版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/diaomeng11/article/details/82897918
使用jxl需要导入对应jar包,maven下导入方式为:
<dependency>
<groupId>jexcelapi</groupId>
<artifactId>jxl</artifactId>
<version>2.6</version>
</dependency>
具体方法如下:
private static int maxRow = 60000;
/**
* 添加工作薄并导入数据
* @param workbook
* @param sheetData
* @param sheetIndex
* @throws IOException
* @throws RowsExceededException
* @throws WriteException
*/
public static int createSheet( WritableWorkbook workbook,ExcelSheetData sheetData,int sheetIndex) throws IOException, RowsExceededException, WriteException{
//添加工作薄
WritableSheet sheet = workbook.createSheet(sheetData.getName(), sheetIndex);
//单元格
Label label=null;
//给第一行设置列名
//第一行颜色
WritableCellFormat wcf = new WritableCellFormat();
wcf.setBackground(Colour.YELLOW);
wcf.setBorder(jxl.format.Border.ALL, jxl.format.BorderLineStyle.THIN);
//第一行固定添加编号
label=new Label(0,0,"编号",wcf);
sheet.addCell(label);
sheet.setColumnView(0,10);
for(int i=0;i<sheetData.getTitleList().size();i++){
label=new Label(i+1,0,sheetData.getTitleList().get(i).getName(),wcf);
//添加单元格
sheet.addCell(label);
sheet.setColumnView(i,sheetData.getTitleList().get(i).getWidth());
}
//导入数据
int row = 0;
for(int i=0;i<sheetData.getDataMapList().size();i++){
row++;
if (row>maxRow){//这里,当数据条数大于6W时,为防止数据溢出,将剩余数据分到下一个工作薄以此类推
sheet = workbook.createSheet(sheetData.getName()+"_"+(i/65535+1), ++sheetIndex);
//第一行固定添加编号
label=new Label(0,0,"编号",wcf);
//添加单元格
sheet.addCell(label);
//设置单元格宽
sheet.setColumnView(0,10);
for(int j=0;j<sheetData.getTitleList().size();j++){
label=new Label(j+1,0,sheetData.getTitleList().get(j).getName(),wcf);
sheet.addCell(label);
sheet.setColumnView(j+1,sheetData.getTitleList().get(j).getWidth());
}
row = 1;
}
int dataIndex = 0;
label=new Label(0,row,(i+1)+"");
sheet.addCell(label);
for (Map.Entry<Integer,Object> dataMap : sheetData.getDataMapList().get(i).entrySet()) {
label=new Label(dataMap.getKey(),row,dataMap.getValue().toString());
sheet.addCell(label);
}
}
return sheetIndex;
}
这里对数据条数进行检查,如果数量过大则进行分工作薄处理
/**
* 通过文件方式生成excel并导出数据
* createExcelToFile(fileName,sheetDataList) 方法简化,只生成单个工作薄时使用
* @param fileName 文件名称
* @param sheetData 工作薄数据类
* @return
* @throws IOException
* @throws RowsExceededException
* @throws WriteException
*/
public static File createExcelOneSheetToFile(String fileName,ExcelSheetData sheetData) throws IOException, RowsExceededException, WriteException{
List<ExcelSheetData> sheetDataList = new ArrayList<ExcelSheetData>();
sheetDataList.add(sheetData);
return createExcelToFile(fileName,sheetDataList);
}
/**
* 通过文件方式生成excel并导出数据,可生成多个工作薄
* @param fileName 文件名
* @param sheetData 工作薄数据类
* @throws IOException
* @throws RowsExceededException
* @throws WriteException
*/
public static File createExcelToFile(String fileName, List<ExcelSheetData> sheetData) throws IOException, RowsExceededException, WriteException{
File file = new File(fileName);
//创建工作簿
WritableWorkbook workbook=Workbook.createWorkbook(file);
//创建sheet,设置第二三四..个sheet,依次类推即可
int sheetIndex = 0;
for (int i=0;i<sheetData.size();i++){
sheetIndex = createSheet(workbook,sheetData.get(i),sheetIndex);
sheetIndex++;
}
//写入数据,一定记得写入数据,不然你都开始怀疑世界了,excel里面啥都没有
workbook.write();
//最后一步,关闭工作簿
workbook.close();
return file;
}
jxl支持多工作簿导出,对开发也方便了许多。