有没有办法在 C# 中使用 OpenXml 库来修复列的宽度?

sha*_*ake 5 c# openxml-sdk

我有一个包含 2 列的 Word 表。我试图让 Word 在 column2 具有换行的长文本时不要挤压 column1。

这是预期的布局:

 列 1 列 2                
 ------- -------                
 1. 长文本换行   
           一些时间。     
           另一段   
           长文本换行。  

 2. 更长的文字    
           再次包裹。           
           还有一段 
           的长包装文本。 

注意 column2 在每个单元格中有 2 个段落。不确定这是否重要,但那是必须存在的。

当表格行数达到两位数并且我以编程方式将完成的文档发送到客户端站点上的浏览器(他们将其视为下载并在 Word 中打开它)后,会发生以下情况:

 列 1 列 2                
 ------- -------                
 . .
 . .

 9. 长文本换行   
           一些时间。     
           另一段   
           长文本换行。  

 1 更长的文字    
 0. 再次包装。           
           还有一段 
           的长包装文本。 

 1 更长的文字    
 1. 重新包装。           
           还有一段 
           的长包装文本。 

注意如何“10”。和“11”。在 column1 被包裹(因为 Word 决定压缩该列的宽度,......我认为)

我尝试增加 GridColumn 宽度(甚至增加到一个很大的值)但无济于事。Word 似乎总是将列宽重新调整为它认为最合适的大小......我认为。我在其他论坛(不是 Microsoft 网站)上读到,所有宽度设置都仅被视为“首选”。不确定这是否属实,但在这种情况下似乎已经足够了!!

我试过设置

new TableCellProperties()
{
  Width = "4000",
  Type = TableWidthUnitValues.Pct
}
Run Code Online (Sandbox Code Playgroud)

{
  Width = "3170",
  Type = TableWidthUnitValues.Dxa
}
Run Code Online (Sandbox Code Playgroud)

我还尝试将表格布局设置为固定:

类型 = TableLayoutValues.Fixed

还要在表格属性中将表格单元格边距和 TableCellSpacing 设置为 0;但没有任何帮助。

是否有任何 OpenXml API 告诉 Word 不要弄乱列的宽度?

小智 7

我遇到了同样的问题,但我可以使用 TableLayout 属性来解决。

// First, we create the table, its properties and we append it.
Table table = new Table();
TableProperties props = new TableProperties();
table.AppendChild<TableProperties>(props);

// Now we create a new layout and make it "fixed".
TableLayout tl = new TableLayout(){ Type = TableLayoutValues.Fixed };
props.TableLayout = tl;

// Then we just create a new row and a few cells and we give them a width
var tr = new TableRow();
var tc1 = new TableCell();
var tc2 = new TableCell();
tc1.Append(new TableCellProperties(new TableCellWidth() { Type = TableWidthUnitValues.Dxa, Width = "2000" }));
tc2.Append(new TableCellProperties(new TableCellWidth() { Type = TableWidthUnitValues.Dxa, Width = "2000" }));
table.Append(tr);
Run Code Online (Sandbox Code Playgroud)

现在,当我们向表格添加文本时,不再重新缩放。


sha*_*ake 4

对于那些感兴趣的人,我终于解决了这个问题。

解决方案是完全放弃表对象。相反,我只依赖段落。

互联网上有一些讨论明确提到Word中表格对象的列宽无法通过OpenXml精确控制。我不确定这是否属实,但正如我在上面的问题中提到的,我尝试的任何方法都没有帮助。在使用 OpenXml SDK 工具从中提取代码之前,甚至没有修复 Word 本身的宽度。也没有人提供具体的替代方案。

但是,使用带有缩进和对齐对象的段落并嵌入制表符,将段落的内容分成 2 个“列”,其中右列精确地缩进换行。给我确切想要的结果,如上问题中的表格所示。也没有挤压column1。