如何解决从工作簿中以字节 [] 形式返回特定工作表
我将此 Excel 工作簿存储在我的资源文件夹中。考虑到这个 excel 有 9 页,我想提取一个特定的页面并将其从字节 [] 中返回。
我创建了这个控制器
@GetMapping(value = "/getSinglePage/{pageNumber}")
private ResponseEntity<byte[]> getExcelByPageNumber(@PathVariable Integer pageNumber) throws IOException {
return new ResponseEntity<>(service.getExcelByPageNumber(pageNumber),HttpStatus.OK);
}
服务代码包含--
public byte[] getExcelByPageNumber(Integer pageNumber) throws IOException {
Workbook workbook = null;
byte[] byteArray = null;
// here file.xls is my excel sheet that contains 9 sheet for example
workbook = WorkbookFactory.create(loader.getResource("classpath:file.xls").getInputStream());
//gets the sheet from given page number
Sheet sheet = workbook.getSheetAt(pageNumber);
// Now i want to return this sheet in the form of byte[]
return byteArray;
}
我应该如何将其返回为byte[]的形式?
解决方法
通过做一些 POC,我了解到没有自己的工作簿就不可能存在单个工作表。并且 Workbook 限制了可以使用的库。所以显然我找不到任何直接的解决方案来复制或附加工作表。
我所做的是删除了不需要的工作表,这些工作表只保留工作簿中的工作表,然后使用 ByteArrayOutputStream 编写。
public byte[] getExcelByPageNumber(Integer pageNumber) throws IOException {
// TODO Auto-generated method stub
Workbook workbook = new XSSFWorkbook();
workbook = WorkbookFactory.create(loader.getResource("classpath:file.xls").getInputStream());
Sheet tmpSheet = workbook.getSheetAt(pageNumber - 1);
for (int i = workbook.getNumberOfSheets() - 1; i >= 0; i--) {
String sheetName = workbook.getSheetName(i).trim();
if (!tmpSheet.getSheetName().equals(sheetName)) {
workbook.removeSheetAt(i);
}
}
ByteArrayOutputStream bos = new ByteArrayOutputStream();
try {
workbook.write(bos);
} finally {
bos.close();
}
byte[] bytes = bos.toByteArray();
return bytes;
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。