JAVA POI-код для чтения значений текстового поля из Excel (xlsx)

#java #excel-2010

#java #excel-2010

Вопрос:

Я могу считывать значения ячеек Excel через библиотеку POI, но файл Excel содержит новые текстовые поля (фигуры) со значениями. Некоторые большие тексты, такие как описание и т.д., помещаются в текстовое поле (фигуры), И я застрял, чтобы прочитать их.
Может ли кто-нибудь, пожалуйста, помочь мне с Java-кодом для чтения текста в формах из файла Excel (формат xlsx)? Спасибо и ценю любую помощь.

Комментарии:

1. Не могли бы вы вставить сюда свой код и сообщить нам, какую ошибку вы получаете.

2. Вы «можете читать Excel». Как? Как вы ожидаете, что мы вам поможем, если мы не знаем, какую библиотеку, если таковая имеется, вы используете?

3. Пожалуйста, вставьте свой poi-код для чтения файлов, я могу предложить вам использовать jxl, это намного проще, чем poi, просто ограничение заключается в том, что вы должны использовать листы 97-2003 xls. Но если у вас есть листы xlsx, вы можете преобразовать их в xls с помощью vbs, чтобы заставить их работать

Ответ №1:

используйте это

 XSSFDrawing pat = sheet.getDrawingPatriarch();
            // @SuppressWarnings("rawtypes")
            if (pat != null){

                List<XSSFShape> children = pat.getShapes();

                Iterator<XSSFShape> it = children.iterator(); 

             while(it.hasNext()) {           
                 XSSFShape shape = (XSSFShape)it.next();
                 if (shape instanceof XSSFSimpleShape){
                     XSSFSimpleShape textbox = (XSSFSimpleShape)shape;
                   String str = textbox.getText();
                   System.out.println("String: "   str);
                   System.out.println("String length: "   str.length());
                 };
             }
            }
  

Ответ №2:

Спасибо всем .. я нашел решение, и оно сработало для xls, а не для xlsx. я могу читать текст из текстового поля (фигуры).

     InputStream input = new FileInputStream("test.xls");
    POIFSFileSystem fs = new POIFSFileSystem(input);

    HSSFWorkbook wb = new HSSFWorkbook(fs);
    HSSFSheet sheet = wb.getSheetAt(0);

    //get the patriarch
    HSSFPatriarch pat = sheet.getDrawingPatriarch();

    HSSFClientAnchor a = new HSSFClientAnchor(0,0,10,50,(short)1,0,(short)1,0);
    List child = pat.getChildren();
    String str;
    int i=0;
    Iterator iCount = child.iterator(); 
    while(iCount.hasNext()) {
        HSSFShape shape = (HSSFShape)iCount.next();

        if (shape instanceof HSSFTextbox){
            HSSFTextbox textbox = (HSSFTextbox)shape;
            HSSFRichTextString richString = textbox.getString();
            str = richString.getString();
            System.out.println("String: n"   str);
            System.out.println("String length: "   str.length());
        }
        i  ;
        System.out.print("n i ="  i);
    }