为有中文需求的客户提供多渠道中文技术支持.

Fri Mar 17, 2023 3:07 am

使用的 <artifactId>spire.doc.free</artifactId>
<version>2.7.3</version>

lilutong
 
Posts: 9
Joined: Fri Mar 17, 2023 3:01 am

Mon Mar 20, 2023 7:42 am

您好,

感谢您的咨询。
您可以获取书签之后,判断书签所在的段落是否位于单元格内,如果是的话,可以逐层获取其上一层级,最后获取到表格对象。请参考以下代码:
Code: Select all
        Document doc = new Document();
        doc.loadFromFile("test.docx");
        Bookmark bookmark = doc.getBookmarks().get("test1");
        //判断书签是否在单元格内
        if (((Paragraph) bookmark.getBookmarkStart().getOwner()).isInCell()) {
            BookmarkStart bookmarkStart = bookmark.getBookmarkStart();
            // 获取书签所在的段落
            Paragraph paragraph = (Paragraph) bookmarkStart.getOwner();
            // 获取段落所在的单元格
            TableCell cell = (TableCell) paragraph.getOwner();
            TableRow row = (TableRow) cell.getOwner();
            Table table = (Table) row.getOwner();
        }

至于您的问题判断数据是否合法,由于我不知道您说的合法是什么意思,所以无法给您参考代码或者建议。如果我提供的代码没有满足您的需求,请麻烦您提供您的文档和描述您想要的效果,感谢你的理解与帮助。

Sincerely,
Triste
E-iceblue support team
User avatar

Triste.Dai
 
Posts: 1000
Joined: Tue Nov 15, 2022 3:59 am

Mon Mar 20, 2023 8:40 am

谢谢

lilutong
 
Posts: 9
Joined: Fri Mar 17, 2023 3:01 am

Tue Mar 21, 2023 11:45 am

您好,

感谢您的反馈。
如果您还有其他的问题,欢迎您随时咨询。

Best regards,
Triste
E-iceblue support team
User avatar

Triste.Dai
 
Posts: 1000
Joined: Tue Nov 15, 2022 3:59 am

Tue Mar 28, 2023 7:52 am

您好!
我在通过书签获取Table对象的时候又遇到了点问题
Table table = (Table) bookMark.get(i).getBookmarkStart().getOwnerParagraph().getNextSibling();
通过这段代码获取表格对象遍历表格时候提示了空指针异常
就像图片中那样,这个表格是文档中最后一个表格

lilutong
 
Posts: 9
Joined: Fri Mar 17, 2023 3:01 am

Tue Mar 28, 2023 8:55 am

您好,

感谢您的反馈。
为了帮助我们精确调查您的问题,可以麻烦您提供您的测试文档和完整代码给我们吗? 您可以通过邮件发送给我们([email protected])或者附加在该贴中。感谢您的帮助。

Sincerely,
Triste
E-iceblue support team
User avatar

Triste.Dai
 
Posts: 1000
Joined: Tue Nov 15, 2022 3:59 am

Wed Mar 29, 2023 1:18 am

您好,邮件已经发送了

lilutong
 
Posts: 9
Joined: Fri Mar 17, 2023 3:01 am

Wed Mar 29, 2023 6:15 am

您好,

感谢您的反馈。
我使用您的版本2.7.3,jdk 1.8进行测试,由于您的代码有部分类和方法没有附带上,我就创建了一个获取输入文档的书签集合的方法,但是没有复现您的问题,在遍历书签获取表格的时候没有出现空指针异常。附图是debug结果。
测试.png

完整代码如下:
Code: Select all
public static void main(String[] args) {
        Document document = new Document();
        document.loadFromFile("2023年部门预算公开模板(1).docx");
        ArrayList<Table> tables = new ArrayList<>();
        ArrayList<Bookmark> bookMark = getBookMark(document);
        for (int i =0;i<bookMark.size();i++){
            if (bookMark.get(i).getName().contains("Table")
                    && !bookMark.get(i).getName().contains("DivName")
                    && !bookMark.get(i).getName().contains("Remark")
            ){
                //通过书签获取表格
                Table table = (Table) bookMark.get(i).getBookmarkStart().getOwnerParagraph().getNextSibling();
                if (table!=null) {
                    tables.add(table);
//                    BookMarkUtils.getTableBody(table);
                }
            }
        }

    }

    public static ArrayList<Bookmark> getBookMark(Document doc){
        ArrayList<Bookmark> list = new ArrayList<>();
        BookmarkCollection bookmarks = doc.getBookmarks();
        for (int i = 0; i < bookmarks.getCount(); i++) {
            list.add(bookmarks.get(i));
        }

        return list;
    }

你可以使用我的代码进行测试,如果有问题,麻烦您提供您的完整代码和测试环境,感谢您的帮助。

Best regards,
Triste
E-iceblue support team
User avatar

Triste.Dai
 
Posts: 1000
Joined: Tue Nov 15, 2022 3:59 am

Wed Mar 29, 2023 7:06 am

您好!实际上代码中是对Table进行了非空判断的,其实是有13个表,通过非空判断筛选掉了一个表;详情已经通过邮件形式发送

lilutong
 
Posts: 9
Joined: Fri Mar 17, 2023 3:01 am

Wed Mar 29, 2023 8:12 am

您好,

感谢您的反馈。
请参考以下代码:
Code: Select all
       for (int i =0;i<bookMark.size();i++){
            Paragraph paragraph = bookMark.get(i).getBookmarkStart().getOwnerParagraph();
            if (paragraph.isInCell()){
                //通过书签获取表格
                Table table = (Table) paragraph.getOwner().getOwner().getOwner();
                tables.add(table);
               
            }
        }

如果我的代码没有满足您的需求或者您还有其他问题,欢迎您随时咨询。

Best regards,
Triste
E-iceblue support team
User avatar

Triste.Dai
 
Posts: 1000
Joined: Tue Nov 15, 2022 3:59 am

Return to 中文技术支持