Dieser Artikel beschreibt das Erstellen und bearbeiten ein Microsoft Word-Dokument mithilfe der Automatisierung von Microsoft Visual C++ und Microsoft Foundation Classes (MFC).
In diesem Artikel entspricht eine KB-Artikel, die den gleichen Prozess mithilfe von Microsoft Visual Basic beschreibt. Weitere Informationen zur Automatisierung von Word aus Visual Basic finden Sie im folgenden Artikel der Microsoft Knowledge Base:
220607
(http://support.microsoft.com/kb/220607/
)
Automatisieren von Microsoft Word Seriendruck aus Visual Basic
Die Schritte 1 bis 12 in der folgenden Microsoft Knowledge Base:
178749
(http://support.microsoft.com/kb/178749/
)
Wie Sie ein Automatisierungs-Projekt mit MFC und einer Bibliothek Typ erstellen
Hinweis: Wählen Sie im Schritt 9 den richtigen Typ Bibliothek für die Version von Word Sie automatisieren. Finden Sie auf Suchen im Abschnitt Verweise unten Informationen der Bibliothek richtig eingeben.
Fügen Sie die Include -Anweisung für die Headerdatei, die oben (entweder msword8.h, msword9.h oder msword.h) erstellt wurde in AutoProjectDlg.cpp nach der Include-Anweisung für stdafx.h. Ein Beispiel für Word 97 wäre:
#include "stdafx.h"
#include "msword8.h"
Automatisierungscode der CAutoProjectDlg::OnRun -Methode hinzufügen, sodass es angezeigt wird, wie unten dargestellt,:
void CAutoProjectDlg::OnRun()
{
_Application oWord;
Documents oDocs;
_Document oDoc;
Selection oSelection;
Paragraphs oParagraphs;
Tables oTables;
Table oTable;
Range oRange;
Columns oColumns;
Column oColumn;
Rows oRows;
Row oRow;
Cells oCells;
Cell oCell;
Shading oShading;
Hyperlinks oHyperlinks;
MailMerge oMailMerge;
MailMergeFields oMailMergeFields;
COleVariant vtOptional((long)DISP_E_PARAMNOTFOUND,VT_ERROR),
vtTrue((short)TRUE),
vtFalse((short)FALSE);
CString StrToAdd;
// Create an instance of Word
if (!oWord.CreateDispatch("Word.Application")) {
AfxMessageBox("Word failed to start!");
} else {
// Set the visible property
oWord.SetVisible(TRUE);
// Add a new document
oDocs = oWord.GetDocuments();
oDoc = oDocs.Add(vtOptional,vtOptional);
CreateMailMergeDataFile(&oWord,&oDoc);
// Add the address header
StrToAdd = "State University\r\nElectrical Engineering " \
"Department";
oSelection = oWord.GetSelection();
oParagraphs = oSelection.GetParagraphs();
oParagraphs.SetAlignment(1); // 1 = wdAlignParagraphCenter
oSelection.TypeText(StrToAdd);
InsertLines(&oSelection,4);
oParagraphs.SetAlignment(0); // 0 = wdAlignParagraphLeft
oMailMerge = oDoc.GetMailMerge();
oMailMergeFields = oMailMerge.GetFields();
oMailMergeFields.Add(oSelection.GetRange(),"FirstName");
oSelection.TypeText(" ");
oMailMergeFields.Add(oSelection.GetRange(),"LastName");
oSelection.TypeParagraph();
oMailMergeFields.Add(oSelection.GetRange(),"Address");
oSelection.TypeParagraph();
oMailMergeFields.Add(oSelection.GetRange(),"CityStateZip");
InsertLines(&oSelection,4);
// Set the paragraph alignment to Right justified
oParagraphs = oSelection.GetParagraphs();
oParagraphs.SetAlignment(2); // 2 = wdAlignParagraphRight
// Insert the current date
oSelection.InsertDateTime(COleVariant("dddd, MMMM dd, yyyy"),\
vtFalse,vtOptional);
InsertLines(&oSelection,2);
// Reset the justification to Justify
oParagraphs = oSelection.GetParagraphs();
oParagraphs.SetAlignment(3); // 3 = wdAlignParagraphJustify
oSelection.TypeText("Dear ");
oMailMergeFields.Add(oSelection.GetRange(),"FirstName");
oSelection.TypeText(",");
InsertLines(&oSelection,2);
// Add the body of the message
StrToAdd = "Thank you for your recent request for next " \
"semester's class schedule for the Electrical " \
"Engineering Department. Enclosed with this letter " \
"is a booklet containing all the classes offered " \
"next semester at State University. Several new " \
"classes will be offered in the Electrical " \
"Engineering Department next semester. These " \
"classes are listed below.";
oSelection.TypeText(StrToAdd);
InsertLines(&oSelection,2);
// Add a new table with 9 rows and 4 columns
oRange = oSelection.GetRange();
oTables = oDoc.GetTables();
oTable = oTables.Add(oRange,9,4);
// Set the width of each column
oColumns = oTable.GetColumns();
oColumn = oColumns.Item(1);
oColumn.SetWidth(51.0,0); // 0 = wdAdjustNone
oColumn = oColumns.Item(2);
oColumn.SetWidth(198.0,0); // 0 = wdAdjustNone
oColumn = oColumns.Item(3);
oColumn.SetWidth(100.0,0); // 0 = wdAdjustNone
oColumn = oColumns.Item(4);
oColumn.SetWidth(111.0,0); // 0 = wdAdjustNone
// Set the shading for row 1 to wdGray25
oRows = oTable.GetRows();
oRow = oRows.Item(1);
oCells = oRow.GetCells();
oShading = oCells.GetShading();
oShading.SetBackgroundPatternColorIndex(16); // 16 = wdGray25
// Turn on BOLD for the first row
oRange = oRow.GetRange();
oRange.SetBold(TRUE);
// Set the alignment for cell (1,1) to center
oCell = oTable.Cell(1,1);
oRange = oCell.GetRange();
oParagraphs = oRange.GetParagraphs();
oParagraphs.SetAlignment(1); // 1 = wdAlignParagraphCenter
// Fill in the class schedule data
FillRow(&oTable,1,"Class Number","Class Name",\
"Class Time","Instructor");
FillRow(&oTable,2, "EE220", "Introduction to Electronics II", \
"1:00-2:00 M,W,F", "Dr. Jensen");
FillRow(&oTable,3, "EE230", "Electromagnetic Field Theory I", \
"10:00-11:30 T,T", "Dr. Crump");
FillRow(&oTable,4, "EE300", "Feedback Control Systems", \
"9:00-10:00 M,W,F", "Dr. Murdy");
FillRow(&oTable,5, "EE325", "Advanced Digital Design", \
"9:00-10:30 T,T", "Dr. Alley");
FillRow(&oTable,6, "EE350", "Advanced Communication Systems", \
"9:00-10:30 T,T", "Dr. Taylor");
FillRow(&oTable,7, "EE400", "Advanced Microwave Theory", \
"1:00-2:30 T,T", "Dr. Lee");
FillRow(&oTable,8, "EE450", "Plasma Theory", \
"1:00-2:00 M,W,F", "Dr. Davis");
FillRow(&oTable,9, "EE500", "Principles of VLSI Design", \
"3:00-4:00 M,W,F", "Dr. Ellison");
// Go to the end of the document
oSelection.GoTo(COleVariant((short)3), // 3 = wdGoToLine
COleVariant((short)-1),vtOptional,vtOptional); // -1 = wdGoToLast
InsertLines(&oSelection,2);
// Add closing text
StrToAdd = "For additional information regarding the " \
"Department of Electrical Engineering, " \
"you can visit our website at ";
oSelection.TypeText(StrToAdd);
// Add a hyperlink to the homepage
oHyperlinks = oSelection.GetHyperlinks();
oHyperlinks.Add(oSelection.GetRange(),\
COleVariant("http://www.ee.stateu.tld"),vtOptional);
// Finish adding closing text
StrToAdd = ". Thank you for your interest in the classes " \
"offered in the Department of Electrical " \
"Engineering. If you have any other questions, " \
"please feel free to give us a call at (999) " \
"555-1212.\r\n\r\n" \
"Sincerely,\r\n\r\n" \
"Kathryn M. Hinsch\r\n" \
"Department of Electrical Engineering\r\n";
oSelection.TypeText(StrToAdd);
// Perform mail merge
oMailMerge.SetDestination(0); // 0 = wdSendToNewDocument
oMailMerge.Execute(vtFalse);
// Close the original form document
oDoc.SetSaved(TRUE);
oDoc.Close(vtFalse,vtOptional,vtOptional);
}
}
Fügen Sie den folgenden Code oben in den Code, der in Schritt angegeben ist 3:
void InsertLines(Selection *pSelection, int NumLines)
{
int iCount;
// Insert NumLines blank lines
for (iCount = 1; iCount <= NumLines; iCount++)
pSelection->TypeParagraph();
}
void FillRow(Table *pTable,int Row, CString Text1,
CString Text2, CString Text3, CString Text4)
{
Cell oCell;
Range oRange;
// Insert data into the specific cell
oCell = pTable->Cell(Row,1);
oRange = oCell.GetRange();
oRange.InsertAfter(Text1);
oCell = pTable->Cell(Row,2);
oRange = oCell.GetRange();
oRange.InsertAfter(Text2);
oCell = pTable->Cell(Row,3);
oRange = oCell.GetRange();
oRange.InsertAfter(Text3);
oCell = pTable->Cell(Row,4);
oRange = oCell.GetRange();
oRange.InsertAfter(Text4);
}
void CreateMailMergeDataFile(_Application *pApp,_Document *pDoc)
{
_Document oDataDoc;
MailMerge oMailMerge;
Documents oDocs;
Tables oTables;
Table oTable;
Rows oRows;
int iCount;
COleVariant vtOptional((long)DISP_E_PARAMNOTFOUND,VT_ERROR),
vtFalse((short)FALSE);
// Create a data source at C:\DataDoc.doc containing the field data
oMailMerge = pDoc->GetMailMerge();
oMailMerge.CreateDataSource(COleVariant("C:\\DataDoc.doc"), \
vtOptional,vtOptional, \
COleVariant("FirstName, LastName, Address,CityStateZip"),\
vtOptional, vtOptional,vtOptional,vtOptional,vtOptional);
// Open the file to insert data
oDocs = pApp->GetDocuments();
oDataDoc = oDocs.Open(COleVariant("C:\\DataDoc.doc"), \
vtOptional,vtOptional,vtOptional,vtOptional,\
vtOptional,vtOptional,vtOptional,vtOptional,\
vtOptional);
oTables = oDataDoc.GetTables();
oTable = oTables.Item(1);
oRows = oTable.GetRows();
for (iCount=1; iCount<=2; iCount++)
oRows.Add(vtOptional);
// Fill in the data
FillRow(&oTable, 2, "Steve", "DeBroux", \
"4567 Main Street", "Buffalo, NY 98052");
FillRow(&oTable, 3, "Jan", "Miksovsky", \
"1234 5th Street", "Charlotte, NC 98765");
FillRow(&oTable, 4, "Brian", "Valentine", \
"12348 78th Street Apt. 214", "Lubbock, TX 25874");
// Save and close the file
oDataDoc.Save();
oDataDoc.Close(vtFalse,vtOptional,vtOptional);
}
Kompilieren Sie und führen Sie das Programm. Klicken Sie auf die Schaltfläche Ausführen , und Word gestartet und zeigt einen Beispiel-Buchstaben sollten. Beachten Sie, dass einige Methoden mit Word 2000 und Word 2002 geändert haben. Weitere Informationen zu diesen Änderungen finden Sie unter dem Abschnitt "Informationsquellen".
Hinweise zur Automatisierung von Microsoft Word 2000 und Microsoft Word 2002
Einige Methoden und Eigenschaften haben für Microsoft Word 2000 und Microsoft Word 2002 geändert. Weitere Informationen zum Verwenden des Beispielcodes in diesem Artikel together with der Word-Typ-Bibliothek finden Sie im folgenden Artikel der Microsoft Knowledge Base:
224925
(http://support.microsoft.com/kb/224925/
)
Typbibliotheken für die Office möglicherweise mit neuen Version ändern.
Weitere Informationen zur Office-Automatisierung finden Sie auf der Microsoft Office Development Support-Website unter:
Wichtig: Dieser Artikel wurde maschinell und nicht von einem Menschen übersetzt. Die Microsoft Knowledge Base ist sehr umfangreich und ihre Inhalte werden ständig ergänzt beziehungsweise überarbeitet. Um Ihnen dennoch alle Inhalte auf Deutsch anbieten zu können, werden viele Artikel nicht von Menschen, sondern von Übersetzungsprogrammen übersetzt, die kontinuierlich optimiert werden. Doch noch sind maschinell übersetzte Texte in der Regel nicht perfekt, insbesondere hinsichtlich Grammatik und des Einsatzes von Fremdwörtern sowie Fachbegriffen. Microsoft übernimmt keine Gewähr für die sprachliche Qualität oder die technische Richtigkeit der Übersetzungen und ist nicht für Probleme haftbar, die direkt oder indirekt durch Übersetzungsfehler oder die Verwendung der übersetzten Inhalte durch Kunden entstehen könnten.
Den englischen Originalartikel können Sie über folgenden Link abrufen: 220911
(http://support.microsoft.com/kb/220911/en-us/
)
Microsoft stellt Ihnen die in der Knowledge Base angebotenen Artikel und Informationen als Service-Leistung zur Verfügung. Microsoft übernimmt keinerlei Gewährleistung dafür, dass die angebotenen Artikel und Informationen auch in Ihrer Einsatzumgebung die erwünschten Ergebnisse erzielen. Die Entscheidung darüber, ob und in welcher Form Sie die angebotenen Artikel und Informationen nutzen, liegt daher allein bei Ihnen. Mit Ausnahme der gesetzlichen Haftung für Vorsatz ist jede Haftung von Microsoft im Zusammenhang mit Ihrer Nutzung dieser Artikel oder Informationen ausgeschlossen.
Bitte geben Sie Ihr Feedback zu diesem Artikel ab
Hat dieser Artikel bei der Lösung Ihres Problems geholfen?
Ja
Nein
Ich weiß nicht
Waren die Informationen für Ihr Problem relevant?
Ja
Nein
Wie könnte man den Artikelinhalt verbessern?
Hinweis: Leider können wir keine Kommentare persönlich beantworten.
Danke! Dieses Feedback hilft uns dabei, die Supportartikel weiter zu verbessern. Weitere Informationen finden Sie auf der Hilfe und Support-Startseite.