Cómo imprimir un campo general mediante Word y Visual FoxPro 9.0 o versiones anteriores

Seleccione idioma Seleccione idioma
Id. de artículo: 175173 - Ver los productos a los que se aplica este artículo
Expandir todo | Contraer todo

Resumen

Cuando se utiliza el Diseñador de informes para imprimir un campo general que tiene texto inserta con un procesador de textos, OLE enlazados objeto del Diseñador de informes tiene que ser tamaño para ser tan grande como la mayor cantidad de texto en los campos generales del control. Esto puede presentar problemas si hay varias páginas de texto en el campo general. El control OLE dependiente se puede ampliar sólo para el alto de una sola página en el Diseñador de informes, que no normalmente es suficiente para imprimir un campo general que tiene más de una página de datos.

Más información

Utilizar un campo memo no sería una manera de almacenar los datos y que se imprimen correctamente en el Diseñador de informes. El problema con este método es que cualquier formato como subrayado, negrita o distintos tamaños de fuente del texto no está permitido en un campo memo. Es necesario un procesador de textos para dar formato a datos de esta manera y almacenarla en un campo general es la única forma para conservar el formato de los datos intactos. En lugar de utilizar el Diseñador de informes para imprimir el campo general, enviarlo a un procesador de textos como Word para Windows permitirá que todos los datos en un campo general que se va a imprimir correctamente.

A continuación son dos ejemplos de código que utiliza Automatización para llamar a Word y, a continuación, utilizar WordBasic o Visual Basic para comandos de aplicaciones (VBA) para pasar los datos a Word. El primer ejemplo sólo funciona con Word 6.0, Word 95 u Office Word 2003 con cualquier versión de Visual FoxPro. El segundo ejemplo sólo funciona con Word 97 y Visual FoxPro versiones 5.0 con Service Pack 2 y 6.0. Si el error "código de error OLE 0x80020005: tipo no coincide." se produce, mire el siguiente artículo en Microsoft Knowledge Base:
169565Tipos no coinciden con la automatización OLE para Word 97
Si se produce en el ejemplo que funciona con Word 6.0 o Word 95 y el siguiente mensaje de error, los datos en el campo general de la tabla se insertan con Word 97:
Código de excepción IDispatch OLE 269 desde Microsoft Word: Microsoft Word Err = 1269 - Word no puede modificar el objeto...
Cambiar el segundo ejemplo utilizando Visual FoxPro 5.0 Service Pack 2 y Word 97 para pasar los datos a Word.

Para utilizar el código como está, necesitará crear una tabla con nombres de campo como los siguientes:
   Field Name      Type                    Width
   ----------      ---------               -----
   FIRST           Character                15
   LAST            Character                15
   ADDRESS         Character                25
   CITY            Character                15
   STATE           Character                 2
   ZIPCODE         Character                 5
   GEN             General                   4
				
después de generar la tabla y agregar algunos datos a cada campo de caracteres, asegúrese de que cada campo general se ha rellenado haciendo doble clic en el campo general para abrirlo y seleccionando el EDIT - opciones de menú INSERT OBJECT. Con el botón "Crear nuevo" seleccionado, seleccione "Microsoft Word Document" en el cuadro de lista "Tipo de objeto" y escriba algunos datos en Word. Cierre Word para guardar los datos en el campo general.

