2013-11-26 14 views
0

我試圖到Excel轉換(.xls的,.xlsx)格式使用Excel以CSV使用基於POI事件API - 跳過標題行(在Excel中第一行)

文件,CSV文件,XLSX到CSV

https://svn.apache.org/repos/asf/poi/trunk/src/examples/src/org/apache/poi/xssf/eventusermodel/XLSX2CSV.java

對於XLS到CSV

http://svn.apache.org/repos/asf/poi/trunk/src/examples/src/org/apache/poi/hssf/eventusermodel/examples/XLS2CSVmra.java

一切都很好,但我不想在Excel中的標題行被寫入到CSV。 有人可以幫助我如何跳過excel中的標題行嗎?至少我如何獲得從處理程序獲取回調事件的行號?我在這方面有太多的幫助。

回答

2

最後經過這麼多的挖掘,我遇到了一個類XSSFSheetXMLHandler,它獲取行號的方式如下。所以我用這個來知道行號。它是startElement方法的參數Attributes的一部分。

else if("row".equals(name)) { 
       int rowNum = Integer.parseInt(attributes.getValue("r")) - 1; //This gets the row number. Then based on this value i Set a boolean variable part of the class member variable. 
       if(rowNum == 0) { 
        headerRow = true; 
       } 
       startRow(rowNum); 
      } 
1

工作方式是主類正在讀取和解析電子表格,並使用「處理程序」類來執行任何轉換或輸出:它是名爲MyXSSFSheetHandler的內部類。

看看這個類的endElement()方法。您會看到它將單元格值寫入「輸出」,並且如果它是「行」元素的末尾,還會寫入缺失值。

您可以向此內部類添加變量(例如「int myRowCount = 0」)。

然後,的endElement()過程中,各地各寫入「輸出」包裝如果聲明

if (myRowCount > 0) 
{ 
    output.print... etc.. 
} 

最後,裏面的endElement,它會檢查「行」已經結束,增加行向計數。