我有一个大约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");
}
}
答案 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();
}
}