前言:我希望允许用户定义高质量的文档模板,然后从我们的信息系统中注入数据并打印结果。我认为MS Word是一个很好的起点,因为这项工作的目的是商业信函等,而不是数据报告。
问题:是否可以向MS Word添加自定义字段提供程序?
我没有英文MS Word,所以我必须尝试用几句话来描述我的意思。通常我们可以插入“字段”,如作者姓名,当前日期等。这些字段可以无缝地工作。我们可以在数据和定义之间切换文件的视图。作者字段的定义如下所示:{ AUTHOR \\* MERGEFORMAT }
。
现在我想将外部数据注入文档,并让用户指定放置它们的位置。用户应定义文档模板并标记应注入外部数据的位置。由于Word用户通常不是IT专家,因此最简单的方法是使用一些宏或“插入字段”选项来执行此操作。所以我想定义自己的字段集并将Word连接到我的自定义字段和数据提供程序。怎么做?我无法找到任何相关文档。
我认为这种方法比使用sql数据库连接或类似的方法更好,因为我想让外部源定义已知字段及其值的列表,而不是docx文档本身。此外,数据源实际上不是一个SQL数据库。
答案 0 :(得分:3)
当然,这是为Content Controls和CustomXMLParts构建的确切场景(仅限Word 2007/2010,而不是早期的.doc格式)。
大多数Word Developer Center home page处理这两个问题:内容控件和CustomXMLParts。如果你走这条路线,你会发现Word Content Control Toolkit也是一个非常宝贵的资源,特别是刚开始的时候。
从最终用户的角度来看,它可以像通过模板或文档插件(VSTO或VBA)在Ribbon上创建可插入内容控件的按钮一样简单。
答案 1 :(得分:2)
是的,您可以使用自定义文档属性作为占位符,然后使用一些VBA代码将这些属性设置为您想要的任何内容。您可以通过ODBC或Excel电子表格或文本文件获取数据。
首先,通过进入File, Properties
并创建一些自定义属性来手动进行实验。给它们一个值,然后在文档中插入一些DocProperty
字段。如果您在Word的语言版本中找不到DocProperty
,请查看Author
等字段列表。由于字段名称对最终用户可见,因此可能已翻译过。
然后,为了完成您的文档模板,请创建一个使用SetProperty
的VBA函数。 Read this article for more details.由您决定是通过打开文件来触发VBA,还是添加一个菜单项来执行此操作。
无需特殊控件或任何商业插件。我将在您的问题中添加VBA标记,因为这实际上是一个VBA编程问题。事实上,自Word for Windows 1.0以来,这已经成为可能。
在VBA中使用SetProperty
现在有点复杂了。我从this forum posting.
object docProps = wdDoc.CustomDocumentProperties; 输入docPropsType = docProps.GetType(); object Prop = docPropsType.InvokeMember(" Item", BindingFlags.Default | BindingFlags.GetProperty, null,docProps, new object [] {propName}); 类型PropType = Prop.GetType(); PropType.InvokeMember("项目&#34 ;, BindingFlags.Default | BindingFlags.SetProperty, null,docProps, new object [] {propName,propValue});
答案 2 :(得分:0)
如果你想要一个相当不错的预建解决方案,请查看Windward报告。
是的,这个名字听起来像是一个报道工具,但实际上,它正是你所描述的。他们有一个Word添加,允许用户轻松地标记一个单词doc,其中包含要从数据源插入的字段。
我为一家律师事务所建立了一个非常相似的系统。 Windward没有完成我需要做的所有事情,但与此同时,它非常强大。