我怎么给段落指定内容添加背影颜色。

for paragraph in doc.get_child_nodes(aw.NodeType.PARAGRAPH, True):
    try:
        node = paragraph.as_paragraph()

        level = 1
        if node.get_ancestor(aw.NodeType.TABLE) == None:
            if node.paragraph_format.outline_level in [0, 1, 2, 3, 4, 5]:
                level = int(node.paragraph_format.outline_level) + 1
                if level > current_level:
                    # 如果级别更深,将当前标题添加到堆栈
                    stack.append((current_level, data))
                    data = []
                    current_level = level
                elif level < current_level:
                    # 如果级别更浅,将堆栈中的项添加回数据
                    while stack and stack[-1][0] >= level:
                        old_level, old_data = stack.pop()
                        data = old_data + data
                        current_level = old_level
                data.append(
                    {
                        "Title": node.get_text(),
                        "Content": [],
                        "Level": level,
                        "Table": [],
                        "Tbale_name": [],
                    }
                )
            else:
                if data:
                    if node.get_text().startswith("表"):
                        if (
                            "Bullet" in node.paragraph_format.style.name
                            or "Caption" in node.paragraph_format.style.name
                        ):
                            data[-1]["Tbale_name"].append(
                                node.get_text().strip("SEQ 表 \* ARABIC").strip("SEQ")
                            )
                    if (
                        node.get_text().startswith("表")
                        or node.get_text().startswith("来源:")
                        or node.get_text().startswith("图")
                    ):
                        pass
                    else:
                        data[-1]["Content"].append(node.get_text())
        if node.get_ancestor(aw.NodeType.TABLE) != None:
            print(11111)
            parent_node = node.get_ancestor(aw.NodeType.TABLE).as_table()
            with concurrent.futures.ThreadPoolExecutor() as executor:
                able_content = executor.submit(read_table, parent_node).result()
            print(able_content)
            data[-1]["Table"].append(able_content)
    except Exception as e:
        print(e)

while stack:
    old_level, old_data = stack.pop()
    data = old_data + data。

就是文档里面存在图片 我想根据标题获取下面的图片信息

表格数据也不对啊 为什么一直循环一个段落的表格呢

@alexey.noskov

怎么不回复了?????????

for paragraph in doc.get_child_nodes(aw.NodeType.PARAGRAPH, True):
try:
node = paragraph.as_paragraph()

    level = 1
    if node.get_ancestor(aw.NodeType.TABLE) == None:
        if node.paragraph_format.outline_level in [0, 1, 2, 3, 4, 5]:
            level = int(node.paragraph_format.outline_level) + 1
            if level > current_level:
                # 如果级别更深,将当前标题添加到堆栈
                stack.append((current_level, data))
                data = []
                current_level = level
            elif level < current_level:
                # 如果级别更浅,将堆栈中的项添加回数据
                while stack and stack[-1][0] >= level:
                    old_level, old_data = stack.pop()
                    data = old_data + data
                    current_level = old_level
            data.append(
                {
                    "Title": node.get_text(),
                    "Content": [],
                    "Level": level,
                    "Table": [],
                    "Tbale_name": [],
                }
            )
        else:
            if data:
                if node.get_text().startswith("表"):
                    if (
                        "Bullet" in node.paragraph_format.style.name
                        or "Caption" in node.paragraph_format.style.name
                    ):
                        data[-1]["Tbale_name"].append(
                            node.get_text().strip("SEQ 表 \* ARABIC").strip("SEQ")
                        )
                if (
                    node.get_text().startswith("表")
                    or node.get_text().startswith("来源:")
                    or node.get_text().startswith("图")
                ):
                    pass
                else:
                    data[-1]["Content"].append(node.get_text())
    if node.get_ancestor(aw.NodeType.TABLE) != None:
        print(11111)
        parent_node = node.get_ancestor(aw.NodeType.TABLE).as_table()
        with concurrent.futures.ThreadPoolExecutor() as executor:
            able_content = executor.submit(read_table, parent_node).result()
        print(able_content)
        data[-1]["Table"].append(able_content)
except Exception as e:
    print(e)

while stack:
old_level, old_data = stack.pop()
data = old_data + data。表格数据也不对啊 为什么一直循环一个段落的表格呢?

你好可以回复一下我的帖子问题吗

@Tiaohh 请附上您的输入文档(如果可能的话进行简化)并提供您希望获得的预期输出。

请参阅我们的文档以了解 Aspose.Words 文档对象模型:
https://docs.aspose.com/words/python-net/aspose-words-document-object-model/
这将帮助您理解文档在 DOM 中的表示方式。

MS Word 文档中的图像用 SHAPE 节点表示。

PS: 为了得到及时、准确的答复,请务必清楚地描述您的问题,提供您的输入文档、输出文档和预期输出文档,以便更容易理解您的需求。 如果您提供代码,请对其进行简化以使其可运行,以便我们可以在我们这边测试您的场景。

