1.导包
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>4.1.2</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>4.1.2</version>
</dependency>
2.代码
@RequestMapping("/test1")
@ResponseBody
public ResponseEntity<InputStreamResource> test1(HttpServletResponse response) throws IOException {
// 创建一个工作簿
Workbook workbook = new XSSFWorkbook();
// 创建一个工作表
Sheet sheet = workbook.createSheet("Sheet1");
Sheet sheet1 = workbook.createSheet("雁东");
Sheet sheet2 = workbook.createSheet("城北");
// 创建行和单元格,并填充数据
Row headerRow = sheet.createRow(0);
headerRow.createCell(0).setCellValue("companyName");
headerRow.createCell(1).setCellValue("zcount");
Row dataRow1 = sheet.createRow(1);
dataRow1.createCell(0).setCellValue("雁东");
// 创建超链接
CreationHelper creationHelper = workbook.getCreationHelper();
Hyperlink hyperlink = creationHelper.createHyperlink(HyperlinkType.DOCUMENT);
hyperlink.setAddress("'雁东'!A1");
// 在单元格上设置超链接和值,注意要使用一个Cell对象来设置值和超链接
Cell cell1 = dataRow1.createCell(1);
cell1.setCellValue(1);
cell1.setHyperlink(hyperlink);
Row dataRow2 = sheet.createRow(2);
dataRow2.createCell(0).setCellValue("城北");
dataRow2.createCell(1).setCellValue(2);
// 将工作簿转换为字节数组
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
workbook.write(outputStream);
byte[] excelBytes = outputStream.toByteArray();
// 设置响应头信息
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
headers.setContentDispositionFormData("attachment", "data.xlsx");
// 创建一个输入流资源包装字节数组
InputStreamResource inputStreamResource = new InputStreamResource(new ByteArrayInputStream(excelBytes));
// 返回响应实体对象
return ResponseEntity.ok()
.headers(headers)
.body(inputStreamResource);
}
3.注意
-
导出xls使用HSSFWorkbook对象,导出xlsx使用XSSFWorkbook对象
-
HSSFWorkbook: HSSFWorkbook是POI库中用于处理xls格式的Excel文件(Excel 97-2003)的类。它使用HSSF(Horrible Spreadsheet Format)来处理二进制格式的Excel文件。HSSFWorkbook在内存中表示Excel文档的数据结构,可以读取、写入和修改xls文件。 XSSFWorkbook: XSSFWorkbook是POI库中用于处理xlsx格式的Excel文件(Excel 2007及以上版本)的类。它使用XSSF(XML Spreadsheet Format)来处理基于XML的Excel文件。XSSFWorkbook同样在内存中表示Excel文档的数据结构,可以读取、写入和修改xlsx文件。 区别: 文件格式:HSSFWorkbook处理xls格式文件,XSSFWorkbook处理xlsx格式文件。 底层实现:HSSFWorkbook使用HSSF方式,操作二进制格式文件;XSSFWorkbook使用XSSF方式,操作基于XML的文件。 兼容性:HSSFWorkbook兼容Excel 97-2003版本的文件;XSSFWorkbook兼容Excel 2007及以上版本的文件。 功能支持:由于xlsx格式的文件支持更多功能和特性,XSSFWorkbook相对于HSSFWorkbook提供了更多的功能和灵活性。
-
-
注意这段代码
-
Cell cell1 = dataRow1.createCell(1); cell1.setCellValue(1); cell1.setHyperlink(hyperlink); //之前老写成下面这样,图省事。但是这个实际上创建了两次Cell对象,后面的会覆盖前面的 dataRow1.createCell(1).setCellValue(1); dataRow1.createCell(1).setHyperlink(hyperlink);
-
-
暂时没了