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

时间:2015-03-25 03:33:31

标签: c# openxml-sdk

我有一个包含2列的Word表格。当column2有一个包装的长文本时,我试图让Word不要挤压column1。

这是预期的布局:

 column1   Column2                
 -------   -------                
 1.        Long text that wraps   
           a couple of times.     
           Another paragraph of   
           long text that wraps.  

 2.        More long text that    
           wraps again.           
           Also another paragraph 
           of long wrapping text. 

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

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

 column1   Column2                
 -------   -------                
 .         .
 .         .

 9.        Long text that wraps   
           a couple of times.     
           Another paragraph of   
           long text that wraps.  

 1         More long text that    
 0.         wraps again.           
           Also another paragraph 
           of long wrapping text. 

 1         More long text that    
 1.        wraps again.           
           Also another paragraph 
           of long wrapping text. 

注意" 10。"和" 11。"在column1中得到包装(因为Word决定挤压该列的宽度,......我认为)

我尝试增加GridColumn宽度(甚至是一个很大的值)无济于事。 Word似乎总是将列宽重新调整到它认为最合适的尺寸......我想。我在其他论坛(不是微软网站)上读到,所有宽度设置都被认为是"首选"只要。不确定这是否属实,但在这种情况下似乎是真的!!

我尝试过设置

new TableCellProperties()
{
  Width = "4000",
  Type = TableWidthUnitValues.Pct
}

{
  Width = "3170",
  Type = TableWidthUnitValues.Dxa
}

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

Type = TableLayoutValues.Fixed

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

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

2 个答案:

答案 0 :(得分:2)

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

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

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

但是,使用具有缩进和对齐对象的Paragraphs并嵌入Tab字符,将段落的内容分成2个“列”,其中右列准确地包装缩进。给出我在上面问题的表格中所需的确切结果。也没有挤压column1。

答案 1 :(得分:1)

我遇到了同样的问题但是我能够使用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);

现在,当我们向表中添加文本时,不再对其进行重新调整。