Estás trabajando sin conexión, espera a que vuelva la conexión a Internet

Cómo automatizar la combinación de correspondencia en Word utilizando OLE y ODBC

IMPORTANTE: Este artículo ha sido traducido por un software de traducción automática de Microsoft (http://support.microsoft.com/gp/mtdetails) en lugar de un traductor humano. Microsoft le ofrece artículos traducidos por un traductor humano y artículos traducidos automáticamente para que tenga acceso en su propio idioma a todos los artículos de nuestra base de conocimientos (Knowledge Base). Sin embargo, los artículos traducidos automáticamente pueden contener errores en el vocabulario, la sintaxis o la gramática, como los que un extranjero podría cometer al hablar el idioma. Microsoft no se hace responsable de cualquier imprecisión, error o daño ocasionado por una mala traducción del contenido o como consecuencia de su utilización por nuestros clientes. Microsoft suele actualizar el software de traducción frecuentemente.

Haga clic aquí para ver el artículo original (en inglés): 181926
Resumen
En este artículo se muestra cómo utilizar la automatización OLE para crear una combinación de correspondencia en Microsoft Office Word 2003 utilizando los datos desde un FoxPro Visual (VFP) para la tabla de Windows.
Más información
A continuación es el código de Visual FoxPro para Windows utilizando el modelo de objetos Word.Application que realiza la combinación de correspondencia utilizando un origen de datos ODBC a una tabla existente de Visual FoxPro. Este código puede utilizar un existente nombre de origen de datos (DSN), creado en el controlador de ODBC, o puede crear uno en la marcha utilizando una llamada de API para agregar y utilizar el DSN. En el ejemplo siguiente, "Tablas de Visual FoxPro" es el DSN creado en el controlador de ODBC y señala a la carpeta \Samples\Data en la carpeta principal VFP. Estas rutas probablemente tendrá que cambiarse para reflejar las rutas de los usuarios.

Nota Este código se ha probado con el Service versión-1 (SR-1) para Word 97 y Microsoft Office Word 2003. Utilizando las versiones anteriores de Word 97, un coinciden los tipos y otros errores OLE.

Crear un programa y escriba el código siguiente:
  ***/ 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))>7lthemes=_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 /***						
Referencias
Para obtener información adicional acerca de cómo obtener la versión de Word para Windows 97 Service 1 (SR-1), haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:
172475Cómo obtener e instalar Microsoft Office 97 SR-1
Microsoft Visual Basic para aplicaciones (Word ' 97); busque en "OLE"

Propiedades

Id. de artículo: 181926 - Última revisión: 02/16/2005 05:38:06 - Revisión: 3.4

Microsoft Visual FoxPro 3.0 Standard Edition, Microsoft Visual FoxPro 3.0b Standard Edition, Microsoft Visual FoxPro 5.0 Standard Edition, Microsoft Visual FoxPro 5.0a, 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

  • kbmt kbautomation kbhowto kbinterop KB181926 KbMtes
Comentarios
crosoft.com/ms.js">