Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 如何向MS Word添加自定义字段提供程序?_Vba_Ms Word_Field - Fatal编程技术网

Vba 如何向MS Word添加自定义字段提供程序?

Vba 如何向MS Word添加自定义字段提供程序?,vba,ms-word,field,Vba,Ms Word,Field,前言:我想让用户定义高质量的文档模板,然后从我们的信息系统中注入数据并打印结果。我认为Word是一个很好的起点,因为这项工作的目标是商业信函等,而不是数据报告 问题:是否可以向MS Word添加自定义字段提供程序 我没有英文MS Word,所以我必须试着用几句话来描述我的意思。通常我们可以插入诸如作者姓名、当前日期等字段。这些字段可以无缝地工作。我们可以在数据和定义之间切换文件的视图。作者字段的定义如下:{author\\*MERGEFORMAT} 现在,我想将外部数据注入到文档中,并让用户指定

前言:我想让用户定义高质量的文档模板,然后从我们的信息系统中注入数据并打印结果。我认为Word是一个很好的起点,因为这项工作的目标是商业信函等,而不是数据报告

问题:是否可以向MS Word添加自定义字段提供程序

我没有英文MS Word,所以我必须试着用几句话来描述我的意思。通常我们可以插入诸如作者姓名、当前日期等字段。这些字段可以无缝地工作。我们可以在数据和定义之间切换文件的视图。作者字段的定义如下:{author\\*MERGEFORMAT}

现在,我想将外部数据注入到文档中,并让用户指定放置它们的位置。用户应定义文档模板,并标记应注入外部数据的位置。由于Word用户通常不是IT专家,因此对他们来说,最简单的方法是使用一些宏或插入字段选项。所以我想定义我自己的字段集,并将Word连接到我的自定义字段和数据提供程序。怎么做?我找不到这方面的任何文件


我认为这种方法比使用sql数据库连接或类似的方法要好,因为我想让外部源定义已知字段及其值的列表,而不是docx文档本身。此外,数据源实际上不会是sql数据库。

如果您想要一个相当不错的预构建解决方案,请查看Windward reports

是的,名字让它听起来像一个报告工具,但实际上,它正是你所描述的。它们有一个Word附加模块,允许用户轻松标记Word文档,其中包含要从数据源插入的字段


我为一家律师事务所建立了一个非常类似的系统。Windward并没有完成我需要它做的所有事情,但同时,它非常强大。

如果您想要一个相当不错的预构建解决方案,请查看Windward reports

是的,名字让它听起来像一个报告工具,但实际上,它正是你所描述的。它们有一个Word附加模块,允许用户轻松标记Word文档,其中包含要从数据源插入的字段


我为一家律师事务所建立了一个非常类似的系统。Windward并没有完成我需要它做的所有事情,但同时,它非常强大。

当然,这正是内容控件和CustomXMLParts仅为Word 2007/2010而不是更早的.doc格式构建的场景

其中大部分涉及这两个方面:内容控件和CustomXMLParts。如果你走这条路,你会发现这也是一个无价的资源,尤其是刚开始的时候


从最终用户的角度来看,只需通过模板或文档外接程序VSTO或VBA在上为可插入的内容控件创建按钮即可。

当然,这正是内容控件和CustomXMLParts仅为Word 2007/2010而不是更早的.doc格式构建的场景

其中大部分涉及这两个方面:内容控件和CustomXMLParts。如果你走这条路,你会发现这也是一个无价的资源,尤其是刚开始的时候


从最终用户的角度来看,只需通过模板或文档外接程序VSTO或VBA在上为可插入内容控件创建按钮即可。

是的,您可以使用自定义文档属性作为占位符,然后使用一些VBA代码将这些属性设置为所需的任何属性。您可以通过ODBC、Excel电子表格或文本文件获取数据

首先,通过进入文件、属性并创建一些自定义属性来手动进行实验。给它们一个值,然后在文档中插入一些DocProperty字段。若在Word的语言版本中找不到DocProperty,那个么请查看一个字段列表,如Author等。因为最终用户可以看到字段名,所以它们可能已被翻译

然后,为了完成文档模板,请创建一个使用SetProperty的VBA函数。VBA是通过打开文件触发的,还是通过添加菜单项来触发,取决于您

无需特殊控制或任何商业附加组件。我将在您的问题中添加一个VBA标记,因为这实际上是一个VBA编程问题。事实上,自从Word for Windows 1.0以来,这已经成为可能

在VBA中使用SetProperty现在有点复杂了。我从中获得了以下代码片段

对象docProps=wdDoc.CustomDocumentProperties; 类型docPropsType=docProps.GetType; object Prop=docPropsType.InvokeMemberItem, BindingFlags.Default| BindingFlags.GetProperty, null,docProps, 新对象[]{propName}; 类型PropType=Prop.GetType; PropType.InvokeMemberItem, BindingFlags.Default| BindingFlags.SetProperty, null,docProps, 新对象[]{propName,propValue}

