当前位置: 首页 > 知识库问答 >
问题:

将大文本文件数据写入excel

马魁
2023-03-14

我正在阅读一个用一些分隔符分隔的文本文件。

我的文本文件内容示例

Avc def efg JKSJD
1 2 3 5
3 4 6 0

HSSFWorkbook workbook = new HSSFWorkbook();
HSSFSheet sheet = workbook.createSheet("Sample sheet");
Map<Integer, List<Object>> excelDataHolder = new LinkedHashMap<Integer, List<Object>>();
int rownum = 0;
for (Integer key : keyset) {
            Row row = sheet.createRow(rownum++);
            List<Object> objList = excelHolder.get(key);//excelHolder is my map
            int cellnum = 0;
            for (Object obj : objList) {
                Cell cell = row.createCell(cellnum++);
                    cell.setCellValue((Date) obj);
            }
}
  • 每次调用createRow和createCell时是否都会创建新对象?
  • 如果是,有什么替代方案?。如何以更好的性能将大数据写入excel?

共有1个答案

呼延鸿畅
2023-03-14

我将回答有关Java的aspose.cells的问题,因为您也尝试过。

创建或加载一个非常大的Excel文件几乎总是需要很大的内存。即使你一次读单行或多行,你仍然会把内容写到工作簿的实例中,该实例被加载到内存中。

解决方案1(不好而且非常有限):增加堆大小,如果允许的最大堆大小适用于您的最大文件,请选择它。

import com.aspose.cells.*;
import java.util.*;

public class ExcelLargeTextImport
{
    private static String excelFile = Common.dataDir + "largedata.xlsx";

    public static void main(String args[])
    {
        try
        {
            Common.setLicenses();
            importToExcel();
        }
        catch(Exception ex)
        {
            System.out.println(ex.getMessage());
        }
    }

    private static void importToExcel() throws Exception
    {
        // Process each workbook in a method
        for (int sheetCounter=0 ; sheetCounter<10 ; sheetCounter++)
        {
            saveWorkbook(sheetCounter);
        }
    }

    private static void saveWorkbook(int sheetCounter) throws Exception
    {
        Workbook workbook = new Workbook();
        // Get the first sheet 
        Worksheet worksheet = workbook.getWorksheets().get(0);
        Cells cells = worksheet.getCells();

        // Initialize array list with 1 million records
        ArrayList<String> lines = new ArrayList<String>();
        int rowCount = 1000000;
        for (int i=0 ; i<rowCount ; i++)
        {
            lines.add(i + ";value1;value2;value3");
        }

        long lineNo = 1;
        for (String line : lines)
        {
            // Split the line by delimeter
            String[] values = line.split(";");

            // First cell
            Cell cell = cells.get("A" + lineNo);
            cell.setValue(values[0]);

            // Second cell
            cell = cells.get("B" + lineNo);
            cell.setValue(values[1]);

            // Third cell
            cell = cells.get("C" + lineNo);
            cell.setValue(values[2]);

            // Fourth cell
            cell = cells.get("D" + lineNo);
            cell.setValue(values[2]);

            lineNo++;
        }
        System.out.print(sheetCounter + " ");

        // Saving the Excel file
        workbook.save(excelFile.replace(".xlsx", sheetCounter + ".xlsx"));

        System.out.println("\nExcel file created");
    }
}
 类似资料:
  • 问题内容: 我正在从Google文档中提取数据,进行处理,然后将其写入文件(最终我将其粘贴到Wordpress页面中)。 它具有一些非ASCII符号。如何将这些安全地转换为可以在HTML源代码中使用的符号? 目前,我正在将所有内容都转换为,将它们全部合并为Python字符串,然后执行以下操作: 最后一行存在编码错误: 编解码器无法解码位置12286的字节:序数不在范围内(128) 部分解决方案:

  • 我写了一个函数,允许我从剪贴板中获取四列数据,拆分它,添加一列额外的列,重新组合它,并将其导出为文本文件。 我有两个问题:- 是否可以创建一个文件,其中包含我使用此函数创建的表,以便将该表粘贴到某些文本的中间? 邪恶的笑(Evil Grin的缩写) 其次,我试图修改函数,使其将一个文件名作为变量;即< code>xyztoinp 等等……但这并没有产生带有新文件名的输出;有人知道这是怎么做到的吗?

  • 档案员。txt包含两类员工的详细信息,即月薪和小时津贴。如果是月薪员工,则该文件包含名字、姓氏、性别、职级、类型和基本工资,如果是小时薪员工,则包含小时工资和工作小时数。该文件的示例如下所示: 约翰·史密斯M经理每月45000.00 Sunil Bates M高级每小时700.00 45 梁爱娃F警官每月30500.00 我要写一个程序,会看每个员工,计算奖金占基本工资的百分比,对于一个按小时计酬

  • 问题内容: 我正在尝试将大的ResulSet(〜1mm行)写入单个文件。在Java 1.6中,有没有一种首选/有效的方法来做到这一点? 问题答案: 这取决于所使用的JDBC驱动程序。您需要指示JDBC驱动程序 不要事先将其全部加载到Java内存中,而应在每次调用时逐行加载。然后,在循环内部,您需要 立即 将数据写入文件,而不是将其保存在文件中。 不清楚您使用的是哪种JDBC驱动程序,但是例如,可以

  • 我正在制作一个应用程序,它处理存储在文本文件中的大量数据。本质上,应用程序浏览一个. txt文件,一旦找到,应用程序需要把文件中的所有数据放入JTable,然后我需要对数据执行一些过滤操作,然后将其导出。. txt文件中的数据格式如下: 有数千行。每行由双类型数字组成(A、B……均为1.3、2.0等) 我通过手动添加数组中的所有列名,然后将表的模型设置为 我已经把行作为'空'在这里,因为我不知道我

  • 问题内容: 如何将大数据文件分块写入CSV文件? 我有一组大型数据文件(1M行x 20列)。但是,我只关注该数据的5列左右。 我想通过只用感兴趣的列制作这些文件的副本来使事情变得更容易,所以我可以使用较小的文件进行后期处理。因此,我计划将文件读取到数据帧中,然后写入csv文件。 我一直在研究将大数据文件以块的形式读入数据框。但是,我还无法找到有关如何将数据分块写入csv文件的任何信息。 这是我现在