【发布时间】:2014-02-21 05:22:47
【问题描述】:
我使用以下vb.net函数纯粹保存Word文档(没有任何文本输入,我现在只对大量创建空word文档感兴趣):
Sub createDoc(ByVal cname As String, ByVal acctype As String)
counter += 1
wordDoc = wordApp.Documents.Add
wordDoc.SaveAs(OFDD.SelectedPath & "\" & cname & "_" & acctype & ".docx")
wordDoc.Close()
End Sub
OFDD 变量是文件夹浏览器 vb 组件的名称,它的 SelectedPath 属性结合 cname 和 acctype 参数为我提供了我要创建和保存的 Word 文档的名称。下面是 counter、wordDoc 和 wordApp 变量的声明:
Private Shared counter As Integer = 0
Private wordApp As New Word.Application
Private wordDoc As Word.Document
使用子例程 createDoc 中的第二行代码将 wordDoc 变量分配给 Document 对象。但是,似乎在我第 83 次尝试检索文档对象并将其分配给 wordDoc 时,我收到一个异常,指出 "Command failed" 。我可以说这是我第 83 次进入该函数,因为在我的 catchblock 中,我在消息框中打印了 counter 的值,就在打印有关接收到的异常的详细信息之后,就在我释放我使用的资源并结束进程之前。
担心我的系统是否存在与 MS Word 自动化相关的限制,我创建了另一个 Visual Studio 项目(这次是控制台项目),引用了 Microsoft.Interop.Office.Word 命名空间并编写了以下简单模块:
Imports Word = Microsoft.Office.Interop.Word
Module Module1
Sub Main()
Dim wordApp As New Word.Application
Try
For i As Integer = 0 To 150
Dim document As Word.Document = wordApp.Documents.Add()
document.SaveAs("C:\WordTester\" & i & ".docx")
document.Close()
Next
Catch
wordApp.Quit()
End Try
Console.WriteLine("Document objects left in memory: " & _
wordApp.Documents.Count) ' zero
Console.Read()
wordApp.Quit()
End Sub
End Module
效果很好。检查我的文件系统,我看到在“C:\WordTester”中创建了 150 个单词文件。考虑到我所做的所有这些努力,我真的很困惑为什么我编写的第一个代码在第 83 次创建和保存文档时卡住了,任何帮助都将不胜感激。
感谢您的宝贵时间,
杰森
编辑:这是我在下面的评论中引用的 createDoc 的编辑版本:
Sub createDoc(ByVal cname As String, ByVal acctype As String)
counter += 1
wordApp = New Word.Application
wordDoc = New Word.Document
wordDoc = wordApp.Documents.Add
wordDoc.SaveAs(OFDD.SelectedPath & "\" & cname & "_" & acctype & ".docx")
wordDoc.Close()
wordApp.Quit()
End Sub
【问题讨论】: