我开了一个新问题,因为我在这里或其他地方找到的答案都不适合我。
我使用C#中的Word创建一个表(Office 16.0 Interop)。
我的目标:使某个列的宽度更小,即适合其内容。
这是我创建表格的方式:
var table = doc.Tables.Add(menuParagraph.Range, rowCount, 2, ref _objMiss, ref _objMiss);
table.Borders.InsideLineStyle = Word.WdLineStyle.wdLineStyleSingle;
table.Borders.OutsideLineStyle = Word.WdLineStyle.wdLineStyleSingle;
// Label
table.Cell(1, 1).Range.Shading.BackgroundPatternColor = Word.WdColor.wdColorGray20;
table.Cell(1, 1).Range.Text = "Label";
table.Cell(1, 2).Range.Shading.BackgroundPatternColor = Word.WdColor.wdColorGray20;
table.Cell(1, 2).Range.Text = $"{recordItem.TextId.EnglishTranslation} ({recordItem.TextId.GermanTranslation})";
// Type and length
table.Cell(2, 1).Range.Text = "DataType";
table.Cell(2, 2).Range.Text = $"{recordItem.DataType} (Bit length: {recordItem.BitLength})";
// Byte offset
table.Cell(3, 1).Range.Text = "Byte offset";
table.Cell(3, 2).Range.Text = $"{recordItem.ByteOffset}";
// Default value
table.Cell(4, 1).Range.Text = "Default value";
table.Cell(4, 2).Range.Text = $"{recordItem.DefaultValue}";
到目前为止,我找到的解决方案都没有解决我的问题 事实上,它对我的桌子都没有任何影响。
table.Columns[0].AutoFit();
被忽略,无论如何都没有效果。
table.AutoFitBehavior(Word.WdAutoFitBehavior.wdAutoFitContent);
即使我直接设置宽度,它也会被忽略:
table.Columns[0].Width = app.PixelsToPoints(100f);
输出始终相同。每个列具有相同宽度的表。
如何强制表格使一列调整其宽度为其内容(并且仍然使用页面的整个宽度)。
答案 0 :(得分:0)
您是否尝试过:table.Columns [0] .PreferredWidth?
也许那会奏效。
这里有一些关于它的文件:
https://msdn.microsoft.com/en-us/library/microsoft.office.interop.word.table.preferredwidth.aspx
答案 1 :(得分:0)
对于第一列的自动拟合,这样的事情应该有效。它使用Column.SetWidth Method。
table.AllowAutoFit = true;
Word.Column firstCol = table.Columns[1];
firstCol.AutoFit(); // force fit sizing
Single firstColAutoWidth = firstCol.Width; // store autofit width
table.AutoFitBehavior(Word.WdAutoFitBehavior.wdAutoFitWindow); // fill page width
firstCol.SetWidth(firstColAutoWidth, Word.WdRulerStyle.wdAdjustFirstColumn); // reset width keeping right table margin