2013-11-14 5 views
1

Я собрал простое приложение C# Winforms, которое запрашивает данные AS400 на основе пользовательских критериев и возвращает результаты в элементе управления ListView. В Button_Click() я сохраняю Заголовки и Данные в файле .txt. Ниже я пытаюсь использовать этот .txt-файл в качестве источника данных для документа Word слияния.Программа зависает в oWord.Documents.Open (oTemplatePath)?

Когда код достигает oWrdDoc = oWord.Documents.Open(oTemplatePath);, программа, похоже, просто замерзает. Ничего не происходит, и я не могу перейти к следующей строке. У кого-нибудь есть идеи о том, что я делаю неправильно?

public void Print(string docLoc, string docSource) 
     { 
      try 
      { 
       Word.Application oWord = new Word.Application(); 
       Word.Document oWrdDoc = new Word.Document(); 
       oWord.Visible = true; 
       Object oTemplatePath = "C:\\Users\NAME\\Desktop\\B-AIAddChgDual10-06-NEW.doc"; 
       oWrdDoc = oWord.Documents.Open(oTemplatePath); 
       Object oMissing = System.Reflection.Missing.Value; 
       oWrdDoc.MailMerge.OpenDataSource("C:\\Users\\NAME\\Desktop\\Test2.txt", oMissing, oMissing, oMissing, 
        oMissing, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing); 
       oWrdDoc.MailMerge.Execute(); 
      } 
      catch (Exception ex) 
      { 
       MessageBox.Show("Source:\t" + ex.Source + "\nMessage: \t" + ex.Message + "\nData:\t" + ex.Data); 
      } 
      finally 
      { 
       // 
      } 
     } 

EDIT: Оказывается, я не имел новый экземпляр Word, набор для Visible = true так, когда экземпляр воспитанного диалог, сообщающий файл был заблокирован для редактирования (по себе ???) это было предлагая мне открыть версию «Только для чтения», которую ранее я не мог видеть, так как она выглядела так, как будто все было заморожено в процессе обработки. Я изменил свой код выше, чтобы отразить изменения.

Любые идеи, почему я заблокирован из своего собственного файла и как предотвратить это?

Это диалоги, которые я получаю после принятия открытой для чтения всего документа (в порядке убывания):

Reult Dialog1 Dialog2 Dialog3 Dialog4 Dialog5 Dialog6 Dialog7

После выбора, как замените поля выше:

Merge Errors

Оригинал Mail Merge Fields:

enter image description here

После личных Подборки: '!'

enter image description here

Как рассказать Применение Слово использовать как разделитель полей в моем коде C#?

Также, как я могу продолжить диалог? Я предполагаю, что получаю каждый из них из-за моего источника данных, который не содержит полей, соответствующих полям, указанным как поля слияния писем?

Вот мой Mail Merge Fields:

-fuldate -sys -memno -name -address1 -address2 -address3 -sal

А вот мои разделителями поля из файла .txt DataSource:

memno! name! addr1! addr2! city! state! zip! o ld_addr1! old_addr2! old_city! OLD_STATE!old_zip

+0

Какая версия MS- Офис, который вы используете? –

+0

2010. Решенная начальная проблема, если вы хотите просмотреть мой EDIT. –

ответ

0

Вы можете установить OpenAndRepair режим для True, а затем откройте документ

Заменить это:

oWrdDoc = oWord.Documents.Open(oTemplatePath); 

С следующее:

oWrdDoc = word.Documents.Open(oTemplatePath, OpenAndRepair: true); 
+0

Оказывается, экземпляр не был виден, поэтому я не видел диалог, спрашивающий меня, хочу ли я открыть копию только для чтения, поскольку документ по какой-то причине был заблокирован. См. Мой EDIT для получения дополнительной информации. –

+0

О, отлично, вы решили это самостоятельно :) Happy Coding :) –

+0

Ну, я решил эту проблему, но если вы видите мой EDIT, у меня есть много надоедливых диалогов :) Как мне закодировать на C#, чтобы сказать ей использовать мой '!' как разделитель полей? –

Смежные вопросы