标签: apache-poi

使用java编写大量excel文件的API

我期待使用Java以编程方式写入excel(.xls MS Excel 2003格式)文件.excel输出文件可能包含~200,000行,我打算将其分成多张纸(由于excel限制,每张64k行).

我尝试过使用apache POI API,但由于API对象模型,它似乎是一个内存耗尽.我被迫将单元格/工作表添加到内存中的工作簿对象中,只有添加了所有数据后,我才能将工作簿写入文件!以下是apache建议如何使用API​​编写excel文件的示例:

Workbook wb = new HSSFWorkbook();
Sheet sheet = wb.createSheet("new sheet");

//Create a row and put some cells in it
Row row = sheet.createRow((short)0);

// Create a cell and put a value in it.
Cell cell = row.createCell(0);
cell.setCellValue(1);

// Write the output to a file
FileOutputStream fileOut = new FileOutputStream("workbook.xls");
wb.write(fileOut);
fileOut.close();
Run Code Online (Sandbox Code Playgroud)

显然,编写~20k行(每行有10-20列)给了我可怕的"java.lang.OutOfMemoryError:Java堆空间".

我尝试使用Xms和Xmx参数将XVM初始堆大小和最大堆大小增加为Xms512m和Xmx1024.仍然无法向文件写入超过150k行.

我正在寻找一种流式传输到excel文件的方法,而不是在将其写入磁盘之前在内存中构建整个文件,这有望节省大量内存.任何替代API或解决方案都将受到赞赏,但我仅限于使用java.谢谢!:)

java excel apache-poi

16
推荐指数
2
解决办法
4万
查看次数

使用Apache POI创建Excel图表

我需要从我的Java代码创建excel表,其中包含使用Apache POI库的条形图,折线图等图表.可能吗?我无法找到相同的任何有用的代码示例.

除了Java的POI库之外,还有其他替代方法吗?

java apache excel charts apache-poi

16
推荐指数
2
解决办法
4万
查看次数

在Excel文件中读取Apache POI XSSF

我刚才有一个关于如何使用Apache的XSSF格式读取xlsx文件的快速问题.

现在我的代码看起来像这样:

InputStream fs = new FileInputStream(filename);   // (1)
XSSFWorkbook wb = new XSSFWorkbook(fs);           // (2)
XSSFSheet sheet = wb.getSheetAt(0);               // (3)
Run Code Online (Sandbox Code Playgroud)

......导入了所有相关的东西.我的问题是,当我点击运行时,它会陷入第(2)行,几乎是无限循环.filename只是一个字符串.

如果有人能给我一些关于如何解决这个问题的示例代码,我将非常感激.我现在想要的只是从xlsx文件中读取单个单元格; 我使用HSSF用于xls文件并且没有问题.

谢谢你的帮助,安德鲁

java apache excel apache-poi xssf

16
推荐指数
3
解决办法
8万
查看次数

java.lang.OutOfMemoryError:使用Apache POI读取excel时的Java堆空间

我的文件是9MB,我在加载工作簿时遇到此错误.

XSSFWorkbook workbook = new XSSFWorkbook(excelFilePath); 
Run Code Online (Sandbox Code Playgroud)

这条线导致 java.lang.OutOfMemoryError: Java heap space

我怎么解决这个问题?

java apache-poi

16
推荐指数
2
解决办法
4万
查看次数

导出到Excel JSF和PrimeFaces

使用JDK 1.6,JSF 2.1,PrimeFaces 2.2.1,POI 3.2和Apache Tomcat 7

我正在尝试设置一个servlet,允许根据用户选择下载excel文件.excel文档在运行时创建.

没有错误,代码确实进入了servlet.

我点击按钮,没有任何反应.我没有使用PrimeFaces使用的数据表导出,因为我需要对Excel文档中的数据进行重新排序和自定义格式化.

ExportExcelReports.java

