Java 使用opencsv API或Apache Poi API是否有限制?

Java 使用opencsv API或Apache Poi API是否有限制?,java,excel,csv,apache-poi,Java,Excel,Csv,Apache Poi,我在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 shee

我在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();
}}
类测试{
公共静态void main(字符串[]args)引发IOException{
工作簿wb=新的HSSF工作簿();
CreationHelper=wb.getCreationHelper();
工作表=wb.createSheet(“新工作表”);
CSVReader reader=新的CSVReader(新的文件阅读器(“SampleData.csv”);
字符串[]行;
整数r=0;整数计数=0;
而((line=reader.readNext())!=null){
Row-Row=sheet.createRow((短)r++);
计数=计数+1;
System.out.println(“计数-”+count);
对于(int i=0;i
当我运行此程序时,会出现以下错误:

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
线程“main”java.lang.IllegalArgumentException中的异常:org.apache.poi.hssf.usermodel.HSSFRow.setRowNum(HSSFRow.java:232)上超出允许范围(0..65535)的无效行号(-32768) 在org.apache.poi.hssf.usermodel.HSSFRow.(HSSFRow.java:86) 在org.apache.poi.hssf.usermodel.HSSFRow.(HSSFRow.java:70) 位于org.apache.poi.hssf.usermodel.HSSFSheet.createRow(HSSFSheet.java:205) 位于org.apache.poi.hssf.usermodel.HSSFSheet.createRow(HSSFSheet.java:71) 在com.arosys.utilityclasses.Test.main(Test.java:23)上,java结果:1
我试图跟踪它支持多少行,我发现它只支持32768行,并且尝试减少行数,它运行良好,并创建excel文件

请帮助我解决这个问题,如果我的csv包含65536行,那么我如何编写excel文件(Xls)


谢谢

为什么要在下面的行中将行数转换为短行

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

将其保留为int

看起来这是您的短期价值。short上的最大值是32767,您正在尝试访问一个以上的值。

谢谢。我还有一个问题要问您,如果行数增加65536,它可以写入文件(XLS),另一方面对于XLX,我可以使用此API写入多少行。我不确定。你只要试试看就行了。就excel版本而言,我认为早期版本的excel(2007年之前)仅限于65536行。然而,较新的版本有一个很大的限制。1048576是我在这里看到的。因此,请测试输出文件,看看excel版本是否可以处理它。如果您想使用65536行以上的行,则需要切换到.xlsx格式,这意味着从HSSF更改为XSSF。您是一个天才,现在我设法在我的旧应用程序中找到了问题的原因。我的代码中也有相同的错误。这就是复制/粘贴库教程中的代码的问题。那个“短”演员是出于一些不必要的原因出现在那里的。