gpt4 book ai didi

excel - SXSSF 与 Excel 表格

转载 作者:行者123 更新时间:2023-12-03 00:50:30 25 4
gpt4 key购买 nike

我正在尝试在流式工作簿 (SXSSFWorkbook) 中创建 Excel 表。 API 不直接支持它,但我通过访问底层 XSSFWorkbook (workbook.getXSSFWorkbook) 取得了一些成功。

当我在 Excel (2007) 中打开该文件时,它显示“Excel 在“test.xlsx”中发现了无法读取的内容。是否要恢复此工作簿的内容?”。单击"is"成功修复工作簿,我得到了正确的结果。

日志显示“已修复记录:来自/xl/tables/table1.xml 部分的表(表)”。

有人知道如何避免 Excel 错误吗?

下面是一个例子:

public class SXSSFTest {

private static final int NB_ROWS = 5;
private static final int NB_COLS = 5;

public static void main(String[] args) throws Exception {

try (SXSSFWorkbook workbook = new SXSSFWorkbook();
FileOutputStream outputStream = new FileOutputStream("C:\\test.xlsx")) {

SXSSFSheet sheet = workbook.createSheet();

fillSheet(sheet);

String dataRange = new AreaReference(
new CellReference(0, 0),
new CellReference(NB_ROWS - 1, NB_COLS - 1))
.formatAsString();

CTTable cttable = workbook.getXSSFWorkbook()
.getSheetAt(0)
.createTable()
.getCTTable();

CTTableStyleInfo tableStyle = cttable.addNewTableStyleInfo();
tableStyle.setName("TableStyleMedium17");

cttable.setRef(dataRange);
cttable.setDisplayName("TABLE");
cttable.setName("TABLE");
cttable.setId(1L);

CTTableColumns columns = cttable.addNewTableColumns();
columns.setCount(NB_COLS);

for (int c = 0; c < NB_COLS; c++) {
CTTableColumn column = columns.addNewTableColumn();
column.setName("Column" + c);
column.setId(c + 1L);
}

cttable.setAutoFilter(CTAutoFilter.Factory.newInstance());

workbook.write(outputStream);
}
}

private static void fillSheet(SXSSFSheet sheet) {
for (int rowNb = 0; rowNb < NB_ROWS; rowNb++) {
SXSSFRow row = sheet.createRow(rowNb);

for (int colNb = 0; colNb < NB_COLS; colNb++) {
SXSSFCell cell = row.createCell(colNb);
cell.setCellValue("Cell-" + colNb);
}
}
}
}

最佳答案

表格第一行中的单元格值必须与列名称相对应。

您在 main 方法中的代码将列命名为 Column0 ... Column4 但您在 fillSheet 方法中的代码将“Cell-0”...“Cell-4”写入第一行的单元格中。这不匹配。

您可以像这样更改 fillSheet 方法:

...
private static void fillSheet(SXSSFSheet sheet) {
for (int rowNb = 0; rowNb < NB_ROWS; rowNb++) {
SXSSFRow row = sheet.createRow(rowNb);

for (int colNb = 0; colNb < NB_COLS; colNb++) {
SXSSFCell cell = row.createCell(colNb);
if (rowNb==0) cell.setCellValue("Column" + colNb); //first row are column names
else cell.setCellValue("Cell-" + colNb);
}
}
}
...

关于excel - SXSSF 与 Excel 表格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41677255/

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