【发布时间】:2021-05-08 09:55:45
【问题描述】:
我有一个 C# 中的 Winform 应用程序,它正在从 DataGridView 进行邮件合并。 我需要合并布尔单元格的选中/未选中框。
String strPresent;
char EmptyBox = (char)0xA8;
char CheckedBox = (char)0x254;
Boolean bPresent = (Boolean)selectedRow.Cells["Present"].Value;
if (bPresent)
strPresent = CheckedBox.ToString();
else
strPresent = EmptyBox.ToString();
在Word合并字段处理代码中:
case "Present":
myMergeField.Select();
wordApp.Selection.TypeText(strPresent);
wordApp.Selection.MoveLeft(WdUnits.wdCharacter, 1, WdMovementType.wdExtend);
到目前为止一切正常: 问题是复选框的格式是 Calibri (Body),而不是 Wingdings。
wordApp.Selection.Font.Name = "Wingdings";
break;
模板中的合并字段已格式化为 Wingdings。 我在模板中尝试过 * charformat 而不是 * mergeformat。 我添加了一个尾随下划线和一个空格,以防止 Selection.TypeText 选择整个段落。 使 Word 进程可见,我可以看到选择了正确的字符。
我也试过了:
Range myRange = wordApp.Selection.Range;
myRange.Font.Name = "Wingdings";
【问题讨论】:
-
这与邮件合并没有任何关系,因为您正在尝试选择并覆盖合并字段。相反,您似乎只是(错误地)使用合并字段作为完全不同类型的自动化的占位符。如果您要覆盖该字段,则使用 \* charformat 和 \* mergeformat 将毫无帮助。
-
这正是众多来源建议如何进行邮件合并的方式。见c-sharpcorner.com/article/word-automation-using-C-Sharp 或vivekcek.wordpress.com/2012/08/25/…
-
不管你的消息来源怎么说,你正在做的不是邮件合并;它只是伪装成邮件合并的文档自动化。例如,当您执行 real 邮件合并时,邮件合并字段通过 ADODB 连接直接从数据源获取数据,而无需任何 C# 或 VBA 代码。参见,例如:support.microsoft.com/en-us/office/… & support.microsoft.com/en-gb/office/…
-
如果我有一个可以利用 Excel 或 Access 的简单数据源。我想我可以采用这种方法:docs.microsoft.com/en-us/previous-versions/office/troubleshoot/… 但是,我现在的问题只是字体,而不是自动化或邮件合并。
标签: c# fonts automation ms-word mailmerge