我正在从一堆模板文档中生成一个文档,此外我还添加了一些表格作为 html altChunk
s(因为它比尝试使用 OpenXML 创建表格要容易得多)。这一切都很好,给了我想要的结果。但是,由于altChunk
某些版本的 Word(尤其是在 Mac 上)处理方式存在一些缺陷,并且无法自动更新 TOC,我们决定将其设置为通过 Sharepoint 中的 Word 自动化服务运行我们的报告。因此,我们像以前一样生成我们的文档,然后通过单词自动化将其平展altChunk
为单个文档并更新 TOC。
这解决了我们所有的兼容性问题并更新了我们的 TOC,但不幸的是,有一个副作用。我们的表格现在在文本上方和下方添加了空间,使表格比以前长得多。这在以前不是问题,即使我们打开文档并在 Word 中重新保存(因此将所有altChunk
s 展平),所以这似乎是单词自动化特有的问题。
有人见过这个吗?有没有办法使用包含表格的 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: 0
for 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();
}
其中HTMLFragments
aDictionary<string,string>
包含要插入到文档中的表格的 HTML。