El código siguiente funciona con Visual FoxPro 3.x, 5.x, 6.0, 7.0, 8.0 y 9.0 cuando se utiliza Word 6.0, Word 95 o Office Word 2003. Coloque el código siguiente en un archivo de programa (.prg) y ejecútelo.
   ************* Beginning of code. ****************

   PUBLIC oWord
    oWord = CREATEOBJECT("Word.Basic")
    WITH oWord
       .AppShow        && Makes Word Visible
       .FileNewDefault && Opens up blank Word document

       * The following Insert commands place the FoxPro fields into
       * the Word document. You can change these commands to place
       * any text in the document.
       * Ensure that the table is already open. If only a portion
       * of records are to be printed, change the EOF() to a certain
       * number so that all of the records do not get processed.
       * Example: DO WHILE RECNO() < 10

       GO TOP

       DO WHILE NOT EOF()
          .Insert("Record: "+ALLTRIM(STR(RECNO())))
            && The above line shows the record number.
          .InsertPara
          .InsertPara
          .Insert(ALLTRIM(first)+" "+last)   && Field in the table.
          .InsertPara
          .Insert(address)
          .InsertPara
          .Insert(ALLTRIM(city)+", "+state+"  "+zipcode)
          .InsertPara
          .InsertPara
          .Insert("Contents of the General Field:")
          .InsertPara
          .InsertPara
           KEYBOARD "{ctrl+c} {ctrl+w}" && Copies and closes the general
                                        && field to the clipboard.
           MODIFY GENERAL gen           && This has to be after the
                                        && KEYBOARD command.
          .EditPaste
          .WordLeft(1,1)
          .EditObject("0")
          .EditSelectAll
          .Editcopy
          .FileClose
          .EditClear
          .EditPaste
          .InsertPara
          .InsertPara
          .InsertPara
           SKIP                     && Move the record pointer to
                                    && the next record.
       ENDDO
       .FileSaveAs("c:\mydoc.doc")  && Saves the Word document as
                                    && Mydoc.doc.
       .FilePrint
       .AppClose
    ENDWITH
   

**************** End of code. ****************
				
si utiliza Word 97, Service Pack 2 de Visual FoxPro 5.0 y Visual FoxPro 6.0 son las versiones sólo que este código se ejecuta correctamente. Coloque el código siguiente en un archivo de programa (.prg) y ejecútelo.
   **************** Beginning of code. **********
   PUBLIC oWord
   oWord = CREATEOBJECT("Word.Application")
   WITH oWord
      .visible=.t.       && Makes Word Visible
    .documents.add     && Opens up blank Word document

      * The following Insert commands place the FoxPro fields into
      * the Word document. You can change these commands to place
      * any text in the document.
      * Ensure that the table is already open. If only a portion
      * of records are to be printed, change the EOF() to a certain
      * number so that all of the records do not get processed.
      * Example: DO WHILE RECNO() < 10
      GO TOP
      DO WHILE NOT EOF()

         .Selection.TypeText("Record: "+ALLTRIM(STR(RECNO())))
           && The above line shows the record number.
         .Selection.TypeParagraph
         .Selection.TypeParagraph
         .Selection.TypeText(ALLTRIM(first)+" "+last)&& Field in the table.
         .Selection.TypeParagraph
         .Selection.TypeText(address)
         .Selection.TypeParagraph
         .Selection.TypeText(ALLTRIM(city)+", "+state+"  "+zipcode)
         .Selection.TypeParagraph
         .Selection.TypeParagraph
         .Selection.TypeText("Contents of the General Field:")
         .Selection.TypeParagraph
         .Selection.TypeParagraph
          KEYBOARD "{ctrl+c} {ctrl+w}" && Copies and closes the general
                                       && field to the clipboard.
         MODIFY GENERAL gen           && This has to be after the
                                       && KEYBOARD command.
         .Selection.Paste
         .Selection.MoveLeft
         x = .ActiveDocument.Shapes.Count
         .ActiveDocument.Shapes(x).OLEFormat.Edit
         .Selection.Wholestory
         .Selection.Copy
         .ActiveDocument.Close
         .Selection.Delete
         .Selection.EndKey(6)
         .Selection.Paste
         .Selection.TypeParagraph
         .Selection.TypeParagraph
         .Selection.TypeParagraph
          SKIP                     && Move the record pointer to
      ENDDO
         .ActiveDocument.SaveAs("Mydoc.doc")  && Saves the Word document as
                                              && Mydoc.doc.
         .Application.PrintOut
   ENDWITH

         .Quit

**************** End of code ****************
				

Referencias

Para obtener más información sobre Word Basic y Visual Basic para aplicaciones (VBA), busque en el archivo de Ayuda de Word.

Propiedades

Id. de artículo: 175173 - Última revisión: lunes, 12 de febrero de 2007 - Versión: 4.4
La información de este artículo se refiere a:
  • Microsoft Visual FoxPro 3.0 Standard Edition
  • Microsoft Visual FoxPro 3.0b 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
Palabras clave: 
kbmt kbautomation kbcode kbdesigner kbhowto kbinterop KB175173 KbMtes
Traducción automática
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): 175173

Enviar comentarios

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com