Ввод значений в существующую таблицу в MS Word

#c# #ms-word

#c# #ms-word

Вопрос:

Цель моей программы — создать копию шаблона Word doc, который содержит таблицу внутри него, и ввести текстовые данные в ячейки указанной таблицы. Моя проблема в том, что всякий раз, когда я запускаю программу, она не вводит текст в ячейки, я искал в Интернете, и, насколько мне известно, не должно быть ничего плохого в том, как я ввожу текст в ячейки.

Вот соответствующий код.

 try
{
  //create filepaths for template and the soon to be created file
  object oMissing = System.Reflection.Missing.Value;
  object notReadOnly = false;
  object oldDocPath = (object)@"Desktop:testDoc.docx";
  object newDocPath = (object)@"Desktop:testDoc2.docx";

  //start up word doc
  Word.Application app = new Word.Application();

  //open template in word
  Word.Document oldDoc = app.Documents.Open(ref oldDocPath, 
  ref oMissing, ref notReadOnly, ref oMissing, ref oMissing, ref oMissing,
  ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing,
  ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing);

  //save template under new name to make a copy
  app.ActiveDocument.SaveAs2(ref newDocPath, 
  ref oMissing, ref notReadOnly, ref oMissing, ref oMissing, ref oMissing,
  ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing,
  ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing);

  //close template and open the new document
  object doNotSaveChanges = Word.WdSaveOptions.wdDoNotSaveChanges;
  ((_Document)oldDoc).Close(ref doNotSaveChanges, ref oMissing, ref oMissing);
  Marshal.FinalReleaseComObject(oldDoc);
  ((_Application)app).Quit(ref oMissing, ref oMissing, ref oMissing);
  Marshal.FinalReleaseComObject(app);
  Word._Application oWord;
  Word._Document oDoc;
  oWord = new Word.Application();
  oDoc = oWord.Documents.Add(ref newDocPath, ref oMissing, ref oMissing, ref oMissing);

  //populate the table
  Word.Table tbl = oDoc.Tables[1];
  tbl.Cell(1,1).Range.Text = "Test";

  //Close the last Word doc
  ((_Document)oDoc).Close(ref doNotSaveChanges, ref oMissing, ref oMissing);
  Marshal.FinalReleaseComObject(oDoc);
  ((_Application)oWord).Quit(ref oMissing, ref oMissing, ref oMissing);
  Marshal.FinalReleaseComObject(oWord);
}
catch( Exception ex )
{
  MessageBox.Show("Exception Caught: "   ex.Message);
}
  

Хорошо; лучшее предположение, которое у меня есть, это то, что tbl.Cell(1,1).Range.Text = «Test»; вероятно, это неправильно интегрируется с тем, как я изложил остальной код, поэтому любая помощь будет оценена

Ответ №1:

Некоторые наблюдения:

  • Если вы укажете wdDoNotSaveChanges при закрытии, вы не увидите «Тест» в сохраненном документе. Вы должны увидеть это в открытом документе непосредственно перед закрытием, если отображается открытый документ (возможно, вам потребуется сделать окно и приложение видимыми, чтобы проверить это).
  • Когда вы используете .Добавить для добавления в коллекцию документов Word обработает документ (в данном случае testDoc2.docx в качестве шаблона и создаст другой новый документ, которому нужно будет присвоить имя перед сохранением его на диск. Таким образом, даже если бы изменения сохранялись, они не были бы testDoc2.docx . Если вы хотите открыть документ и поработать над ним, используйте .Открыть вместо .Добавить

Еще одна вещь.

Когда вы открываете свой «шаблон» и сохраняете его как новый документ, у вас уже действительно есть документ и объект приложения, с которым вам нужно работать, т. Е. Если вам не нужно закрыть и выйти из существующего приложения. по какой-то причине.

Комментарии:

1. По общему признанию, я должен был сохранить изменения и, должно быть, забыл их изменить. Спасибо за вашу помощь, я внес некоторые изменения на основе ваших отзывов, и, похоже, теперь все работает нормально.