业务场景:查询文档获取里面的数据,然后组装返回。
问题描述:我现在拿到了文档的base64字符串,我用base64Decoder转为了byte[],现在怎么把字节数组在内存中转为excel文件,然后获取里面的sheet(不止一个)表的字段的数据。我会把字节数组读到本地写成文件,这个比较简单,有四张sheet表,有可能是中文也可能是英文(根据用户操作数据时的界面不同,我下载的文件的sheet表名和表中的字段名也会对应成中文或英文),把本地文件读到内存,网上应该能找到不少,但我不能把文件存到硬盘上转为excel,在从硬盘上读取到内存中获取数据吧,有没有办法可以在内存中直接转为excel,然后读取数据呢?
String termsFile = String.valueOf(sapResult.get("File"));
BASE64Decoder base64Decoder = new BASE64Decoder();
byte[] bytes = base64Decoder.decodeBuffer(termsFile);
我pom文件里,目前只有一个apache的
org.apache.poi
poi-ooxml
4.1.2
可以试试下面方法能不能帮上你
1.用WorkbookFactory类将字节数组转换为Workbook对象
byte[] data = ... // base64解码后的字节数组
InputStream is = new ByteArrayInputStream(data);
Workbook workbook = WorkbookFactory.create(is);
2.用Workbook对象来访问Excel文件中的各个表单(sheet)
Sheet sheet = workbook.getSheetAt(0); // 获取第一个表单
// 或者根据表单名称获取表单
Sheet sheet = workbook.getSheet("Sheet1");
3.有了表单对象,你可以遍历它的行和单元格,以获取所需的数据:
for (Row row : sheet) {
for (Cell cell : row) {
switch (cell.getCellType()) {
case Cell.CELL_TYPE_STRING:
System.out.println(cell.getStringCellValue());
break;
case Cell.CELL_TYPE_NUMERIC:
System.out.println(cell.getNumericCellValue());
break;
// 其他数据类型
}
}
}
不知道你这个问题是否已经解决, 如果还没有解决的话: