1.依赖
<!-- poi -->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>4.1.0</version>
</dependency>
2. 基本使用
//1. 在内存中创建一个excel文件 工作薄
HSSFWorkbook book = new HSSFWorkbook();
//2. 通过book创建Sheet
HSSFSheet sheet03 = book.createSheet("sheet03");
//3. 通过sheet创建row
HSSFRow row = sheet03.createRow(0);//第一行
//4. 通过row 创建 cell
HSSFCell cell = row.createCell(0);//第一列
//5. 在cell中存值
cell.setCellValue("helloworld~~~");
sheet03.autoSizeColumn(0);//第一列宽度自适应
// 存储工作薄
book.write(new File("d:\\test\\test.xls"));
book.close();
// 读取工作薄
HSSFWorkbook book = new HSSFWorkbook(new FileInputStream("d:\\test\\abc.xls"));
// 读取 sheet
HSSFSheet sheet = book.getSheet("sysUsers2");
// 获得 row迭代器
Iterator<Row> rows = sheet.rowIterator();
while(rows.hasNext()){// 遍历所有行
Row row = rows.next();
// 获得cell迭代器
Iterator<Cell> cells = row.cellIterator();
while(cells.hasNext()){//遍历当前行所有cell
Cell cell = cells.next();
String value = cell.getStringCellValue();//获得cell值
System.out.print(value+"\t");
}
System.out.println();
}
3. 样式定制
//样式 ,可以为每个cell追加样式
HSSFCellStyle style = book.createCellStyle();
style.setBorderTop(BorderStyle.THIN); // 上下左右的边框
style.setBorderBottom(BorderStyle.THIN);
style.setBorderLeft(BorderStyle.THIN);
style.setBorderRight(BorderStyle.THIN);
style.setAlignment(HorizontalAlignment.CENTER); // 水平居中
style.setVerticalAlignment(VerticalAlignment.CENTER); // 垂直居中
Font font = book.createFont();//字体
font.setBold(true); // 粗体
font.setItalic(true);//斜体
font.setUnderline(Font.U_SINGLE);//下划线
font.setStrikeout(true);//删除线
font.setColor(IndexedColors.RED.getIndex()); //字体颜色
font.setFontHeightInPoints((short)20);//字号:20号字体
style.setFont(font);// 设置字体
style.setFillForegroundColor(IndexedColors.YELLOW.getIndex());//背景色
style.setFillPattern(FillPatternType.SOLID_FOREGROUND);//背景色
//追加样式
cell.setCellStyle(style);
4.工具类
// 将任何类型的数据集合,写出到xls中
// 数据 sheet名 响应 文件名
public static void write(List<Object> data, String sheetName,HttpServletResponse response,String fileName)
throws NoSuchFieldException, IllegalAccessException, IOException {
//1.在内存中创建一个excel文件
HSSFWorkbook hssfWorkbook = new HSSFWorkbook();
//2.创建工作簿
HSSFSheet sheet = hssfWorkbook.createSheet(sheetName);
//3.建立表头
// 获取数据的所有 属性
Field[] fields = data.get(0).getClass().getDeclaredFields();
// 创建表头行
HSSFRow titlerRow = sheet.createRow(0);
// 在表头行中 为数据的每个属性 创建一个cell
for (int i = 0; i < fields.length; i++) {
HSSFCell cell = titlerRow.createCell(i);
cell.setCellValue(fields[i].getName());
}
// 4. 遍历数据
for (Object d : data) {
// 新建数据行
int lastRowNum = sheet.getLastRowNum();//当前的最后一行的行号
HSSFRow row = sheet.createRow(lastRowNum+1);
for (int i = 0; i < fields.length; i++) {
HSSFCell cell = row.createCell(i);
// 获取当前 数据中的属性值
Field f = fields[i];//获取属性
System.out.println("Field name:"+f.getName());
f.setAccessible(true);//此private属性允许访问
String cellValue = String.valueOf(f.get(d));
cell.setCellValue(cellValue);
}
}
// 在定义好内容后,最后根据内容做每列的宽度自适应
for (int i = 0; i < fields.length; i++) {
sheet.autoSizeColumn(i);
}
//写出
String finalFileName = new String(fileName.getBytes(Charset.forName("utf-8")),"iso-8859-1");
response.setHeader("content-disposition","attachment;filename="+finalFileName);
hssfWorkbook.write(response.getOutputStream());
hssfWorkbook.close();
response.getOutputStream().close();
}
来源:CSDN
作者:松鼠MaSaKi
链接:https://blog.csdn.net/qq_45337431/article/details/103532255