Автоматизация слияния в Word с использованием OLE и ODBCВ этой статье показано, как использовать OLE-автоматизации для создания слияния
в Microsoft Office Word 2003 с использованием данных из Visual FoxPro (VFP) для
Таблицы Windows. Ниже приведен код Visual FoxPro для Windows, с помощью Word.Application
модель объектов, которая выполняется с помощью источника данных ODBC для слияния
существующая таблица Visual FoxPro. Этот код можно использовать существующий источник данных
имя (DSN), созданного в диспетчер драйверов ODBC, или можно создать один
Вылет использование вызова API для добавления и используйте имя источника данных. В следующем примере
«Таблицы visual FoxPro» будет создан диспетчер драйверов ODBC DSN и указывает на папку \Samples\Data в домашней папке VFP. Эти пути, наиболее вероятно
Чтобы изменить для отражения пользовательских путей. Примечание Этот код был протестирован с выпуска-1 (SR-1) для Microsoft Office Word 2003 и Word 97.
С помощью предыдущих версий Microsoft Word 97 вызывает несоответствие типов и другие OLE
ошибки. Создать программу и введите следующий код:
***/ Begin program code /***
* Code to create a new data source to a VFP table.
*
* Use the Declare DLL function to prototype the
* SQLConfigDataSource function.
* Using SQLConfigDataSource prevents having to go into
* the ODBC Driver Manager and create the DSN.
***
IF VAL(SUBSTR(VERSION(4),2,1))>7
lthemes=_screen.Themes
_screen.Themes=.f.
ENDIF
DECLARE Integer SQLConfigDataSource in odbccp32.dll Integer, ;
Integer, String, String
***
* Create a string containing the settings appropriate to the driver.
* The following is an example for the Microsoft VFP ODBC driver
* accessing the Customer.dbf file.
***
*** Change the path below to point to the Customer table ***
*** in the \Samples\Data folder. ***
settings="DSN=visual foxpro tables"+chr(0)+;
"Description=VFP ODBC Driver"+chr(0)+;
"SourceDB=e:\vfp7\samples\data"+chr(0)+;
"SourceType=DBF"
=SQLConfigDataSource(0,1,"Microsoft Visual FoxPro Driver",settings)
* NOTE: Ensure there are no spaces on either side of the equal sign (=).
ON ERROR DO errhand WITH ERROR(), MESSAGE(), MESSAGE(1), PROGRAM( ),
LINENO( ) && Trap OLE & other errors.
* Initialize variables passed to Word to create form letter.
intro1="Congratulations! You are one of our best customers since you have ;
purchased $"
intro2=" each month from us. "
intro3="As a result, your maximum order amount has been increased by ;
$2500.00. If you have any questions, please feel free to contact us."
oWord = CREATEOBJECT("Word.Application")
WITH oWord
* Assign values to variables
dsname="e:\VFP7\SAMPLES\DATA\customer.DBF"
wformat=0
wconfirmconv=0
wreadonly=0
wlinktosource=0
waddtofilelist=0
wpassworddoc=""
wpasswordtemp=""
wrevert=0
wprotectdoc=""
wprotecttemp=""
wconn="DSN=visual foxpro tables;uid=;pwd=;"+;
"sourcedb=e:\vfp7\samples\data;sourcetype=dbf"+;
"exclusive=no;backgroundfetch=yes;collate=machine;"
wsqlstatement="SELECT contact,company,title,address,city,;
postalcode,STR(maxordamt,12,2) as maxordamt FROM customer ;
WHERE (customer.maxordamt>$100000)"
.Visible=.T. && Make Word visible.
.WindowState = 2 && Minimize Word.
.Documents.Add && Add new document.
.Selection.InsertParagraphAfter
.ActiveDocument.MailMerge.OpenDataSource;
(dsname,wformat,wconfirmconv,wreadonly,wlinktosource,;
waddtofilelist,wpassworddoc,wpasswordtemp,wrevert,;
wprotectdoc,wprotecttemp,wconn,wsqlstatement)
.ActiveDocument.MailMerge.EditMainDocument
.Selection.InsertDateTime("dddd, MMMM dd, yyyy", 1)
.Selection.MoveRight
.Selection.InsertParagraphAfter
.Selection.MoveDown
.ActiveDocument.MailMerge.Fields.Add;
(oWord.Selection.Range,"contact")
.Selection.InsertParagraphAfter
.Selection.MoveDown
.ActiveDocument.MailMerge.Fields.Add;
(oWord.Selection.Range,"company")
.Selection.InsertParagraphAfter
.Selection.MoveDown
.ActiveDocument.MailMerge.Fields.Add;
(oWord.Selection.Range,"title")
.Selection.InsertParagraphAfter
.Selection.MoveDown
.ActiveDocument.MailMerge.Fields.Add;
(oWord.Selection.Range,"address")
.Selection.InsertAfter(", ")
.Selection.MoveRight
.ActiveDocument.MailMerge.Fields.Add(oWord.Selection.Range,"city")
.Selection.InsertAfter(" ")
.Selection.MoveRight
.ActiveDocument.MailMerge.Fields.Add;
(oWord.Selection.Range,"postalcode")
.Selection.MoveRight
.Selection.InsertParagraphAfter
.Selection.InsertParagraphAfter
.Selection.InsertAfter("Dear ")
.Selection.MoveRight
.ActiveDocument.MailMerge.Fields.Add;
(oWord.Selection.Range,"contact")
.Selection.MoveRight
.Selection.InsertAfter(":")
.Selection.MoveRight
.Selection.InsertParagraphAfter
.Selection.InsertParagraphAfter
.Selection.MoveDown
.Selection.InsertAfter(intro1)
.Selection.MoveRight
.ActiveDocument.MailMerge.Fields.Add;
(oWord.Selection.Range,"maxordamt")
.Selection.MoveRight
.Selection.InsertAfter(intro2)
.Selection.MoveRight
.Selection.InsertAfter(intro3)
.Selection.MoveRight
.Selection.InsertParagraphAfter
.Selection.InsertParagraphAfter
.Selection.MoveDown
.Selection.InsertAfter("Thank you,")
.Selection.MoveRight
.Selection.InsertParagraphAfter
.Selection.InsertParagraphAfter
.Selection.MoveDown
.Selection.Fields.Add(oWord.Selection.Range,-1,"author")
.ActiveDocument.MailMerge.Destination = 0 && new document.
.ActiveDocument.MailMerge.Execute && Run the merge.
nanswer = MESSAGEBOX("Would you like to view the finished ;
document?",36,"Switch to Word")
DO CASE
CASE nanswer = 6
.ActiveWindow.View.Type = 3 && Page layout view.
.Visible = .T.
.Application.Activate && Bring Word forward.
.WindowState = 0 && Word in normal state.
=INKEY(5) && Wait 5 seconds then bring VFP back.
.WindowState = 2 && Then minimize Word.
ENDCASE
nanswer = MESSAGEBOX("Print the document?",36,;
"Print the merged document.")
DO CASE
CASE nanswer = 6 && Yes
.ActiveDocument.PrintOut && Print the merged form letter.
ENDCASE
nanswer = MESSAGEBOX("Save the document?",36,;
"Enter the name to save the merged document.")
DO CASE
CASE nanswer = 6 && Yes
cbaddoc=SPACE(25)
DO WHILE .T.
DEFINE WINDOW getname FROM 1,1 TO 15,60 ;
FONT 'COURIER NEW',10 FLOAT GROW ZOOM
ACTIVATE WINDOW getname
cdoc=SPACE(25)
mquit = SPACE(1)
IF !EMPTY(cbaddoc)
@2,1 SAY "Existing file name: "+cbaddoc COLOR R+/w
ENDIF
@4,1 SAY "Enter a name for the Word document."
@5,1 GET cdoc color b/w VALID emptyChk(cdoc)
@7,25 GET mquit FUNCTION '*T Save' SIZE 2,10
READ CYCLE
CLEAR WINDOW getname
cdoc=ALLTRIM(cdoc)
cpath= .Options.DefaultFilePath(0) && Get Word's
&& default document path.
IF FILE(cpath+"\"+cdoc+".doc")
WAIT WINDOW "Document already exists! Enter another ;
file name." TIME 1
cbaddoc=cdoc
LOOP
ELSE
.ActiveDocument.SaveAs(cdoc)
ENDIF
.Documents.Close(0)
.Application.Quit
EXIT
ENDDO
CASE nanswer = 7 && No
.Documents.Close(0)
.Application.Quit
ENDCASE
ENDWITH
ON ERROR && Restore system error handler.
IF VAL(SUBSTR(VERSION(4),2,1))>7
_screen.Themes=lthemes
endif
PROCEDURE emptychk
PARAMETER pcdoc
IF !EMPTY(pcdoc)
RETURN .T.
ELSE
WAIT WINDOW "Enter a name for the Word Document"
RETURN 0
ENDIF
PROCEDURE errhand
PARAMETER merror, mess, mess1, mprog, mlineno
CLEAR
IF merror=1426
mlineno=LTRIM(STR(LINENO()))
merror=LTRIM(STR(merror))
=MESSAGEBOX("You have an OLE error. Usually this is caused by
quitting Word or canceling out of a dialog box in Word. "+CHR(13)+;
"The error message is "+mess)
ELSE
mlineno=LTRIM(STR(LINENO()))
merror=LTRIM(STR(merror))
=MESSAGEBOX("An error occured on line "+mlineno+;
". The error message is "+mess+" The error number is "+merror)
ENDIF
ON ERROR
RETURN
***/ End program code /***
За дополнительной информацией о получении Word для Windows 97 исправлений 1 (SR-1) щелкните следующий номер статьи базы знаний Майкрософт: 172475
(http://support.microsoft.com/kb/172475/
)
Получение и установка MS Office 97 SR-1 Microsoft Visual Basic для приложений справки (Microsoft Word ' 97); Поиск на «OLE» Код статьи: 181926 - Последнее изменение :: 4 июня 2011 г. - Редакция: 4.0 Информация в данной статье относится к следующим продуктам.- Microsoft Visual FoxPro 3.0 Standard Edition
- Microsoft Visual FoxPro 5.0 Standard Edition
- Microsoft Visual FoxPro 6.0 Professional Edition
- Microsoft Visual FoxPro 7.0 Professional Edition
- Microsoft Visual FoxPro 8.0 Professional Edition
- Microsoft Visual FoxPro 9.0 Professional Edition
| kbautomation kbhowto kbinterop kbmt KB181926 KbMtru |
Переведено с помощью машинного переводаВНИМАНИЕ! Перевод данной статьи был выполнен не человеком, а с помощью программы машинного перевода, разработанной корпорацией Майкрософт. Корпорация Майкрософт предлагает вам статьи, переведенные как людьми, так и средствами машинного перевода, чтобы у вас была возможность ознакомиться со статьями базы знаний KB на родном языке. Однако машинный перевод не всегда идеален. Он может содержать смысловые, синтаксические и грамматические ошибки, подобно тому как иностранец делает ошибки, пытаясь говорить на вашем языке. Корпорация Майкрософт не несет ответственности за неточности, ошибки и возможный ущерб, причиненный в результате неправильного перевода или его использования. Корпорация Майкрософт также часто обновляет средства машинного перевода. Эта статья на английском языке: 181926
(http://support.microsoft.com/kb/181926/en-us/
)
| |