excel的大数据量用POI写入 香菜个人博客
有50万的数据需要分析处理。
处理完毕后写入excel中,excel里需要用一个sheet放所有数据(excel用的是2007以后的版本,行数限制从老版的6万多突破到了100多万)
直接写入跑了一会就OUTOFMEMORY了
多番寻找终于找到poi 3.6,这个版本已经支持了使用XSSF(支持07及以后的excel版本)来写入,并且提供了一个DEMO叫BigGridDemo(网上比较多,知名的DEMO)。这玩意使用XML方式先生成数据,然后再和一个xlsx的模版进行合并生成最终的xlsx。这种做法由于生成XML后还进行了压缩,基本上还是比较节省内存资源的。反正我50万数据是跑过了..百万级的数据问题应该也不大..
但BigGridDemo.java(http://libjakarta-poi-java.sourcearchive.com/documentation/3.6plus-pdfsg/BigGridDemo_8java-source.html有源码,google也有一把)
这个例子很方便,仿造它改一下generate方法就好了..
但有个致命的bug,就是没有对String的value进行XMLencode..一旦你的数据里出现了XML的标准字符(一共五个),你的数据格式就会乱掉...
贴一下需要修正的代码(把所有的value都先XMLEncoder一下)
public void createCell(int columnIndex, String value, int styleIndex) throws IOException {
String ref = new CellReference(_rownum, columnIndex).formatAsString();
_out.write("<c r=\"" + ref + "\" t=\"inlineStr\"");
if (styleIndex != -1) _out.write(" s=\"" + styleIndex + "\"");
_out.write(">");
_out.write("<is><t>" + XMLEncoder.encode(value)+ "</t></is>");
_out.write("</c>");
}
附上XMLEncoder的实现(模仿htmlEncoder写的)
public class XMLEncoder {
private static final String[] xmlCode = new String[256];
static {
// Special characters
xmlCode['\''] = "'";
xmlCode['\"'] = """; // double quote
xmlCode['&'] = "&"; // ampersand
xmlCode['<'] = "<"; // lower than
xmlCode['>'] = ">"; // greater than
}
/**
* <p>
* Encode the given text into xml.
* </p>
*
* @param string the text to encode
* @return the encoded string
*/
public static String encode(String string) {
if (string == null) return "";
int n = string.length();
char character;
String xmlchar;
StringBuffer buffer = new StringBuffer();
// loop over all the characters of the String.
for (int i = 0; i < n; i++) {
character = string.charAt(i);
// the xmlcode of these characters are added to a StringBuffer one by one
try {
xmlchar = xmlCode[character];
if (xmlchar == null) {
buffer.append(character);
} else {
buffer.append(xmlCode[character]);
}
} catch (ArrayIndexOutOfBoundsException aioobe) {
buffer.append(character);
}
}
return buffer.toString();
}
public static void main(String[] args) {
String test = "\'\"4&<2>1";
System.out.println(encode(test));
}
}
分享到:
相关推荐
然而,当处理大数据量的Excel文件时,POI可能会导致内存溢出(Out of Memory, OOM),因为默认情况下它会将整个工作簿加载到内存中。为了防止这种问题,我们需要采用优化策略来高效地处理大量数据。 1. **分块读取*...
本篇文章将详细讲解如何利用Apache POI库在Android环境中高效地处理大数据量的Excel文件,无论是2003的.xls格式还是2007及以后的.xlsx格式。 首先,我们需要在项目中引入Apache POI库。如果是Maven项目,可以在pom....
接下来,我们将详细讲解如何使用Apache POI读取大数据量的Excel文件: 1. **创建Workbook对象**:这是处理Excel文件的基础,它代表整个Excel工作簿。你可以通过`XSSFWorkbook`类的构造函数,传入文件的输入流来创建...
此外,如果数据量较大,为了性能考虑,可以使用SXSSFWorkbook,它提供了一种内存优化的模式,可以避免一次性加载所有数据到内存中。 通过阅读提供的示例代码"14、POI将数据写入到EXCEL并保存到本地-示例",你可以更...
"使用POI导出大数据量到EXCEL"这个主题涉及到如何高效地利用POI处理大量数据并将其导出到Excel文件中。以下是对这个主题的详细讲解。 1. **Apache POI简介** Apache POI 是一个开源项目,它提供了Java API来创建、...
1. **内存优化**:当数据量非常大时,建议使用Apache POI提供的SXSSF类来降低内存占用。 2. **性能考虑**:在实际应用中,应尽可能减少对Excel文件的读写操作,避免频繁创建和销毁对象。 3. **异常处理**:在处理...
标题中的“POI实现大数据量的excel文件解析”是指使用Apache POI库来处理大量数据的Excel文件。Apache POI是Java平台上的一个开源项目,它提供了读取和写入Microsoft Office格式文件的能力,包括Excel(XLS和XLSX)...
在POI 3.8 Beta5这个版本中,开发者可以利用它来处理大数据量的Excel文件,这在数据处理、报告生成或数据分析场景中非常有用。 Apache POI库提供了HSSF(Horrible Spreadsheet Format)和XSSF(XML Spreadsheet ...
SAX(Simple API for XML)解析方式与DOM不同,它不会一次性加载整个文件到内存,而是逐行读取,只处理当前需要的数据,这极大地降低了内存使用,特别适合处理大数据量的Excel文件。 以下是一些关于使用Apache POI...
在Java开发中,处理Excel大数据量的导出是一项常见的任务,尤其在数据分析、报表生成等领域。这个"java excel大数据量导出demo"提供了一个高效、灵活的解决方案,它支持模板导出,分页查询,以及处理大数据量的能力...
以下是一个简单的Java示例,演示如何使用POI写入Excel: ```java import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.ss.usermodel.*; import java.io.FileOutputStream; public class ...
通过上述介绍,我们可以看到 Apache POI 提供了非常强大的功能来处理 Excel 文件,无论是读取还是写入都非常方便。掌握 POI 的基本用法对于开发人员来说是非常有用的技能,特别是在需要处理大量数据时更是如此。希望...
本篇将深入探讨如何利用Apache POI来实现大数据量的Excel文件解析。 首先,Apache POI提供了两种主要的API用于处理Excel文件:HSSF(Horizontally Stored Sheet Format)用于处理.xls文件(老版本的Excel),而XSSF...
5. 如果数据量大,可能需要分批写入,以避免一次性加载过多数据导致内存溢出。 在实际应用中,为了提高性能,可能还需要考虑异步处理、多线程等技术,以实现更高效的批量数据导出。此外,优化内存管理和设置适当的...
在处理大数据量的Excel文件时,Java是一种常用的语言,因为它提供了强大的库,如Apache POI,使得解析大型Excel文件成为可能。Apache POI是Java的一个开源项目,专门用于读写Microsoft Office格式的文件,包括Excel...
2. **高效读写**:POI允许开发者以流式方式处理Excel数据,减少了内存占用,适合处理大数据量的Excel文件。 3. **灵活性**:可以创建、修改、读取单元格、行、列等元素,以及样式、公式、图表等复杂功能。 4. **易于...
Apache POI是一个强大的Java库,专门用于处理Microsoft Office格式的文件,包括Excel。在本文中,我们将深入探讨如何使用POI库向Excel工作簿中插入图片。这将涵盖相关的API,步骤以及一些实用技巧。 首先,我们需要...
在Java开发中,导出大数据量的Excel文件可能会面临内存溢出的问题,特别是在使用Apache POI库时。这是因为默认情况下,POI会将整个Excel工作簿存储在内存中,当数据量过大时,内存消耗非常显著,可能导致系统崩溃。...
Java 动态大数据量EXCEL下载是一个常见的需求,在企业级应用中尤为常见,尤其是在数据分析、报表生成和数据导出场景下。以下是对这个主题的详细解释: 首先,我们需要理解Java如何处理大数据量的EXCEL文件。传统的...
- **数据绑定**:遍历模板中的数据占位符,用实际数据替换它们。 - **写入数据**:在已存在的工作表中插入或更新单元格内容。 - **保存结果**:将更新后的工作簿保存为新的 Excel 文件。 3. **支持上万数据导出*...