SXSSF与Excel表
我正在尝试在stream式工作簿(SXSSFWorkbook)中创build一个Excel表。 它不直接支持API,但是通过访问底层的XSSFWorkbook(workbook.getXSSFWorkbook)已经取得了一些成功。
当我在Excel(2007)中打开文件时,它会显示“Excel在”test.xlsx“中发现了不可读的内容。是否要恢复此工作簿的内容?” 点击是成功修复工作簿,我得到正确的结果。
日志说:“修复logging:从/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工作表的链接表的Access数据库
- 尝试在JAVA中将数据写入多个工作表时,XLSX文件被损坏
- 如何使用Java HSSF附加到现有的Excel文件
- 用Java获取Excel信息
- 我如何使用POI Excel以编程方式拉伸列以适应文本?
- 在使用apache POI从xlsx文件读取数据时出现的线程“main”org.apache.poi.POIXMLExceptionexception中的exception
- 如何从Excel文件单元格使用POI获取数值和string值,我正在获取数值错误,string值很容易获取
- java.lang.NoClassDefFoundError:org / apache / poi / ss / usermodel / Workbook
- 如何解决java.lang.VerifyError:org / apache / poi / xssf / usermodel / XSSFWorkbook?