【问题标题】:Obtain textbox value from Excel in Java用Java从Excel中获取文本框值
【发布时间】:2023-04-04 09:04:01
【问题描述】:

我有一个 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 元素。

有谁知道这是怎么做到的?

【问题讨论】:

  • 您的 Excel 是否包含任何文档或演示文稿
  • Excel 文档包含文本框和按钮,并在后面有处理来自文本框的数据的 VBA 代码。我有一个 Java 应用程序,我需要 Texboxes 中的值。

标签: java excel casting apache-poi hssf


【解决方案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();
    }

【讨论】:

  • 感谢您的回答。我在我的应用程序中调整了您的代码。没有错误,但没有一个形状与 HSSFTextbox 匹配。最初,当我使用 HSSFObjectData 和 obj.get(i).getOLE2ClassName() 遍历对象时,打印出的元素是:Forms.TextBox.1 Forms.TextBox.1 Forms.TextBox.1 Forms.Label.1 Forms.TextBox。 1 Forms.Label.1 Forms.Label.1 Forms.Label.1 Forms.CommandButton.1 Forms.TextBox.1 我认为Forms.TextBox.1是HSSFTextbox类型
【解决方案2】:

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

    }

【讨论】:

    猜你喜欢
    • 2017-09-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多