Tento článek ukazuje, jak vytvořit a manipulovat s dokument Microsoft Word použití automatizace z Microsoft Visual C++ a Microsoft Foundation Classes (MFC).
Tento článek parallels článku znalostní báze Microsoft Knowledge Base popisující stejný proces pomocí aplikace Microsoft Visual Basic. Další informace o automatizaci Word z jazyka klepnutím na následující číslo článku databáze Microsoft Knowledge Base:
Jak vytvořit projekt automatizace pomocí MFC a knihovny typů
Poznámka: V kroku 9 zvolte správný typ knihovny pro verzi aplikace Word jsou automatizace. Naleznete v části odkazy níže informace týkající se hledání správně zadejte knihovny.
Přidat výpis zahrnutí záhlaví souboru, který byl vytvořen výše (msword8.h, msword9.h nebo msword.h) v AutoProjectDlg.cpp po příkazu include stdafx.h. Jedná se například pro Word 97:
#include "stdafx.h"
#include "msword8.h"
Přidat kód automatizace metoda CAutoProjectDlg::OnRun, takže se zobrazí, jak je ukázáno níže:
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);
}
}
Vložte následující kód výše v kódu, která je uvedena v kroku 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);
}
Zkompilujte a spusťte program. Klepněte na tlačítko Spustit a měli spustit a zobrazit písmeno ukázkové aplikace. Poznámka: některé metody změnily s Word 2000 a Word 2002. Další informace o těchto změn naleznete v části "Odkazy".
Poznámky pro automatizaci aplikace Word 2000 a Microsoft Word 2002
Pro Microsoft Word 2000 a Microsoft Word 2002 se změnily některé metody a vlastnosti Další informace o způsobu použití ukázkového kódu v tomto článku společně s knihovny typu Word klepnutím na následující číslo článku databáze Microsoft Knowledge Base:
ID článku: 220911 - Poslední aktualizace: 14. května 2007 - Revize: 3.2
Informace v tomto článku jsou určeny pro produkt:
Microsoft Visual C++ 5.0 Enterprise Edition
Microsoft Visual C++ 6.0 Enterprise Edition
Microsoft Visual C++ 5.0 Professional Edition
Microsoft Visual C++ 6.0 Professional Edition
Microsoft Visual C++, 32-bit Learning Edition 6.0
Microsoft Office Word 2007
Microsoft Office Word 2003
Microsoft Word 2002 Standard Edition
Microsoft Word 2000 Standard Edition
Microsoft Word 97 Standard Edition
Klíčová slova:
kbmt kbautomation kbhowto KB220911 KbMtcs
Strojově přeložený článek
Důležité: Tento článek byl přeložen pomocí software společnosti Microsoft na strojový překlad, ne profesionálním překladatelem. Společnost Microsoft nabízí jak články přeložené překladatelem, tak články přeložené pomocí software na strojový překlad, takže všechny články ve Znalostní databázi (Knowledge Base) jsou dostupné v češtině. Překlad pomocí software na strojový překlad ale není bohužel vždy dokonalý. Obsahuje chyby ve skloňování slov, skladbě vět, nebo gramatice, podobně jako když cizinci dělají chyby při mluvení v češtině. Společnost Microsoft není právně zodpovědná za nepřesnosti, chyby nebo škody vzniklé chybami v překladu, nebo při použití nepřesně přeložených instrukcí v článku zákazníkem. Společnost Microsoft aktualizuje software na strojový překlad, aby byl počet chyb omezen na minimum.