- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试在流式工作簿 (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/
根据SXSSF (Streaming Usermodel API) documentation : SXSSF (package: org.apache.poi.xssf.streaming) is
我有一个 .xlsx 文件,其中包含包含不同数据的多个工作表。在所有的Sheet中,一张需要容纳近10万行数据,而且数据需要用Java和poi编写。 这对于 SXSSFWorkbook 来说似乎非常快
我正在尝试在流式工作簿 (SXSSFWorkbook) 中创建 Excel 表。 API 不直接支持它,但我通过访问底层 XSSFWorkbook (workbook.getXSSFWorkbook)
我正在尝试使用 SXSSF 读取 xls 文件。我读过 SXSSF,但不明白如何使用它。所以我遇到了一些问题。 任何人都可以帮助我读取大型 xls 文件(大约 100,000 行和 7-8 页)的 j
问题 在 SXSSF 工作簿中: 如何设置字体? 如何将细胞类型设置为日期? 上下文 我需要编写一个包含大量行和列(400.000 行,每行 50 个字段)的 excel .xlsx 文件,所以我使用
我正在使用 SXSSF 编写 100 万条(最坏情况)记录。 以下是我编码的方式。 我必须将记录写入已经存在的 Excel 模板。这个 模板是 在类路径中可用。我将把这个模板复制到一个普通的 地点。使
在我的项目中,我使用 SXSSFWorkbook (Apache-POI 3.9) 类来管理大型电子表格。现在我需要评估某些单元格的公式,所以我尝试使用像这样的 FormulaEvaluator ..
我的表中有 500 行。当我使用 setRandomAccessWindowSize(1000) 时,它工作正常。数据已从结果集中成功导出到 Excel 文件中,但是当我使用 setRandomAcc
我正在使用 Apache POI 库将大量数据导入 Excel 文件。我不能使用 HSSF 模型,因为它需要太多内存并且 Java 会抛出内存堆异常。我发现的方法是 SXSSF 工作簿模型,它将每 N
我有一个问题。我是对的,如果我有一个通过 xssf 构造函数创建的工作簿,那么将构造函数更改为 sxssf 工作簿就足够了(使用 xssf wb 作为参数传递)以使其在 流模式 下工作?非常感谢您的回
我正在尝试编写一个巨大的 excel 文件,我的要求允许我写下行然后忘记,所以我正在使用 SXSSF这只允许在内存中保留少数行,其余的都写入文档。这有助于克服大文件的内存不足异常。 但我还需要使用 s
我需要读取大型 excel 文件并将其数据导入我的应用程序。 由于 POI 占用大量堆工作,经常抛出 OutOfMemory 错误,我发现有一个 Streaming API 用于串行处理 excel
我想将 SXSSF 转换器与 JXLS 一起使用。我试图以这样一种方式编写我的模板,即我不会得到“试图在已经写入磁盘的范围内写入一行”异常。该模板捕获已知列(例如“HEADER 0”)和未知列(以“_
使用 POI 时 XSSFWorkbook ,单元格(通过生成的 xlsx 文件内的 sharedStrings.xml)会自动保留空白,即 sharedStrings.xml 中的条目看起来像
我有一个包含宏 (.xlsm) 的 Excel 模板,我想读入它,向其中添加一百万行并将其写出。 我知道使用包含宏的 POI 读取和重写文件将保留宏。我需要使用 SXSSF(内存限制)写出 Excel
我能够使用 XSSF 读取现有的 xlsm,并使用 SXSSF 将数据写入工作表。最后使用 Outputstream 将其输出为另一个 xlsm。 SXSSF在文档中提到用于编写xlsx 读取和写入大
我正在使用 POI () 的流式工作表编写一个大型 Excel 工作表(超过一百万条记录),但出现 java.lang.OutOfMemoryError: Java heap space。这是我的代码
正在尝试使用 apache POI 3.17 在应用程序上实现 excel 导出功能。 在我的本地 tomcat 服务器和 Windows 开发环境中,一切都运行良好。但是,SXSSFWorkbook
我在使用 SXSSF poi api 生成有效的 xlsx 文件时遇到问题。如果我使用以下代码,则会生成正确的 Excel 文件:工作簿 wb = new XSSFWorkbook();但如果我使用失
我有一个包含 400,000 行的大型 .xlsx Excel 工作表。我想在这个现有的工作簿中阅读和写作。 当我尝试使用 Apache poi 在 java 中读取它时,代码如下: FileInpu
我是一名优秀的程序员,十分优秀!