1

我正在从一堆模板文档中生成一个文档,此外我还添加了一些表格作为 html altChunks(因为它比尝试使用 OpenXML 创建表格要容易得多)。这一切都很好,给了我想要的结果。但是,由于altChunk某些版本的 Word(尤其是在 Mac 上)处理方式存在一些缺陷,并且无法自动更新 TOC,我们决定将其设置为通过 Sharepoint 中的 Word 自动化服务运行我们的报告。因此,我们像以前一样生成我们的文档,然后通过单词自动化将其平展altChunk为单个文档并更新 TOC。

这解决了我们所有的兼容性问题并更新了我们的 TOC,但不幸的是,有一个副作用。我们的表格现在在文本上方和下方添加了空间,使表格比以前长得多。这在以前不是问题,即使我们打开文档并在 Word 中重新保存(因此将所有altChunks 展平),所以这似乎是单词自动化特有的问题。

有人见过这个吗?有没有办法使用包含表格的 HTMLaltChunk来强制单词自动化不要弄乱我的表格?

编辑:如果我在 Word 中选择有问题的表格并选择主页选项卡“行和段落间距”,然后我可以选择“删除段落后的空格”以将表格折叠回应有的状态。因此,Word Automation Services 似乎希望在表格中的段落之后添加空格,而 Word 本身却没有。有人知道如何阻止吗?

他是这些表格在 HTML 中的样子的一个非常简单的示例:

       table {
            font-size: 0.8em;
            border-collapse:collapse;
            font-family: calibri, sans-serif
        }
        caption {
            font-size: 1.05em;
            font-weight: bold;
            background-color: transparent;
        }
        tbody td {
            border: solid #909090 1px;
            font-size: 0.9em;
        }
        thead th {
            border-width: 0 1px 0 1px;
            border-style: solid;
            border-color: #909090;
        }
        .tableNotes {
            font-size: 6pt;
            font-family: arial, sans-serif;
        }
        tbody td {
            text-align: center;
        }
        thead th {
            background-color: #98a5b5;
        }
        .sectionHeader {
            font-weight: bold;
            text-align: left;
            background-color: #becfe3;
        }
<body>
    <table width="100%">
        <thead>
            <tr>
                <th class="col0">col0</th>
                <th class="col1">col1</th>
                <th class="col2">col2</th>
                <th class="col3">col3</th>
                <th class="col4">col4</th>
                <th class="col5">col5</th>
                <th class="col6">col6</th>
                <th class="col7">col7</th>
            </tr>
        </thead>
        <tbody>
            <tr>
                <td class="sectionHeader" colspan="8">Section 1</td>
            </tr>
            <tr>
                <td class="col0">4</td>
                <td class="col1">4</td>
                <td class="col2">4</td>
                <td class="col3">4</td>
                <td class="col4">4</td>
                <td class="col5">4</td>
                <td class="col6">4</td>
                <td class="col7">2</td>
            </tr>
        </tbody>
    </table>
</body>

我尝试明确设置padding-bottom: 0for td,但这没有任何区别。它在 HTML 中的外观与在 Word 文档中的外观几乎相同,但 Word Automation Services 出于某种原因在每行的底部添加了空间。

插入的代码altChunk如下所示:

Paragraph p = placeholder.Ancestors<Paragraph>().FirstOrDefault();
if (p != null)
{
    var chunk = WordDoc.MainDocumentPart.AddAlternativeFormatImportPart(AlternativeFormatImportPartType.Html);
    var id = WordDoc.MainDocumentPart.GetIdOfPart(chunk);
    // populate the chunk
    using (var stream = chunk.GetStream())
    {
        using (StreamWriter tw = new StreamWriter(stream))
        {
            tw.Write(HTMLFragments[tableName]);
        }
    }

    // Now we need an altChunk to insert into the parent
    AltChunk altChunk = new AltChunk()
    {
        Id = id,
        AltChunkProperties = new AltChunkProperties()
        {
            MatchSource = new MatchSource()
            {
                Val = true
            }
        }
    };
    p.InsertAfterSelf(altChunk);
    p.Remove();
}

其中HTMLFragmentsaDictionary<string,string>包含要插入到文档中的表格的 HTML。

4

1 回答 1

1

在跌跌撞撞地margin尝试padding使用. 我在想我可能能够以这种方式明确地设置内部的边距。所以这:csspptd

<td class="col0">4</td>

变成这样:

<td class="col0"><p>4</p></td>

令人惊讶的是,它确实有效!没有我实际添加任何针对这些p标签的 CSS。当然,这是违反直觉的,因为如果您使用原始 HTML 执行此操作,由于标签上的默认边距,您最终会在单元格中的文本周围添加p更多空间,但在这里它实际上将其删除。

这似乎是 Word Automation Services 解释 HTML 的方式altChunk与 Word 正确的方式之间的一个错误。

于 2014-10-27T15:19:05.270 回答