Я использую следующую функцию 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 (на этот раз проект Console), сослался на пространство имен 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-й попытке создать и сохранить документ, и любая помощь будет чрезвычайно признательна.
Спасибо за ваше время,
Jason
Редактировать: вот отредактированная версия 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