Получение значения textbox из Excel на Java


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

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

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

К сожалению, я не смог привести HSSFTextbox к элементу HSSFObjectData.

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

2 ответа:

Может быть, вы можете сделать так:

    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();
    }

Это поможет прочитать ваш лист 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

    }