是的,您可以通过 使用自定义文档属性作为占位符,然后使用一些VBA代码将这些属性设置为所需的任何属性。您可以通过ODBC、Excel电子表格或文本文件获取数据

首先,通过进入文件、属性并创建一些自定义属性来手动进行实验。给它们一个值,然后在文档中插入一些DocProperty字段。若在Word的语言版本中找不到DocProperty,那个么请查看一个字段列表,如Author等。因为最终用户可以看到字段名,所以它们可能已被翻译

然后,为了完成文档模板,请创建一个使用SetProperty的VBA函数。VBA是通过打开文件触发的,还是通过添加菜单项来触发,取决于您

无需特殊控制或任何商业附加组件。我将在您的问题中添加一个VBA标记,因为这实际上是一个VBA编程问题。事实上,自从Word for Windows 1.0以来,这已经成为可能

在VBA中使用SetProperty现在有点复杂了。我从中获得了以下代码片段

对象docProps=wdDoc.CustomDocumentProperties; 类型docPropsType=docProps.GetType; object Prop=docPropsType.InvokeMemberItem, BindingFlags.Default| BindingFlags.GetProperty, null,docProps, 新对象[]{propName}; 类型PropType=Prop.GetType; PropType.InvokeMemberItem, BindingFlags.Default| BindingFlags.SetProperty, null,docProps,

新对象[]{propName,propValue}

您可能想查看内容控件或文档变量。您可能想查看内容控件或文档变量。是的,Winward reports可能是我想要的,但我问的是如何操作,而不是在哪里购买。那个软件的价格是7000美元,太贵了!我哥哥说他需要在前院挖个洞,所以我的建议是第一步是买把铲子。Windward是一个提供此功能的工具。根据您的配置,它可能会比7K小很多。一把电铲很便宜。但我可能需要数十或数百名信息系统用户才能使用它。我很震惊,这将花费我们7000多美元。此外,它看起来很容易实现,价格不真实。是的,Winward reports可能是我想要的,但我问的是如何实现,而不是在哪里购买。那个软件的价格是7000美元,太贵了!我哥哥说他需要在前院挖个洞,所以我的建议是第一步是买把铲子。Windward是一个提供此功能的工具。根据您的配置,它可能会比7K小很多。一把电铲很便宜。但我可能需要数十或数百名信息系统用户才能使用它。我很震惊,这将花费我们7000多美元。另外,它看起来很容易实现,价格是不真实的。这对我来说是新的信息。我成功地在Word 2007中添加了一个新的自定义属性。我知道我可以使用VBA,希望还可以使用VSTO来更改此自定义属性的值。但是如何将其插入文档的文本中呢?我不知道DocProperty是什么或在哪里。您可以通过Word自动化字段将其插入文档文本中,例如:{DocProperty Custom1\*MERGEFORMAT}花括号是用花括号表示的特殊控制字符,可以手动插入,并在使用Word中的菜单命令Insert/Field或与VBA等效的词时自动添加:Selection.Fields.Add Range:=Selection.Range,Type:=WDFIELDEEMPTY,Text:=DOCPROPERTY Custom1,保留格式:=True@mupan,我想应该是Text:=DOCPROPERTY Custom1在开始时添加一个。这对我来说是新信息。我成功地在Word 2007中添加了一个新的自定义属性。我知道我可以使用VBA,希望还可以使用VSTO来更改此自定义属性的值。但是如何将其插入文档的文本中呢?我不知道DocProperty是什么或在哪里。您可以通过Word自动化字段将其插入文档文本中,例如:{DocProperty Custom1\*MERGEFORMAT}花括号是用花括号表示的特殊控制字符,可以手动插入,并在使用Word中的菜单命令Insert/Field或与VBA等效的词时自动添加:Selection.Fields.Add Range:=Selection.Range,Type:=WDFIELDEEMPTY,Text:=DOCPROPERTY Custom1,保留格式:=True@mupan,我认为应该是Text:=DOCPROPERTY Custom1在开始时添加一个。有关内容控制方法的更多信息,请参阅opendope.org,特别是关于如何执行重复和条件。这里有一个Word加载项的链接,用于设置内容。@plutext:Wow,看起来很有趣。我以前没听说过,但绝对值得再研究一下+1您的评论添加!非常感谢您的回答+1,但我想首先我会尝试使用Michael Dillon建议的自定义文档属性。@Al Kepp:当然,请仔细考虑一下
尝试您还应该查看DOCVARIABLE和书签。这三种解决方案都有一定的局限性,因此,内容控制没有相同的局限性。有关内容控制方法的更多信息,请参阅opendope.org,特别是关于如何执行重复和条件。这里有一个Word加载项的链接,用于设置内容。@plutext:Wow,看起来很有趣。我以前没听说过,但绝对值得再研究一下+1您的评论添加!非常感谢您的回答+1,但我想首先我会尝试使用Michael Dillon建议的自定义文档属性。@Al Kepp:当然,试试看。您还应该查看DOCVARIABLE和书签。这三种解决方案都有一定的局限性,因此,内容控件没有相同的局限性。