2014-06-27 175 views
0

我正在使用Apache POI来处理Excel文件。我的Excel文件有2个文本框,我想阅读文本并更改它。 XSSF模型如何可能?我不想创建一个新的TextBox - 我知道如何做到这一点。到目前为止,我正在尝试,但没有任何地方的文本框(我可以看到)。如何使用XSSF从Apache POI更改Excel中的TextBox

XSSFWorkbook wb = //get the Workbook somehow 
     XSSFSheet sheet = wb.getSheetAt(0); 
     Iterator<Row> rowIterator = sheet.rowIterator(); 
     while(rowIterator.hasNext()){ 
      Row row = rowIterator.next(); 
      Iterator<Cell> cellIterator = row.cellIterator(); 
      while(cellIterator.hasNext()){ 
       Cell cell = cellIterator.next(); 
      } 
     } 
     for(PackagePart pp : wb.getAllEmbedds()){ 

     } 

那么TextBoxes在哪里?

回答

0

下面是我做了什么来获取对文本框的引用并在POI 3.10中更改它们的内容。

对于XSSF(未经测试):

XSSFDrawing draw = sheet.createDrawingPatriarch(); 
List<XSSFShape> shapes = draw.getShapes(); 
Iterator<XSSFShape> it = shapes.iterator(); 

while(it.hasNext()) {   
    XSSFShape shape = it.next(); 
    if (shape instanceof XSSFTextbox){ 
     XSSFTextbox textbox = (XSSFTextbox) shape; 
     textbox.setText("foo"); // Could take an XSSFRichTextString instead 
    } 
} 

对于HSSF:

HSSFPatriarch pat = (HSSFPatriarch) sheet.createDrawingPatriarch(); 
List<HSSFShape> children = pat.getChildren(); 
Iterator<HSSFShape> it = children.iterator(); 
HSSFRichTextString richStr = new HSSFRichTextString("foo"); 

while(it.hasNext()) {   
    HSSFShape shape = it.next(); 
    if (shape instanceof HSSFTextbox){ 
     HSSFTextbox textbox = (HSSFTextbox) shape; 
     textbox.setString(richStr); 
    } 
} 

它似乎并不喜欢这个解决方案是非常灵活的,虽然因为对于不同的文本框设置不同的值将需要一些条件逻辑。幸运的是,我只是将所有文本框更改为相同的文本。

摘自:Obtain textbox value from Excel in Java

+0

我与XSSF工作,而不是HSSF。任何想法如何为XSSF做到这一点? – bjedrzejewski

+0

对不起,不,我没有。我用我认为可行的方式更新了我的答案(使用与我的HSSF方法相同的基本解决方案)。对于XSSF,请参考http://poi.apache.org/apidocs/org/apache/poi/xssf/usermodel/XSSFDrawing.html#getShapes() – Afterglow375

+1

,您可以使用'XSSFSimpleShape'更改'XSSFTextbox' –

相关问题