2012-12-20 7 views
2

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

는 Unfortunetly 나는 HSSFObjectData 요소에 HSSFTextbox 캐스팅 없습니다.

어떻게 할 수 있는지 아는 사람 있습니까?

+0

당신의 Excel에서 Excel 문서를 텍스트 상자 및 버튼을 포함하는 모든 문서 나 프리젠 테이션 – NPKR

+0

를 포함하고있다합니까를 읽어하는 데 도움이 될 것입니다 텍스트 상자의 데이터를 처리하는 뒷면의 VBA 코드 Texboxes의 값이 필요한 Java 응용 프로그램이 있습니다. – 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와 일치하는 모양이 없었습니다. I가 인쇄 요소를 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

이 당신의 엑셀 시트를

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 

    } 
관련 문제