2011-07-30 75 views
3

我正在使用JXLS來填充excel電子表格模板。有時,一個輸入 - 一個列表 - 是空的。發生這種情況時,使用此列表的模板字段會顯示在完整的JXLS regalia的填充電子表格中 - 例如,「${someList.someValue}」。當輸入列表爲空時,刪除JXLS中的模板行

有問題的字段都在一行中(由JXLS擴展爲list.size()行)。當列表中沒有記錄時,我想清除整行。

在JXLS中有沒有這樣做的方法?或者,任何人都可以提出一個補充的方式來使用JExcel或POI來做到這一點?

回答

2

您可以使用< jx:if > tags在您的excel模板中。 例如,如果您有類似以下

Row 1: <jx:if test="${!empty someData}"> 
Row 2: place holders for data that will be printed in the loop 
Row 3: </jx:if> 

模板如果someData不空行,然後將輸出打印,但如果someData爲空,則沒有行會被這個模板打印。

我希望我能說清楚。有關標籤的更多信息,請參閱http://jxls.sourceforge.net/reference/tags.html

+0

感謝您的迴應 - 我試過使用標籤,但解析器在結束標籤中拋出讀取'/'字符的異常。就我所知,我模板中的標記單元格與JXLS站點上的示例類似。 –

+0

你可以發佈你的模板代碼。它看起來像一個語法錯誤。 –

+0

我的模板使用與示例中所示相同的標記,但顯然我的測試不同。例外是:線程「main」中的異常java.lang.RuntimeException:無法設置公式:/ at net.sf.jxls.formula.FormulaControllerImpl.writeFormulas(FormulaControllerImpl.java:137)...引起:org。 apache.poi.ss.formula.FormulaParseException:在指定公式'/'中的char 0'/'附近解析錯誤。預期的單元格引用或常量文字 –

1

我認爲這是可能通過POI - JXLS的甚至POI對象接口:

http://poi.apache.org/spreadsheet/how-to.html
修改你在簡單讀取文件。您通過評估方法檢索對象,通過父對象的remove方法(sheet.removeRow(hssfrow))將其刪除,並創建對象,就像創建新的xls一樣。當你完成修改單元格時,就像上面那樣調用workbook.write(outputstream)。

http://jxls.sourceforge.net/reference/customprocessor.html
隨着行對象可以訪問相關的POI對象,如果需要修改單元格樣式。

+0

感謝您的回覆Yahia;我已經接受了Serkan的答案,因爲它更好地利用了JXLS的特性並將邏輯保留在模板中。 –

1

行不顯示的另一個原因基於jx:if條件是如果jx之前有一些空格:if標籤