2012-12-20 3 views
2

У меня есть файл Excel, и мне нужно прочитать значение из текстового поля внутри этого файла Excel.Получить текстовое поле из Excel в Java

Я использую org.apache.poi библиотеку, и я попытался получить значение следующим образом:

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

Unfortunetly Я не мог бросить HSSFTextbox к элементу HSSFObjectData.

Кто-нибудь знает, как это можно сделать?

+0

делает ваш первенствует содержит какие-либо документы или презентации – NPKR

+0

Документ Excel содержит текстовые и кнопки и имеет Код 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 (I) .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 

    } 
Смежные вопросы