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

C# MS Word Interoperability - how to stretch-fill last column in table

我在用 c# 编写的 WinForms 应用程序中使用 Microsoft.Office.Interop.Word 以编程方式创建 word 文档。 我需要创建一个 table,其中前两列具有预定义的固定宽度,第三列(最后一列)拉伸以填充可用页面的剩余宽度(如果我不要指定任何宽度,默认情况下,table 会自行拉伸以填充页面的可用宽度,并且所有 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 列的宽度值,希望它默认占用 table 的其余宽度 - 但是,第 3 列被调整为一些看似任意的值(此列上的单元格内容被包裹以适合)并且 table 的总宽度缩小以适合所有 3 列,这小于页面的可用宽度。

我尝试为以下 table 属性设置不同的值但没有成功:

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);