Я использую следующую функцию 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
Переменная wordDoc присваивается объекту Document с помощью второй строки кода в подпрограмме createDoc. Однако похоже, что на 83-й раз, когда я пытаюсь получить объект документа и назначить его wordDoc, я получаю исключение, указывающее, что «команда не выполнена». Я могу сказать, что это 83-й раз, когда я вхожу в функцию, потому что в моем блоке перехвата я печатаю значение счетчика в окне сообщения сразу после вывода сведений о полученном исключении и прямо перед тем, как я освобождаю использованные ресурсы и завершаю процесс.
Обеспокоенный тем, есть ли в моей системе ограничения, связанные с автоматизацией 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
Который отлично работает. Проверяя свою файловую систему, я вижу файлы размером 150 слов, созданные в «C:\WordTester». Учитывая все эти мои усилия, я действительно озадачен тем, почему первый код, который я написал, застревает на 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
MsgBox("Error : " & Err.Description & " from method: " & Err.Source & " in line " & Err.Erl & ".", vbCritical) MsgBox("Document Objects in memory: " & wordApp.Documents.Count) MsgBox("Counter variable value : " & counter)
, что, я думаю, будет достаточно словесным, возможно? 03.05.2011