【问题标题】:Word 2013 Nested Repeating Section Content ControlsWord 2013 嵌套重复部分内容控件
【发布时间】:2020-08-13 04:35:31
【问题描述】:

我在将重复部分控件嵌套在其他重复部分控件中时遇到问题。

假设我正在枚举数据中心环境中的 vm 主机中的服务器

Datacenter1
    Environment1
        VMHost1
           Server1
           Server2
        VMHost2
           Server3
           Server4
    Environment2
        VMHost3
           Server5
...

我的文档需要有许多重复的分层部分。
这是文档的基本结构:

Datacenter1 Header

    Some description text

    ----- Environment1 Table ---------
    | Header1  | Header 2 | Header 3 |
    |--------------------------------|
    | VMHost1  | Server1  | ........ |
    |          | Server2  | ........ |
    |--------------------------------|
    | VMHost2  | Server3  | ........ |
    |          | Server4  | ........ |
    ----------------------------------

    ----- Environment2 Table ---------
    | Header1  | Header 2 | Header 3 |
    |--------------------------------|
    | VMHost3  | Server5  | ........ |
    ----------------------------------

Datacenter2 Header

    Some description text

    ----- Environment3 Table ---------
    | Header1  | Header 2 | Header 3 |
    |--------------------------------|
    | VMHost1  | Server1  | ........ |
    |          | Server2  | ........ |
    |--------------------------------|
    | VMHost2  | Server3  | ........ |
    |          | Server4  | ........ |
    ----------------------------------

如您所见,我需要一些嵌套的内容控件。

但我的行为真的很时髦。就像当我添加一个嵌套的重复部分时,它有时会删除它外部的重复控件,该控件应该包裹在表格行周围。

其他时候,我认为我已经正确设置了所有内容,然后为了测试它,我单击 [+] 以重复整个数据中心部分,但它不仅仅是重复该部分,或者有时会重复其他部分同一节。

我没有使用分组功能 - 并且不确定我是否应该使用,或者如果我这样做了会有什么帮助。

希望这不是实现中的错误,我只是做错了..但我担心这种“高级”场景不被支持。

最终,我会将所有这些控件锁定在 UI 中,并将使用通过 Open XML SDK 注入的自定义 XML 部件来填充它。我在文档中有许多其他部分 - 包括重复部分 - 工作正常,但它们的重复部分没有嵌套。

我已经获得了应该支持嵌套的 XML 结构,并且当我向下映射这些控件时一切都很好,直到我修改 XML 以将更多子节点添加到各个节点以测试重复部分。在某些情况下,它删除了整个部分,在其他情况下,它重复嵌套的子节点作为父节点,重复整个表。

我猜问题是:
1. 如果你已经成功地嵌套了重复部分,怎么做?
2. 如果你遇到了这些古怪的行为,你是如何解决的?
3. 分组功能对于内容控件集、重复部分的用途是什么?我应该使用它们来实现这一点吗?

【问题讨论】:

  • 您的问题是什么?这一点都不清楚。如果您认为自己的代码有错误,请发布代码。
  • 不幸的是,我知道这不是很清楚。部分原因是我不能只发布整个文档,而且在所有这些过程中创建一个新文档需要一些努力。在我能做到之前,我想把它拿出来。也就是说,如果您曾经这样做过,那么这应该是提供反馈的充足信息。应该很清楚重复部分控件的位置,以及是否需要分组控件或促进其中任何一项。我正在研究一个例子..
  • @Okuma.Scott 你用过嵌套的重复内容控件吗?
  • 不,我只是想通过改进您的问题来帮助您获得答案。
  • 无赖,但谢谢 ;)

标签: c# ms-word openxml openxml-sdk word-2013


【解决方案1】:

我已经设法让它工作了。
这是一个示例文档:http://1drv.ms/1nkMGVF
我使用this tool 来帮助命名、绑定(AutoMap!)和导航内容控件。

看起来问题是由两件事共同造成的:

  1. 不兼容的 XML 结构
  2. 混合基于段落的重复部分基于表格的重复部分


不兼容的 XML
为了解决重复表行中单元格中嵌套段落重复的问题,我用外部元素包装重复元素:

<relativeRoot>
    <nonRepeatingNode/>
    <table>
        <repeatingTableRow>
            <text1/>
            <text2/>
        </repeatingTableRow>
        <repeatingTableRow>
            <text1/>
            <text2/>
        </repeatingTableRow>
    </table>
</relativeRoot>

但这会在通过 XML 添加重复元素或使用内置 Word 功能添加重复部分时引起问题。于是我把它改成了如下(去掉&lt;table&gt;):

<relativeRoot>
    <nonRepeatingNode/>
    <repeatingTableRow>
        <text1/>
        <text2/>
    </repeatingTableRow>
    <repeatingTableRow>
        <text1/>
        <text2/>
    </repeatingTableRow>
</relativeRoot>


混合重复部分

重复部分通常可以换行段落文本,但当该重复部分位于表格单元格内时,它会出现,其行被重复部分换行,这会导致渲染嵌套重复出现问题。

这是之前层次结构的表示:

repeating section control
^-> table
    ^-> row (fixed, non-repeating)
        ^-> column1a: plain text control
        ^-> column2a: table
                     ^-> repeating section control
                         ^-> row
                             ^-> column1b: plain text control
                             ^-> column2b: repeating section control
                                           ^--> plain text control

        ^-> column3a: repeating section control
                     ^-> plain text control


- the repeats within column3a work
- the repeats of row column1b/2b do not

这是之后:

repeating section control
^-> table
    ^-> row (fixed, non-repeating)
        ^-> column1a: plain text control
        ^-> column2a: table
                      ^-> repeating section control
                          ^-> row
                              ^-> column1b: plain text control
                              ^-> column2b: table 
                                            ^-> repeating section control
                                                ^-> row                                              
                                                    ^--> column1c: plain text control

        ^-> column3a: repeating section control
                     ^-> plain text control


可能还有其他方法可以使这项工作(check here),但无论出于何种原因,我都无法使其工作。

【讨论】:

    【解决方案2】:

    我用 Word 2013 对此进行了测试,它对我有用。

    首先,我在整个表格周围放置了一个重复部分内容控件 (RSCC),然后在一个表格行周围放置了另一个 RSCC(不是最后一个!)。最后,我将纯文本内容控件放入表格单元格中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多