Существует ли ограничение использования opencsv API или Apache Poi Api? - PullRequest
5 голосов
/ 30 июня 2011

Я создаю файл Excel на основе CSV-файла. Для чтения CSV-файла я использую Opencsv API и Apache POI. В моем csv содержится 65537 строк.

class Test {
public static void main(String[] args) throws IOException {
    Workbook wb = new HSSFWorkbook();
    CreationHelper helper = wb.getCreationHelper();
    Sheet sheet = wb.createSheet("new sheet");

    CSVReader reader = new CSVReader(new FileReader("SampleData.csv"));
    String[] line;
    int r = 0;int count=0;
    while ((line = reader.readNext()) != null) {
        Row row = sheet.createRow((short) r++);
        count=count+1;
         System.out.println("count-"+count);
        for (int i = 0; i < line.length; i++)
            row.createCell(i)
               .setCellValue(helper.createRichTextString(line[i]));
    }

    // Write the output to a file
    FileOutputStream fileOut = new FileOutputStream("workbook.xls");
    wb.write(fileOut);
    fileOut.close();
}}

когда я запускаю эту программу, выдается следующая ошибка:

Exception in thread "main" java.lang.IllegalArgumentException: Invalid row number (-32768) outside allowable range (0..65535)at org.apache.poi.hssf.usermodel.HSSFRow.setRowNum(HSSFRow.java:232)
    at org.apache.poi.hssf.usermodel.HSSFRow.<init>(HSSFRow.java:86)
    at org.apache.poi.hssf.usermodel.HSSFRow.<init>(HSSFRow.java:70)
    at org.apache.poi.hssf.usermodel.HSSFSheet.createRow(HSSFSheet.java:205)
    at org.apache.poi.hssf.usermodel.HSSFSheet.createRow(HSSFSheet.java:71)
    at com.arosys.utilityclasses.Test.main(Test.java:23)Java Result: 1

Я попытался отследить, сколько строк он поддерживает, я обнаружил, что он поддерживает только 32768, а также попытался уменьшить количество строк, он прекрасно работает и создать файл Excel.

, пожалуйста, помогите мне разобраться с этой проблемой, если мой CSV содержит 65536 строк, то как я могу написать файл Excel (Xls).

Спасибо

Ответы [ 2 ]

8 голосов
/ 30 июня 2011

Почему вы приводите номер строки к короткому в следующей строке

 Row row = sheet.createRow((short) r++);

Оставьте его как int

2 голосов
/ 30 июня 2011

Похоже, это ваша короткая ценность. максимальное значение короткого замыкания равно 32767, и вы пытаетесь получить доступ к одному из них.

...