使用java POI将大数据2D数组写入excel文件

时间:2014-07-21 09:48:53

标签: java excel multidimensional-array apache-poi

我有一个大约16000 X 16000的2D数组,我想将这些记录导出到excel文件。目前我可以在短时间内输出最多1000个X1000的2D阵列。但是,当我增加数组的大小,例如3000 X 3000我的程序运行了很长时间而没有返回任何数据。 我请求帮助将整个2D数组导出到excel文件并使用POI。

我的示例代码导出数据,其中一个参数是我的2D数组。

public class exportData {

public static void exportDataToExcel(String fileName, String tabName, int[][] data) throws FileNotFoundException, IOException
  {
    //Create new workbook and tab
      Workbook wb = new XSSFWorkbook();
      FileOutputStream fileOut = new FileOutputStream(fileName);
      Sheet sheet = wb.createSheet(tabName);

      //Create 2D Cell Array
      Row[] row = new Row[data.length];
      Cell[][] cell = new Cell[row.length][];

      //Define and Assign Cell Data from Given
      for(int i = 0; i < row.length; i ++)
      {
          row[i] = sheet.createRow(i);
          cell[i] = new Cell[data[i].length];

          for(int j = 0; j < cell[i].length; j ++)
          {
              cell[i][j] = row[i].createCell(j);
              cell[i][j].setCellValue(data[i][j]);
          }

      }

      //Export Data
      wb.write(fileOut);
      fileOut.close();
      System.out.println("File exported successfully");
  }

}

2 个答案:

答案 0 :(得分:2)

我看到你的数据是int [] []。所以我相信它的计划静态数据(没有任何excel公式)

那么,为什么不将数据写入CSV文件?它很快+对行数有限制,因为POI限制为65,000+记录新表。

您可以使用CSVWritter

答案 1 :(得分:1)

这里是使用CSVWritter打印2D数组的完整示例

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileWriter;
import java.io.IOException;

import au.com.bytecode.opencsv.CSVWriter;

/**
 * @author Girish
 * 
 */
public class CSVWritterExample
{
    public static void main(String[] args) throws FileNotFoundException, IOException
    {
        int[][] data = new int[100][100];

        for (int i = 0; i < 100; i++)
        {
            for (int j = 0; j < 100; j++)
            {
                data[i][j] = j * i;
            }
        }

        exportDataToExcel("D:/sample.csv", data);
    }

    public static void exportDataToExcel(String fileName, int[][] data) throws FileNotFoundException, IOException
    {
        File file = new File(fileName);
        if (!file.isFile())
            file.createNewFile();

        CSVWriter csvWriter = new CSVWriter(new FileWriter(file));

        int rowCount = data.length;

        for (int i = 0; i < rowCount; i++)
        {
            int columnCount = data[i].length;
            String[] values = new String[columnCount];
            for (int j = 0; j < columnCount; j++)
            {
                values[j] = data[i][j] + "";
            }
            csvWriter.writeNext(values);
        }

        csvWriter.flush();
        csvWriter.close();
    }
}