2012-12-28 34 views
2

讀空單元格我有一個巨大的Excel與萬噸列的文件,該文件是這樣的: -使用Apache POI事件模型

Column1 Column2 Column3 Column4 Column5 
abc    def    ghi 
     mno    pqr 
...... 

通過我的代碼生成的,當我打印Excel中的所有值的輸出是: -

abc;def;ghi;null;null 

mno;pqr;null;null;null 

所以,如果我們看一下上面的輸出,我們可以注意到,在我離開的空白值的單元格並沒有被POI庫拾起。有沒有辦法讓我可以將這些值作爲null?還是一種方法來識別提供的值跳過了空白單元格?

請注意:我沒有使用usermodel(org.apache.poi.ss.usermodel),而是使用Event API來處理xls和xlsx文件。

我正在實現HSSFListener併爲xls文件重寫其processRecord(Record record)方法。對於xlsx文件,我使用了javax.xml.parsers.SAXParser和org.xml.sax.XMLReader。

我使用JDK7和Apache POI 3.7。有人可以幫忙嗎?

我已經看到這個可能的重複How to get an Excel Blank Cell Value in Apache POI?但是這並不回答我的問題,因爲我使用的是Event API。

+0

您正在使用什麼事件API? –

+0

這是Apache POI的一個事件API來解決內存佔用問題。 – ParagJ

回答

2

是的,它可以做到,並且有幾個與Apache POI一起提供的例子。它們都與基於事件的xls/xlsx - > CSV相關,它看起來非常接近你正在做的事情。這讓我擔心你可能正在重新發明車輪...

對於HSSF事件模型處理,您要查看的示例是XLS2CSVmra。由MissingRecordAwareHSSFListener

供電對於XSSF事件模型,你需要的例子是XLSX2CSV

+0

我知道你會回覆並保存我一如既往:)非常感謝,我會看看。 – ParagJ

+0

我檢查了https://svn.apache.org/repos/asf/poi/trunk/src/examples/src/org/apache/poi/xssf/eventusermodel/XLSX2CSV.java示例,但在該示例中它添加了一個逗號爲任何空白值。我如何在我的例子中做到這一點?下面是我的代碼: – ParagJ

+0

public void endElement(String uri,String localName,String name)throws SAXException \t \t \t //根據需要處理最後一個內容。 \t \t \t //立即執行,如字符()可以被調用多次 \t \t \t如果(nextIsString){ \t \t \t \t嘗試{ \t \t \t \t \t INT IDX =的Integer.parseInt(lastContents) ; \t \t \t \t \t lastContents = new XSSFRichTextString(sst.getEntryAt(idx))。的toString(); \t \t \t \t}趕上(NumberFormatException的發送){ \t \t \t \t} \t \t \t} \t \t \t \t // V A細胞的=>內容 \t \t \t //輸出後,我們已經看到字符串內容 \t \t \t if(name.equals(「v」)){ \t \t \t \t values.add(lastContents); \t \t \t} \t \t \t \t \t \t如果(name.equals( 「行」)){...做些什麼...}} – ParagJ