Как автоматизировать слово с доступом к базе данных? - PullRequest
0 голосов
/ 25 апреля 2011

Вот что я хочу сделать:

  1. Откройте некоторую форму (возможно, у меня есть запись в vb или c # или что-то), введите некоторую информацию.
  2. Затем форма получает эту информацию и использует ее для получения дополнительной информации из базы данных.
  3. Удаляет всю эту информацию в "поля", которые я упорядочил в текстовом документе (использует логику сравнения строк, которую я могу указать для некоторых полей).
  4. Печатает документ word.

Каков наилучший способ получить такую ​​функциональность?

ОТВЕТ: То, что сработало, было ответом @ Смура ниже, с некоторыми кодовыми модами.

object fileName = Application.StartupPath + "\\" + fileIdent + ".doc";
object readOnly = false;
object isVisible = true;
object missing = System.Reflection.Missing.Value;

// create instance of Word
Microsoft.Office.Interop.Word.ApplicationClass oWordApp = new Microsoft.Office.Interop.Word.ApplicationClass();
oWordApp.DisplayAlerts = Microsoft.Office.Interop.Word.WdAlertLevel.wdAlertsNone;

// create instance of Word document
Microsoft.Office.Interop.Word.Document oWordDoc = oWordApp.Documents.Open(ref fileName, ref missing, ref readOnly, ref readOnly,
                                                                            ref missing, ref missing, ref readOnly, ref missing, ref missing, ref missing, ref missing,
                                                                            ref missing, ref missing, ref missing, ref missing, ref missing);

oWordDoc.Activate();

//Set all the fields in sheet.TopLabel
object oBookMark = "TopDescription";
oWordDoc.Bookmarks.get_Item(ref oBookMark).Range.Text = sheet.TopLabel.JobDescription;

.... Затем после вставки всех закладок:

//Print the sheet
oWordDoc.PrintOut(ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing
                        , ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing);

System.Threading.Thread.Sleep(1000);

//Close the file
//oWordDoc.Close(ref missing, ref missing, ref missing);
                    Object doNotSave = Microsoft.Office.Interop.Word.WdSaveOptions.wdDoNotSaveChanges;
oWordDoc.Close(ref doNotSave, ref missing, ref missing);
oWordApp.Quit(ref doNotSave, ref missing, ref missing);

Marshal.ReleaseComObject(oWordDoc);
Marshal.ReleaseComObject(oWordApp);

Примечание. Необходимо выполнить маршализацию приложения и документа, в противном случае процесс winword.exe будет работать.

1 Ответ

0 голосов
/ 25 апреля 2011

В приложении VB или C # вы можете легко вставить данные в закладки Word и распечатать их, используя пространство имен Microsoft.Office.Interop.Word .Я думаю, что рекомендуется использовать закладки вместо полей.В отношении полей MSDN заявляет: «Это свойство поддерживает инфраструктуру .NET Framework и не предназначено для использования непосредственно из вашего кода».

VB

Dim oWord As Word.Application
Dim oDoc As Word.Document
oWord = CreateObject("Word.Application")
oWord.Visible = False
oDoc = oWord.Documents.Add(_fileName)

oDoc.Bookmarks("Bookmark1").Range.Text = _bookmark1Vals
oDoc.Bookmarks("Bookmark2").Range.Text = _bookmark2Vals
oDoc.Bookmarks("Bookmark3").Range.Text = _bookmark3Vals

oDoc.PrintOut()
oDoc.Close(Word.WdSaveOptions.wdDoNotSaveChanges)
oWord.Application.Quit()

C #

Word.Application oWord = default(Word.Application);
Word.Document oDoc = default(Word.Document);
oWord = Interaction.CreateObject("Word.Application");
oWord.Visible = false;
oDoc = oWord.Documents.Add(_fileName);

oDoc.Bookmarks("Bookmark1").Range.Text = _bookmark1Vals;
oDoc.Bookmarks("Bookmark2").Range.Text = _bookmark2Vals;
oDoc.Bookmarks("Bookmark3").Range.Text = _bookmark3Vals;

oDoc.PrintOut();
oDoc.Close(Word.WdSaveOptions.wdDoNotSaveChanges);
oWord.Application.Quit();
...