演练:使用 Visual Studio 项目自动化新建 Office 项目
此演练演示如何创建使用 Visual Studio 对象模型使 Office 项目的创建过程实现自动化的宏。 项目使用**“Visual Studio Tools for Office 项目向导”**中的自定义设置,而不依赖项目的默认设置。
**适用于:**本主题中的信息适用于 Excel 2010 的文档级项目。有关更多信息,请参见按 Office 应用程序和项目类型提供的功能。
代码使用自定义向导设置创建新项目,以便使用现有的 Microsoft Office Excel 工作簿而非通过创建新工作簿来创建自动化项目。
有关宏的更多信息,请参见使用宏自动执行重复性操作。
本演练阐释了以下任务:
创建新的 Visual Studio 宏。
使用自定义设置创建临时模板文件 (.vstemplate)。
设置向导的参数并启动向导。
系统必备
您需要以下组件来完成本演练:
-
Visual Studio 2010 的一个版本,其中包含 Microsoft Office 开发工具。有关更多信息,请参见[将计算机配置为开发 Office 解决方案](bb398242\(v=vs.100\).md)。
- Excel 2010.
创建 Excel 工作簿
必须创建一个 Excel 工作簿,将其用作新项目中的现有工作簿。
创建 Excel 工作簿
在计算机的 C 驱动器上创建一个名为**“CreateNewFile”**的文件夹。
在**“CreateNewFile”**中创建一个名为 Test: C:\CreateNewFile\Test 的子文件夹。
打开 Excel 2010。
在单元格**“A1”**中键入“这是 CreateNewFile 工作簿”。
将该工作簿另存为 CreateNewFile.xls,保存位置为 C:\CreateNewFile。
关闭 Excel。
Test 子文件夹用于放置已完成的项目。
创建新的宏
在此步骤中,您将新建一个空的 Visual Studio 宏。
创建新的宏
打开 Visual Studio 并关闭任何打开的项目。
在**“工具”菜单上指向“宏”,然后单击“宏 IDE”**。
随即打开**“Microsoft Visual Studio 宏”**集成开发环境 (IDE)。
如果**“MyMacros”**节点尚未展开,请将其展开。
在**“项目”菜单上,单击“添加模块”**。
将该模块命名为 CreateNewProject,然后单击**“添加”**。
新模块随即在宏 IDE 中打开。 这时可以添加代码来创建新项目。
创建模板文件 (.vstemplate)
若要使用默认的向导设置创建新项目,请使用预定义的模板文件之一。 在 Visual Studio 中,项目默认为创建一个新的文档或工作簿以便在项目中使用。 若要在项目中使用现有的工作簿,则必须生成一个具有正确设置的自定义临时 .vstemplate 文件。
有关 .vstemplate 文件的更多信息,请参见 Visual Studio 模板。
若要使用现有文档,请向 .vstemplate 文件添加自定义参数 VSTOExistingDocumentPath。
生成临时 .vsz 文件
在**“项目”菜单上,单击“添加引用”**。
选择**“System.Xml.dll”,单击“添加”,然后单击“确定”**。
将以下 Imports 语句添加到代码文件顶部。
Imports System.Xml Imports System.IO
在 CreateNewProject 模块中添加以下方法,以定义临时模板文件夹的内容。
Sub CreateVstemplateFile(ByVal defaultTemplateFilePath As String, _ ByVal templateFilePath As String, ByVal docFilePath As String) ' Copy the default template in the temporary location. Dim defaultTemplateDirectory = _ Path.GetDirectoryName(defaultTemplateFilePath) Dim templateDirectory = Path.GetDirectoryName(templateFilePath) If Not Directory.Exists(templateDirectory) Then Directory.CreateDirectory(templateDirectory) End If For Each fileToCopy As String In Directory. _ GetFiles(defaultTemplateDirectory) File.Copy(fileToCopy, Path.Combine(templateDirectory, _ Path.GetFileName(fileToCopy)), True) Next ' Create the vstemplate namespace. Dim vstemplateNamespace As String = _ "https://schemas.microsoft.com/developer/vstemplate/2005" ' Load the XML document. Dim doc As XmlDocument = New XmlDocument() doc.Load(templateFilePath) Dim xmlNsManager As XmlNamespaceManager = _ New XmlNamespaceManager(doc.NameTable) xmlNsManager.AddNamespace("vstemplns", vstemplateNamespace) ' Get 'CustomParameters' XML node. Dim customParametersNode As XmlNode = doc.SelectSingleNode( _ "/vstemplns:VSTemplate/vstemplns:TemplateContent/" _ & "vstemplns:CustomParameters", xmlNsManager) ' Create a new XML CustomParameter node with ' the existing document data. ' <CustomParameter Name="VSTOExistingDocumentPath" _ ' Value="C:\CreateNewFile\CreateNewFile.xls" /> Dim newNode As XmlNode newNode = doc.CreateElement("CustomParameter", _ vstemplateNamespace) Dim nameAttribute As XmlAttribute nameAttribute = doc.CreateAttribute("Name") Dim valueAttribute As XmlAttribute valueAttribute = doc.CreateAttribute("Value") nameAttribute.Value = "VSTOExistingDocumentPath" valueAttribute.Value = docFilePath newNode.Attributes.Append(nameAttribute) newNode.Attributes.Append(valueAttribute) customParametersNode.AppendChild(newNode) doc.Save(templateFilePath) End Sub
下一个方法定义参数并调用 LaunchWizard 方法。
启动向导
若要创建一个新项目,请使用 DTE 对象的 LaunchWizard 方法。
启动向导
向**“CreateNewProject”**模块添加以下方法,以填充参数数组并启动向导:
Sub LaunchWizard(ByVal projectName As String, _ ByVal projectFolder As String, _ ByVal templateFilePath As String) Dim params(6) As Object ' New project. params(0) = "{0F90E1D0-4999-11D1-B6D1-00A0C90F2744}" ' Project name. params(1) = projectName ' Project location. params(2) = projectFolder ' Install location. params(3) = "" ' Close solution. params(4) = False ' Solution name. params(5) = "" ' Silent - do not display any user interface. params(6) = False DTE.LaunchWizard(templateFilePath, params) End Sub
最后,添加一个方法以调用刚创建的两个方法,并传入相应参数。
创建项目
以下方法为 CreateVstemplateFile 和 LaunchWizard 方法定义和传递正确参数。
创建项目
向**“CreateNewProject”**模块添加以下方法:
Sub CreateProject() Dim sol As Solution2 = DTE.Solution ' Get the path of the default .vstemplate file using ' the name of the template zip file and the language. ' The zip files are "VSTOExcelWorkbook.zip", ' "VSTOExcelTemplate.zip", ' "VSTOWordDocument.zip", ' or "VSTOWordTemplate.zip". ' The languages are "VisualBasic" and "CSharp". Dim defaultTemplateFilePath As String = _ sol.GetProjectTemplate("VSTOExcel2010WorkbookV4.zip", _ "VisualBasic") ' Get the temporary .vstemplate file containing ' the specification. Dim templateDirectory As String = "C:\CreateNewFile\template" Dim templateFilePath = Path.Combine(templateDirectory, _ Path.GetFileName(defaultTemplateFilePath)) ' Get an existing document to use in project creation. Dim docFilePath As String = "C:\CreateNewFile\CreateNewFile.xls" ' Create a temporary template with the wizard specification. CreateVstemplateFile(defaultTemplateFilePath, _ templateFilePath, docFilePath) ' Launch the CreateProject wizard. Dim projectName As String = "CreateNewFile" Dim projectFolder As String = "c:\CreateNewFile\test" LaunchWizard(projectName, projectFolder, templateFilePath) End Sub
保存宏。
关闭宏 IDE。
测试宏
现在可以测试该宏,以确保它能创建一个新项目。
测试宏
在**“工具”菜单上指向“宏”,然后单击“Macro 资源管理器”**。
在**“Macro 资源管理器”的“MyMacros”之下,展开“CreateNewProject”**宏。
在**“CreateNewProject”之下双击“CreateProject”**。
会打开**“Visual Studio Tools for Office 项目向导”**。
在**“为应用程序选择文档”页中单击“确定”**。
验证是否在 Test 子文件夹中创建了新项目。
请参见
任务
如何:使用 Visual Studio 项目自动化向工作簿添加工作表
如何:使用 Visual Studio 项目自动化更改 Excel 属性
概念
Visual Basic 和 Visual C# 项目扩展性示例