2011-06-30 55 views
5

我正在基於CSV文件創建Excel文件。爲了讀取CSV文件,我使用Opencsv API和Apache POI。在我的csv中包含65537行。是否有限制使用opencsv API或Apache Poi Api?

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)。

感謝

回答

8

你爲什麼鑄行NUM短在下面的行

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

離開它作爲INT

+0

Thanks.i對於u有更多的問題,如果行數增加65536它能夠寫入文件(XLS),在XLXS的另一端,我可以使用此API寫入多少行。 –

+1

嗯,我不確定。你只需要嘗試一下並看看。就excel版本而言,我認爲早期版本的excel(2007年之前)僅限於65536行。然而,新版本有很大的限制。 1,048,576就是我可以在這裏看到的http://www.contextures.com/xlfaqapp.html#MoreRows。因此測試輸出文件以查看excel的版本是否可以處理它 – aldrin

+1

如果你想使用超過65536行,你將需要切換到.xlsx格式,這意味着從HSSF更改爲XSSF – Gagravarr

2

看起來它是你的短期價值。短的最大值是32767,並且您試圖訪問比這更多的值。