我在Visual Studio中使用Word.Interop命名空间需要一些帮助。我正在使用VB.net,但也欢迎C#答案。我在下面加了几个不同的基本问题。
我创建了一个文档(.docx)并添加到我的项目中,基本上只是一个模板。它包含所有正确的格式,但文本中的字符串变量需要在循环中替换。例如,如果字符串" COMPANYNAME"出现在word文档中,我只是使用正确的公司名称进行编程查找/替换。我在整个文档的其余部分继续这种方式,用适当的替换替换所有变量:
Private Sub CompileInvoicesButton_Click(sender As System.Object, e As System.EventArgs) Handles CompileInvoicesButton.Click
For Each CompanyInfo In CompanyInfoList
Dim wordApp As Word.Application
wordApp = CreateObject("Word.Application")
Dim wordDoc As Word.Document = wordApp.Documents.Open("C:\Code\...\INVOICE.docx") '<-- Open template. (how can I get the path of this document no matter where the application is being run from?)
' Replace the template text with real data:
wordDoc.Content.Find.Execute(FindText:="<COMPANY NAME>", ReplaceWith:=CompanyInfo.CompanyName, Replace:=Word.WdReplace.wdReplaceAll)
wordDoc.SaveAs(folderpath + "\invoice1.docx")
Next
End Sub
我在这个简单的代码块中遇到了一些问题。
首先,在尝试打开文件时(例如,当我点击CompileInvoices按钮时),我收到一条ReadOnly通知消息,询问我是否要打开该文件的副本,或不。我相信这是因为我的项目所在的目录标记为ReadOnly,模板文档当然位于我的项目目录中。我的想法是,由于文件不大(1页.docx),我会将它包含在我的项目中,就效率而言,这样做会很好,但我没有预见到ReadOnly问题。我该如何解决这个问题?如果这是一个超级基本问题,请道歉。我确实试图改变一些项目设置,但我真的不知道自己在做什么,所以在去火腿之前我会很感激。
第二,也许这与上面有关,但是如何获得我所包含的word文档的动态文件路径?简单地指完整条路径对任何人的机器都不起作用,除了我的。
我认为这两个问题都可能与我包含INVOICE.docx文件的方式/位置有关 在我的项目中。我所做的只是右键单击我的项目,然后转到添加现有项目,并以这种方式添加。
答案 0 :(得分:1)
使用.Open
方法从模板创建新文档,而不是调用.Add
来打开模板进行编辑。
要获取当前目录,可以使用Application.StartupPath
属性。