有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

excel csv到xls,java中有65536行以上

我有一个java程序,它读取csv文件并将其转换为xls文件:

String file2 = "myFile.csv";
FileInputStream fis2 = new FileInputStream(file2);
DataInputStream myInput2 = new DataInputStream(fis2);
String thisLine;
arList = new ArrayList();
while ((thisLine = myInput2.readLine()) != null) {
al = new ArrayList();
String strar[] = thisLine.split(",");
for (int j = 0; j < strar.length; j++) {
       al.add(strar[j]);
}
arList.add(al);
i++;
}

HSSFWorkbook hwb = new HSSFWorkbook();
HSSFSheet sheet = hwb.createSheet("new sheet");

for (int k = 0; k < arList.size(); k++) {
ArrayList ardata = (ArrayList) arList.get(k);
      HSSFRow row = sheet.createRow((short) 0 + k);

        for (int p = 0; p < ardata.size(); p++) {
    HSSFCell cell = row.createCell((short) p);
    cell.setCellValue(ardata.get(p).toString());
     }
}

FileOutputStream fileOut = new FileOutputStream(file2.replace("csv", "xls"));
hwb.write(fileOut);
fileOut.close();
myInput2.close();
fis2.close();

然而,我有一个超过65536行的CSV,因此上面的代码会导致错误

我可以对上面的代码做些什么来处理超过65536行的csv

谢谢你的阅读


共 (3) 个答案

  1. # 1 楼答案

    在调用CreateRow时,不要将索引转换为短索引。短裤的最大值限制为65535

  2. # 2 楼答案

    您的问题可能在HSSFSheet类中。在这一行中

    HSSFRow row = sheet.createRow((short) 0 + k)
    

    您正在使用短参数调用方法。short类型只有2字节长,因此该类最多只能存储65535行

    如果您有权访问该类,您可以重构它,使用int甚至long

  3. # 3 楼答案

    我假设问题出在用于存储CSV文件的ArrayList中。尝试使用读卡器一次处理一行CSV文件,而不是一次读取全部内容