2015-06-16 21 views
11

Apache POI v3.12 kullanarak aşağıdaki sorun var: Ben, bir şablon olarak 49 satır [0..48] ile bir XLSX dosyası kullanmak o hücreleri var doldurmak gerekir veri ile ve farklı bir dosya olarak yazmak, bu yüzden tekrar şablonu yeniden kullanabilirsiniz.Apache POI GetRow() null döndürür ve .createRow başarısız

XSSFWorkbook wbk_template = new XSSFWorkbook(new FileInputStream (f_wbk_template)); 
SXSSFWorkbook wbk = new SXSSFWorkbook(wbk_template, 50, true); 

Sheet sheet = wbk.getSheet(STR_SHEET_NAME); 

/daha sonra/o GetRow() null döndürür çıkıyor, ama .createRow() girişimi ile başarısız ayıklama üzerine

Row row = sheet.getRow(rownum); 
if (null == row) { 
    row = sheet.createRow(rownum); 
} 

:

Ne yapıyorum yaklaşık şudur
java.lang.IllegalArgumentException: Attempting to write a row[2] in the range [0,48] that is already written to disk. 
    at org.apache.poi.xssf.streaming.SXSSFSheet.createRow(SXSSFSheet.java:122) 
... 

Burada bir şey mi eksik? Apache dokümanlar ve forumlarında okuduğum kadarıyla, getRow() öğesi null döndürürse, CreateRow() öğesini yaratmam gerekir. Sayfa, .getPhysicalRows(), .getFirstRowNum() ve .getLastRowNum()

uyarınca herhangi bir satır içermiyor. Teşekkürler.

+0

Bu dava için neden SXSSFWorkbook kullanıyorsunuz? Neden bu boyuttaki bir dosya için sadece XSSFWorkbook'u kullanmıyorsunuz? – Gagravarr

+0

Evet Gagravarr, Akış arayüzlerinin istediğimi yapamadıklarını anladım. Kodumu zaten değiştirdim ve her şey beklendiği gibi çalışıyor. Teşekkür ederim. –

cevap

6

XSSFWorkbook param olarak alan SXSSFWorkbook yapıcısına ait belgelere bakın. Şablon dosyasındaki ilk satırları geçersiz kılabilir veya bunlara erişemezsiniz. Mevcut bir satırın üzerine yazmaya çalışıyorsunuz ve API bunu desteklemiyor. İstisna mesajınız bunu yansıtıyor.

kullanımı durumda İçin

https://poi.apache.org/apidocs/org/apache/poi/xssf/streaming/SXSSFWorkbook.html#SXSSFWorkbook(org.apache.poi.xssf.usermodel.XSSFWorkbook)

, sen http://jxls.sourceforge.net denemek isteyebilirsiniz.

+0

Teşekkürler IceMan. Bu, yaşadığım davranışları açıklar. Jxls bağlantısı için teşekkürler - bir deneyeceğim. Apache POI'nin bu işlevselliği eksik olduğunu bilmiyordum. –

+0

Şablon dosyasını korumak ve üzerine yazmak istemiyorsanız, esnekliğe sahip olduğunuzu varsayarak jxls'i kullanmayı deneyin. Apache POI ile de yapabilirsiniz, ancak akan çalışma kitabı API'sini kullanmadan da yapabilirsiniz. – IceMan

+0

Zaten Apache POI lehine jxl kütüphanesinden kurtulmaya çalışıyorum, bu yüzden gerçekten başka bir excel erişim kütüphanesi tanıtmak istemiyorum. Apache POI kullanarak bu hedefe nasıl ulaşacağımı gösteren işaretçiler verebilir misiniz, yoksa özellikle bunun için başka bir soru açmalı mıyım? Teşekkürler. –

İlgili konular