需要导入2个jar包
commons-math3-3.6.1.jar
poi-4.1.2.jar
gihub 和maven库可以下载
maven仓库链接
1.2 导出excel
导出操作,即使用 Java 写出数据到 Excel 中,常见场景是将页面上的数据导出,这些数据可能是财务数据,也可能是商品数据,生成 Excel 后返回给用户下载文件。
在 poi 工具库中,导出 api 可以分三种方式
- HSSF方式: 这种方式导出的文件格式为office 2003专用格式,即.xls,优点是导出数据速度快,但是 最多65536行 数据
- XSSF方式: 这种方式导出的文件格式为office 2007专用格式,即.xlsx,优点是导出的数据不受行数限制,缺点导出速度慢
- SXSSF方式: SXSSF 是 XSSF API的兼容流式扩展,主要解决当使用 XSSF 方式导出大数据量时,内存溢出的问题,支持导出大批量的excel数据
package com.heima.test;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
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;
import org.apache.poi.ss.usermodel.HorizontalAlignment;
public class ExcelOutput {
//创建表头
public static void createTitle(HSSFWorkbook workbook,HSSFSheet sheet){
HSSFRow row = sheet.createRow(0);
//列宽,第一个参数为第几列,第二个参数是宽度,基本单位为1/256个字符宽度
//要想得到准确的值,按下面方式直接写就可以
sheet.setColumnWidth(0, (int)(20+0.72)*256);//实际宽度为20
sheet.setColumnWidth(1, (int)(30+0.72)*256);//实际宽度为30
//设置表头格式
HSSFCellStyle style = workbook.createCellStyle();
HSSFFont font = workbook.createFont();
font.setBold(true);//加粗
style.setAlignment(HorizontalAlignment.CENTER);//居中
style.setFont(font);
//设置表头
HSSFCell cell;
cell = row.createCell(0);//标明第几列
cell.setCellValue("字名");//表头
cell.setCellStyle(style);
cell = row.createCell(1);
cell.setCellValue("书法家");
cell.setCellStyle(style);
cell = row.createCell(2);
cell.setCellValue("书体");
cell.setCellStyle(style);
cell = row.createCell(3);
cell.setCellValue("朝代");
cell.setCellStyle(style);
cell = row.createCell(4);
cell.setCellValue("来源");
cell.setCellStyle(style);
cell = row.createCell(5);
cell.setCellValue("文件格式");
cell.setCellStyle(style);
}
//生成Excel文件
public static void buildExcelFile(String filename,HSSFWorkbook workbook) throws Exception{
FileOutputStream fos = new FileOutputStream(filename);
workbook.write(fos);
workbook.close();
}
//把想要的数据放到Excel表格中
public static void main(String[] args) throws Exception{
String path = "C:\\Users\\U100000\\Desktop\\file";
File file = new File(path);
//list()方法是返回某个目录下的所有文件和目录的文件名,返回的是String数组
//listFiles()方法是返回某个目录下所有文件和目录的绝对路径,返回的是File数组
File[] fs = file.listFiles();
HSSFWorkbook workbook = new HSSFWorkbook();
HSSFSheet sheet = workbook.createSheet("字库表");
createTitle(workbook,sheet);
int rowNum = 1;
for(File f : fs){
//java中的isDirectory()是检查一个对象是否是文件夹。返回值是boolean类型的。如果是则返回true,否则返回false。
if(!f.isDirectory()){
String s = f.getName();
//split():字符串分隔符,默认加“\\”,这里的意思就是文件名被“_”分开
String[] strArr = s.split("\\_");
HSSFRow row = sheet.createRow(rowNum);
for(int i = 0;i<strArr.length;i++){
row.createCell(i).setCellValue(strArr[i]);
}
rowNum++;
}
}
String fileName = "C:\\Users\\U10000\\Desktop\\out\\字库.xls";
//生成Excel文件
buildExcelFile(fileName,workbook);
System.out.println("生成完成");
}
}