使用 XSSFWorkbook,是否可以将行附加到现有工作表?我正在进行多次写入(由于错误,这是一个需要解决的 PITA),虽然我可以多次写出新的工作表,但似乎我无法附加。
我目前正在做的事情如下:
- 阅读我的工作簿中的工作表。
- 加载工作簿。
- 将行追加到内存中的工作簿
- 再写出来。
4 似乎不起作用,只是完全忽略它!
我知道 SXSSFWorkbook 存在,但尝试将现有的 XSSFWorkbook 转换为流工作簿会在写入时造成损坏。
这个难题有可能解决吗?
更新:根据建议更改了代码,但出现流关闭错误。
代码:(物理行正确返回,但没有写出任何内容)
private void writeToSheetMultipleTimes(SXSSFWorkbook wb,
ReportTemplateStructure appA, File wbFile)
{
Sheet sheet = wb.getSheetAt(0);
log.info("Attempting multi-write to sheet: " + sheet.getSheetName());
for(int i = 0; i < 10; i++)
{
Row row = sheet.getRow(i);
if (row == null) {
row = sheet.createRow(i);
}
Cell cell = row.getCell(0, Row.CREATE_NULL_AS_BLANK);
cell.setCellValue("Written value:" + i);
int numRows = sheet.getPhysicalNumberOfRows();
log.info("Current row count: " + numRows);
try{
XSSFWorkbook xssfBook = (XSSFWorkbook)writeOutAndReadBack(wb);
wb.dispose();
wb = new SXSSFWorkbook(xssfBook);
} catch (Exception e)
{
log.error("Unable to perform multiple write to same sheet", e);
}
}
}
public Workbook writeOutAndReadBack(Workbook wb) {
if(!(wb instanceof SXSSFWorkbook)) {
throw new IllegalArgumentException("Expected an instance of SXSSFWorkbook");
}
Workbook result;
try {
FileOutputStream baos = new FileOutputStream(streamingWorkBookFile);
wb.write(baos);
InputStream is = new FileInputStream(streamingWorkBookFile);
result = new XSSFWorkbook(is);
} catch (IOException e) {
throw new RuntimeException(e);
}
return result;
}
您似乎总是对 Sheet 0 进行更改,但您正在调用createRow
每次。如果那里已经有东西了,例如在你的第二次通过时,这将不会顺利!您要么需要每次添加一个新工作表,要么通过调用来检查该行是否存在getRow(int)
首先且仅当它为空时才创建。
如果我们查看您的代码片段:
Sheet sheet = wb.getSheetAt(0);
for(int i = 0; i < 10; i++)
{
Row row = sheet.createRow(i);
Cell cell = row.createCell(0);
那应该是这样的:
Sheet sheet = wb.createSheet();
for(int i = 0; i < 10; i++)
{
Row row = sheet.createRow(i);
Cell cell = row.createCell(0);
或者您应该首先检查并仅创建丢失的行/单元格,例如
Sheet sheet = wb.getSheetAt(0);
for(int i = 0; i < 10; i++)
{
Row row = sheet.getRow(i);
if (row == null) {
row = sheet.createRow(i);
}
Cell cell = row.getCell(0, Row.CREATE_NULL_AS_BLANK);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)