另外,根据我们的免费支持政策,我们有 12 小时的时间提供响应,因此无需淹没论坛。 感谢您的耐心和理解。

def read_table(tables):
    _table = []

    for row in tables.rows:
        _row = ""
        for cell in row.as_row().cells:
            if _row:
                _row = _row + "\t" + cell.as_cell().get_text().strip()
            else:
                _row = cell.as_cell().get_text().strip()
        _table.append(_row)
    table_info = "\n".join(_table)
    return table_info


for paragraph in doc.get_child_nodes(aw.NodeType.PARAGRAPH, True):
    try:
        node = paragraph.as_paragraph()

        level = 1
        if node.get_ancestor(aw.NodeType.TABLE) == None:
            if node.paragraph_format.outline_level in [0, 1, 2, 3, 4, 5]:
                level = int(node.paragraph_format.outline_level) + 1
                if level > current_level:
                    # 如果级别更深,将当前标题添加到堆栈
                    stack.append((current_level, data))
                    data = []
                    current_level = level
                elif level < current_level:
                    # 如果级别更浅,将堆栈中的项添加回数据
                    while stack and stack[-1][0] >= level:
                        old_level, old_data = stack.pop()
                        data = old_data + data
                        current_level = old_level
                data.append(
                    {
                        "Title": node.get_text(),
                        "Content": [],
                        "Level": level,
                        "Table": [],
                        "Tbale_name": [],
                    }
                )
            else:
                if data:
                    if node.get_text().startswith("表"):
                        if (
                            "Bullet" in node.paragraph_format.style.name
                            or "Caption" in node.paragraph_format.style.name
                        ):
                            data[-1]["Tbale_name"].append(
                                node.get_text().strip("SEQ 表 \* ARABIC").strip("SEQ")
                            )
                    if (
                        node.get_text().startswith("表")
                        or node.get_text().startswith("来源:")
                        or node.get_text().startswith("图")
                    ):
                        pass
                    else:
                        data[-1]["Content"].append(node.get_text())
        if node.get_ancestor(aw.NodeType.TABLE) != None:
            print(11111)
            parent_node = node.get_ancestor(aw.NodeType.TABLE).as_table()
            able_content = read_table(parent_node)
            print(able_content)
            data[-1]["Table"].append(able_content)

    except Exception as e:
        print(e)

while stack:
    old_level, old_data = stack.pop()
    data = old_data + data

print(data)

为什么一直循环一个段落的表格信息呢。这样不对呀

就是我一个段落里面可能有多个表格这里需要执行完一个表格内容。执行下一个表格内容。

if node.get_ancestor(aw.NodeType.TABLE) != None:
        print(11111)
        parent_node = node.get_ancestor(aw.NodeType.TABLE).as_table()
        able_content = read_table(parent_node)
        print(able_content)
        data[-1]["Table"].append(able_content)

@Tiaohh 您发布相同的代码和相同的问题,但没有提供我之前要求的信息。 不幸的是,我无法回答你的问题,因为正如我上面提到的,它还不够清楚。 请再次附上您的输入文档并提供您想要获得的输出。

10.docx (55.0 KB)

文档信息,问题出现在循环段落表格信息的时候不对,为什么一直循环一个表格信息,我段落里面有多个表格信息啊

如果一个段落下面表格很多,速度很慢怎么优化呢

@Tiaohh 请尝试使用以下代码来处理文档:

doc = aw.Document("C:\\Temp\\in.docx")

for s in doc.sections :
    sect = s.as_section()
    # loop though the direct children of the document body
    for node in sect.body.get_child_nodes(aw.NodeType.ANY, False) :
        # Check node type.
        if node.node_type == aw.NodeType.PARAGRAPH :
            para = node.as_paragraph()
            if para.paragraph_format.outline_level in [0, 1, 2, 3, 4, 5]:
                print("Level: " + str(para.paragraph_format.outline_level) + "\t" + para.to_string(aw.SaveFormat.TEXT))
        if node.node_type == aw.NodeType.TABLE :
            #  here you can process the table.
            print("table")

这样处理会不会有问题呢 我表格是在段落里的

@Tiaohh 表不能位于段落内,因为段落和表都是块级节点,并且位于节点层次结构的同一级别。

从word读取表格读取出来的样式怎么看呢 怎么知道是几行几列 有没有合并呢

@alexey.noskov 从word读取表格读取出来的样式怎么看呢 怎么知道是几行几列 有没有合并呢

@Tiaohh 请参阅我们的文档以了解如何使用表格:
https://docs.aspose.com/words/python-net/table-overview/
在这里您可以学习如何使用合并单元格:
https://docs.aspose.com/words/python-net/working-with-merged-cells/

怎么获取表格水平合并几个单元格呢