有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

在Java中从Excel获取文本框值

我有一个Excel文件,我需要从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元素

有人知道怎么做吗


共 (2) 个答案

  1. # 1 楼答案

    这将有助于阅读您的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
    
        }
    
  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();
        }