gpt4 book ai didi

excel - 在 Excel 中打开使用 SXSSFWorkbook 创建的文件 : "Unreadable Content Found"

转载 作者:行者123 更新时间:2023-12-02 10:31:01 30 4
gpt4 key购买 nike

有几个相关问题,但我找不到反射(reflect)我情况的问题。

我正在使用 SXSSFWorkbook 和 SXSSFSheet 对象通过 Apache POI 编写 Excel“xlsx”文件。该文件创建时没有任何问题,并且在 LibreOffice 中可以正常打开,但是 Excel 在打开该文件时出现错误。

Excel found unreadable content in 'test-file.xlsx'. Do you want to recover the contents of the workbook? If you trust the source of this workbook, click Yes.

选择"is"时...

Excel was able to open the file by repairing or removing the unreadable content.

Removed Feature: Format from /xl/styles.xml part (Styles)

Repaired Records: Cell information from /xl/worksheets/sheet1.xml part

创建此工作簿的代码非常无聊,我没有设置任何样式或任何有趣的东西。我创建工作簿和一张工作表,然后向其中写入数据。

private Workbook createWorkbook(final String sheetName, final String[] headers) {

// create a new workbook and sheet
final SXSSFWorkbook workbook = new SXSSFWorkbook(500);
final SXSSFSheet sheet = (SXSSFSheet) workbook.createSheet(sheetName);

// create and fill our header row
final Row row = sheet.createRow(0);
for (int index = 0; index < headers.length; index++) {
row.createCell(index).setCellValue(headers[index]);
}

return workbook;
}

写入数据同样无趣。

private void exportPersonWorkbook(final Workbook workbook, final String sheetName, final PersonExport personExport) {

// list of data for this new row
final List rowValues = new ArrayList();

// person id
rowValues.add(personExport.getContactId());

// dec region number
rowValues.add(personExport.getRegion());

// birth date
rowValues.add(personExport.getBirthDate());

// day phone
rowValues.add(personExport.getMailingContactInfoBusinessPhone());

...and so on...

writeRowToWorkbook(workbook, sheetName, rowValues);
}

private void writeRowToWorkbook(final Workbook workbook, final String sheetName, final List values) {

// helper and our date format
final CreationHelper creationHelper = workbook.getCreationHelper();
final CellStyle dateStyle = workbook.createCellStyle();
dateStyle.setDataFormat(creationHelper.createDataFormat().getFormat(
PesticidesDomainConstants.DEFAULT_DATE_PATTERN));

// get a handle on our worksheet
final Sheet sheet = workbook.getSheet(sheetName);

// create our new row
final Row row = sheet.createRow(sheet.getLastRowNum() + 1);

// write all of our data to the row
int column = 0;
final Iterator iterator = values.iterator();
while (iterator.hasNext()) {

final Object value = iterator.next();
if (value != null) {

// create our new cell
final Cell cell = row.createCell(column);

// Excel cells can only handle certain data types
if (value instanceof String) {
cell.setCellValue((String) value);
} else if (value instanceof Integer) {
cell.setCellValue((Integer) value);
} else if (value instanceof Double) {
cell.setCellValue((Double) value);
} else if (value instanceof Date) {
cell.setCellValue((Date) value);

// set the cell format for dates
cell.setCellStyle(dateStyle);
} else {

// last ditch effort to populate cell
cell.setCellValue(value.toString());
}
}

// increment our column counter
column++;
}
}

该文件打开时看起来几乎正确,我看不出有什么不同。有人使用 Apache POI 看到过这个问题吗?我希望有一些简单的东西,比如一个额外的标志或设置来完成这项工作。任何帮助将不胜感激!

最佳答案

我解决了这个问题,但很遗憾没有早点发现这个问题。如果您查看“writeRowToWorkbook”方法,您会发现它为保存日期的单元格创建了 CellStyle。显然,每次写入一行时都向工作表添加 CellStyle 并不是一个好主意。将日期 CellStyle 的创建移出到工作簿方法中解决了此问题。

关于excel - 在 Excel 中打开使用 SXSSFWorkbook 创建的文件 : "Unreadable Content Found",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19251164/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com