2012-12-20 88 views
2

我有一個Excel文件,我需要從Excel文件內的文本框中讀取一個值。從Java的Excel中獲取文本框的值

我使用org.apache.poi庫,我試圖通過以下方式獲得的值:

List<HSSFObjectData> obj=workbook.getAllEmbeddedObjects(); 
    for(int i=0;i<obj.size();i++) 
    {   
     HSSFTextbox t=(HSSFTextbox)obj.get(i); 
    } 

偏偏我不能投HSSFTextbox到HSSFObjectData元素。

有誰知道這怎麼辦?

+0

請問您的Excel包含Excel文檔包含文本框和按鈕的任何文件或演示 – NPKR

+0

並具有後面的VBA代碼處理文本框中的數據。我有一個Java應用程序,我需要從Texboxes中獲取值。 – Mike

回答

1

也許你可以這樣做:

try { 
     InputStream input = new FileInputStream("qa-textbox.xls"); 
     POIFSFileSystem fs = new POIFSFileSystem(input); 
     HSSFWorkbook wb = new HSSFWorkbook(fs); 
     HSSFSheet sheet = wb.getSheetAt(0); 
     HSSFPatriarch pat = sheet.getDrawingPatriarch(); 
     List children = pat.getChildren(); 

     Iterator it = children.iterator(); 
     while(it.hasNext()) {   
      HSSFShape shape = (HSSFShape)it.next(); 
      if (shape instanceof HSSFTextbox){ 
       HSSFTextbox textbox = (HSSFTextbox)shape; 
       HSSFRichTextString richString = textbox.getString(); 
       String str = richString.getString(); 
       System.out.println("String: " + str); 
       System.out.println("String length: " + str.length()); 
      } 
     } 
    } catch (IOException ex) { 
     ex.printStackTrace(); 
    } 
+0

謝謝你的回答。我在我的應用程序中調整了你的代碼沒有錯誤,但沒有任何形狀與HSSFTextbox匹配。最初,當我通過使用HSSFObjectData 和obj.get(ⅰ).getOLE2ClassName()打印出的元素中的對象迭代是:\t Forms.TextBox.1 \t Forms.TextBox.1 \t Forms.TextBox.1 \t形式.Label.1 \t Forms.TextBox.1 \t Forms.Label.1 \t Forms.Label.1 \t Forms.Label.1 \t Forms.CommandButton.1 \t Forms.TextBox.1,我還以爲Forms.TextBox.1是HSSFTextbox類型 – Mike

0

這將有助於閱讀您的Excel工作表

HSSFWorkbook workbook = new HSSFWorkbook(fs); 
     for (HSSFObjectData obj : workbook.getAllEmbeddedObjects()) { 
      //the OLE2 Class Name of the object 
      String oleName = obj.getOLE2ClassName(); 
      if (oleName.equals("Worksheet")) { 
       DirectoryNode dn = (DirectoryNode) obj.getDirectory(); 
       HSSFWorkbook embeddedWorkbook = new HSSFWorkbook(dn, fs, false); 
       //System.out.println(entry.getName() + ": " + embeddedWorkbook.getNumberOfSheets()); 
     readSheetElements(embeddedWorkbook); 

      } else if (oleName.equals("Document")) { 
       DirectoryNode dn = (DirectoryNode) obj.getDirectory(); 
       HWPFDocument embeddedWordDocument = new HWPFDocument(dn, fs); 
       //System.out.println(entry.getName() + ": " + embeddedWordDocument.getRange().text()); 
      } else if (oleName.equals("Presentation")) { 
       DirectoryNode dn = (DirectoryNode) obj.getDirectory(); 
       SlideShow embeddedPowerPointDocument = new SlideShow(new HSLFSlideShow(dn, fs)); 
       //System.out.println(entry.getName() + ": " + embeddedPowerPointDocument.getSlides().length); 
      } else { 
       if(obj.hasDirectoryEntry()){ 
        // The DirectoryEntry is a DocumentNode. Examine its entries to find out what it is 
        DirectoryNode dn = (DirectoryNode) obj.getDirectory(); 
        for (Iterator entries = dn.getEntries(); entries.hasNext();) { 
         Entry entry = (Entry) entries.next(); 
         //System.out.println(oleName + "." + entry.getName()); 
        } 
       } else { 
        // There is no DirectoryEntry 
        // Recover the object's data from the HSSFObjectData instance. 
        byte[] objectData = obj.getObjectData(); 
       } 
      } 
     } 

    public void readSheetElements(HSSFWorkbook embeddedWorkbook) { 
    HSSFSheet hSSFSheet = embeddedWorkbook.getSheet(0); 
    java.util.Iterator<Row> rowItr = hSSFSheet .rowIterator() ; 
    while(rowItr .hasNext()) { 

    java.util.Iterator<Cell> cellItr = rowItr.next().cellIterator() ; 
    // read cell value from each cell 

    }