CSV в XLS с более чем 65536 строк в Java - PullRequest
1 голос
/ 01 марта 2012

У меня есть 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();

Однако у меня есть CSV с более чем 65536 строками, и поэтому приведенный выше код приводит к ошибке.

Что я могу сделать с приведенным выше кодом для обработки CSV с более чем 65536 строк.

Спасибо за чтение!

Ответы [ 3 ]

3 голосов
/ 01 марта 2012

Ваша проблема, вероятно, в классе HSSFSheet. В этой строке

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

Вы вызываете метод с коротким аргументом. Тип short имеет длину всего 2 байта, поэтому класс может хранить только до 65 535 строк.

Если у вас есть доступ к классу, вы можете изменить его, использовать int или даже long.

0 голосов
/ 01 марта 2012

Не приводите индекс к короткому значению при вызове CreateRow.Максимальное значение шорт - 65535.

0 голосов
/ 01 марта 2012

Я предполагаю, что проблема в ArrayList, который вы используете для хранения вашего CSV-файла.Попробуйте использовать Reader для обработки вашего CSV-файла по одной строке, а не для чтения всего сразу.

...