使用opencsv API或Apache Poi Api有限制吗?

5

我正在根据CSV文件创建Excel文件。为了读取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
在下面这行代码中,为什么要将行号转换为short类型?
 Row row = sheet.createRow((short) r++);

保持为整数


谢谢。我还有一个问题,如果行数增加到65536,它能够写入文件(XLS),另一方面,对于XLXS,我可以使用此API写多少行? - Sameek Mishra
1
好吧,我不确定。你只能试一下看看。就 Excel 版本而言,我认为早期版本的 Excel(2007 年之前)仅限于 65536 行。然而,新版本有更大的限制。我在这里看到的是 1,048,576 行 http://www.contextures.com/xlfaqapp.html#MoreRows。因此,请测试输出文件以查看 Excel 版本是否可以处理它。 - aldrin
1
如果您想使用超过65536行,则需要切换到.xlsx格式,这意味着从HSSF更改为XSSF。 - Gagravarr
你真是个天才,现在我成功找到了我的旧应用程序中问题的原因。 - everton
我在我的代码中也遇到了同样的错误。从库教程复制和粘贴代码的问题就在于此。那个“short”转换是出于某些不必要的原因而存在的。 - hectorg87

2

看起来是您的短整型数值。短整型的最大值为32767,而您正在尝试访问一个比它还多1的值。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接