protected void processRequest(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {       
    response.setContentType("application/vnd.ms-excel");
    response.setHeader("Content-Disposition", "attachment; filename=\"my.xls\"");                

    HSSFWorkbook workbook = new HSSFWorkbook();

    HSSFSheet sheet = workbook.createSheet();
    HSSFRow row = sheet.createRow(0);
    HSSFCell cell = row.createCell(0);
    cell.setCellValue(0.0);

    FileOutputStream out = new FileOutputStream("my.xls");
    workbook.write(out);
    out.close();
}
Run Code Online (Sandbox Code Playgroud)

ProjectReportBean.java

public void getReportData() {
    try {
        FacesContext ctx = FacesContext.getCurrentInstance();
        ExternalContext ectx = ctx.getExternalContext();
        HttpServletRequest request = (HttpServletRequest) ectx.getRequest();
        HttpServletResponse response = (HttpServletResponse) ectx.getResponse();
        RequestDispatcher dispatcher = request.getRequestDispatcher("/ExportExcelReports"); …
Run Code Online (Sandbox Code Playgroud)

java apache-poi primefaces jsf-2 tomcat7

16
推荐指数
1
解决办法
4万
查看次数

如何在Java中的Excel工作簿之间复制工作表

如何在Apache poi中的两个不同工作簿之间复制工作表?

引用线程时缺少该方法.没有这样的解决方案.

java excel apache-poi

16
推荐指数
1
解决办法
2万
查看次数

SXSSFWorkbook上的AutosizeColumns

是否可以在流式SXSSFWorkbook上使用autoSizeColumns?我实现了导出功能,以将对象列表导出为ex​​cel.起初我使用了XSSFWorkbook(不是流式传输),在创建了所有单元格之后,我自动化了所有列,产生了一个很好的excel文件.

对于性能问题,我们希望将工作簿更改为流式版本,但这会在org.apache.poi.ss.util.SheetUtil.getCellWidth中生成NullPointer.

是否可以为SXSSFWorkbook调用autoSizeColumns?

我使用的是poi-ooxml 3.9,但我在3.8中遇到了同样的问题.

java nullpointerexception apache-poi

16
推荐指数
2
解决办法
2万
查看次数

使用HSSF从Excel读取字符串值,但它是双倍的

我正在使用HSSF-POI来读取Excel数据.问题是我在单元格中的值看起来像一个数字,但实际上是字符串.如果我在Excel中查看格式单元格,则表示类型为"text".HSSF Cell仍然认为它是数字的.如何将值作为字符串获取?

如果我尝试使用cell.getRichStringValue,我会得到例外; 如果cell.toString,它与Excel表格中的值不完全相同.

编辑:直到这个解决,我会用

new BigDecimal(cell.getNumericCellValue()).toString()
Run Code Online (Sandbox Code Playgroud)

java excel poi-hssf apache-poi

15
推荐指数
3
解决办法
4万
查看次数

使用POI以数字格式设置Excel单元格值

我想在Excel工作表中存储数字数据.
数字数据在我的java代码中由String类型表示.
是否可以将其设置为数字而不进行投射?

我已经尝试了以下代码,但它没有转换为数字类型(我在excel中收到一条警告,说该号码存储为文本...)

HSSFCell dCell =...
dCell.setCellType(Cell.CELL_TYPE_NUMERIC);
dCell.setCellValue("112.45")
Run Code Online (Sandbox Code Playgroud)

java excel apache-poi

15
推荐指数
2
解决办法
5万
查看次数

用java替换word文档模板中的变量

我想加载一个模板word文档来添加内容并保存为新文档.我正在研究.doc文件.

经过长时间的研究,我只找到了docx的解决方案:

http://www.smartjava.org/content/create-complex-word-docx-documents-programatically-docx4j

http://www.sambhashanam.com/mail-merge-in-java-for-microsoft-word-document-part-i/

所以我想替换以这种格式编写的任何变量:$VAR它的值.我可以用velocity或Apache-poi来做,它的最佳解决方案是什么.任何帮助将不胜感激.

java velocity apache-poi

15
推荐指数
2
解决办法
4万
查看次数