C#MS Word互操作性-如何拉伸填充表格中的最后一列

问题描述

我正在用c#编写的WinForms应用程序中使用Microsoft.Office.Interop.Word来以编程方式创建Word文档。 我需要创建一个表格,其中前两列具有预定义的固定宽度,第三列(最后一列)经过拉伸以填充可用页面的剩余宽度(如果我未指定任何宽度,认情况下,表格会自行拉伸以填充页面的可用宽度,并且所有3列的大小均将被调整,这不是我所需要的。

我可以像这样预先设置前两列的大小:

myTable.Columns[1].Width = 130;
myTable.Columns[2].Width = 70;

这部分很简单,可以正常运行。但是我不知道如何调整第三列以拉伸填充页面的其余宽度。这是我的最后一次尝试,导致第三列超出了页面的边缘:

myTable.Columns[3].Width = wordApp.UsableWidth - myTable.Columns[1].Width - myTable.Columns[2].Width;

我还尝试不为第三列的宽度指定一个值,希望认情况下它将占用表的其余宽度-而是将第三列调整为一些看似任意的值(将该列上单元格的内容包装好以适合),表格的总宽度缩小以适合所有3列,该宽度小于页面的可用宽度。

我尝试对以下表属性使用不同的值,但没有成功:

myTable.AllowAutoFit = true;
myTable.PreferredWidth = wordApp.UsableWidth;

如果有人可以提供帮助,将不胜感激。谢谢。

如果有帮助,我会提供相关的代码块:

Microsoft.Office.Interop.Word.Table myTable = wordDoc.Tables.Add(paraTitle.Range,2,3,ref missing,ref missing);
myTable.Borders.Enable = 1;
myTable.AllowAutoFit = true;
myTable.PreferredWidth = wordApp.UsableWidth;
//myTable.PreferredWidthType = WdPreferredWidthType.wdPreferredWidthAuto;
myTable.Columns[1].Width = 130;
myTable.Columns[2].Width = 70;
myTable.Columns[3].Width = wordApp.UsableWidth - myTable.Columns[1].Width - myTable.Columns[2].Width;
myTable.Rows[1].Cells[1].Range.Text = "Items returned by:";
myTable.Rows[1].Cells[1].Range.Bold = 1;
myTable.Rows[1].Cells[2].Range.Text = "Name";
myTable.Rows[1].Cells[2].Range.Bold = 1;
myTable.Rows[1].Cells[3].Range.Text = "(person's name and initials...)";
myTable.Rows[1].Cells[3].Range.Bold = 0;
myTable.Rows[2].Cells[2].Range.Text = "Date / Time";
myTable.Rows[2].Cells[2].Range.Bold = 1;
myTable.Rows[2].Cells[3].Range.Text = "(timestamp...)";
myTable.Rows[2].Cells[3].Range.Bold = 0;

解决方法

UsableWidth是指Word应用程序的Window宽度,而不是文档页面宽度。

代替使用: doc.PageSetup.PageWidth - (doc.PageSetup.LeftMargin + doc.PageSetup.RightMargin);