2016-03-15 88 views
1

我目前正在编写从excel文件中读取值的程序。 对于普通的单元格,它的工作原理很好,但也有文本框,选择框和组合框,这是我无法真正访问的。我知道,这些元素是用id创建的。Apache POI:从文本框中获取价值

这是我目前的尝试:

private void processExcelToXml(File excelFile) throws EncryptedDocumentException, IOException { 
     HSSFWorkbook workbook = new HSSFWorkbook(new FileInputStream(excelFile)); 
    List<HSSFObjectData> embeddedObjects = workbook.getAllEmbeddedObjects(); 
    List<HSSFObjectData> textBoxList = new ArrayList<>(); 
    List<HSSFObjectData> comboBoxList = new ArrayList<>(); 
    List<HSSFObjectData> checkBoxList = new ArrayList<>(); 


    for (HSSFObjectData hssfObjectData : embeddedObjects) { 
     log.info(hssfObjectData.getDirectory().getName()); 
     switch (hssfObjectData.getOLE2ClassName()) { 

      case "Forms.TextBox.1": 
       textBoxList.add(hssfObjectData); 
       break; 
      case "Forms.CheckBox.1": 
       checkBoxList.add(hssfObjectData); 
       break; 
      case "Forms.ComboBox.1": 
       comboBoxList.add(hssfObjectData); 
       break; 
      default: 
       break; 
     } 
    } 
} 

我知道有一个solutuion(Obtain textbox value from Excel in Java),但像的OP我没有得到HSSFTextbox的任何实例,但只有HSSFObjectData的。 我的问题是,我可以从这些HSSFObjectDatas中提取输入到文本框中的值吗?

谢谢!

+2

一个建议是踏进你的代码的IDE调试器和点在哪里你“没有得到HSSFTextbox的任何实例”,闲逛,看看各种对象是什么样子。你可能能够找到你需要的东西。 –

+0

当我使用http://stackoverflow.com/questions/13967168/obtain-textbox-value-from-excel-in-java的解决方案我有同样的问题,我得到HSSFObjectData或HSSFPicture。例如,OLE2Classname解析为Forms.TextBox.1或Forms.CheckBox.1。 – MaxDak92

回答

0

复活一个老问题,但我有一个类从指定的文本框中读取Excel文本框字符串内容。以下是相关部分的摘录。请注意,“.trim()”很重要,因为形状名称似乎已添加了训练空间。这造成了很多问题。

//Declarations 
private HSSFWorkbook wb; 
private HSSFWorkbook outputWb; 
private HSSFSheet sheet; 
private HSSFFont myFont; 
private HSSFPatriarch pat; 
private HSSFRichTextString str; 
private List<HSSFShape> children; 

//Constructor 
try { 
     NPOIFSFileSystem fs = new NPOIFSFileSystem(new File(IN_FILE_NAME)); 
     wb = new HSSFWorkbook(fs.getRoot(), true); 
     sheet = wb.getSheet("Certificate"); 
     pat = (HSSFPatriarch) sheet.createDrawingPatriarch(); 
     children = pat.getChildren(); 

//Methods 
private String getText(String textBoxName){ 
    return getRichText(textBoxName).toString().trim(); 
} 

private HSSFRichTextString getRichText(String textBoxName) { 
    Iterator<HSSFShape> it = children.iterator(); 
    HSSFRichTextString returnString = null; 
    while (it.hasNext()) { 
     HSSFShape shape = it.next(); 
     if (shape.getShapeName().trim().equals(textBoxName)) { 
      HSSFTextbox textbox = (HSSFTextbox) shape; 
      returnString=textbox.getString(); 
     } 
    } 
    return returnString; 
}