我试图像这样在MS Word的表格上显示类列表中的属性值:
public void CreateTable<T>(IList<T> list)
{
if (list != null)
{
var props = typeof(T).GetProperties();
Range tableLoc = WdDoc.Range();
var table = WdDoc.Tables.Add(tableLoc, list.Count, props.Length);
for (int i = 0; i < props.Length; i++)
{
table.Columns[i + 1].Select();
if (props[i].PropertyType == typeof(double))
{
WdApp.Selection.Range.ParagraphFormat.Alignment = WdParagraphAlignment.wdAlignParagraphRight;
}
else
{
WdApp.Selection.Range.ParagraphFormat.Alignment = WdParagraphAlignment.wdAlignParagraphCenter;
}
}
//...
}
}
我尝试根据填充属性类型自动设置列的文本对齐方式。 但是,只能将每列的第一行设置为我分配的正确对齐方式。 其他行将始终设置为for循环的最新对齐方式。 为什么会这样呢?我想念任何片段吗?
此外,两者之间有什么区别
WdApp.Selection.Paragraphs.Format.Alignment = WdParagraphAlignment.wdAlignParagraphCenter;
和
WdApp.Selection.Range.ParagraphFormat.Alignment = WdParagraphAlignment.wdAlignParagraphCenter;
谢谢!
答案 0 :(得分:1)
问题来自在使用Word对象模型的此特定实例中使用Selection.Range
。使用列时,您需要使用
WdApp.Selection.ParagraphFormat.Alignment
背景
Selection
会完全影响所选内容-整个列。
Selection.Range
影响所选内容的 Range 。对于列,Selection.Range不能不是是整个列。 Word中的范围必须是连续的文本行,但列不是连续的。因此Selection.Range
仅返回选择的连续部分:第一个单元格(行)。这就解释了为什么只有表格的第一行会受到当前代码的影响。
所选列出现连续时,这只是给用户带来方便。在幕后,一列和下一列中的单元格之间的行中的所有内容都使文本运行中断。
如果您熟悉HTML,请考虑如何在HTML中定义表。 Word Open XML定义表的方式基于相同的原理。这个概念看起来像这样:
<table><row><cell><cell></row><row><cell><cell><row></table>
行及其内容是连续的。