Cómo crear una tabla con categorías en Word 97 o en Office Word 2003 desde Visual FoxPro para Windows 5.0 y versiones posteriores

Seleccione idioma Seleccione idioma
Id. de artículo: 180901 - Ver los productos a los que se aplica este artículo
Este artículo se ha archivado. Se ofrece "tal cual" y no se volverá a actualizar.
Expandir todo | Contraer todo

Resumen

En este artículo muestra cómo crear y dar formato a una tabla en Microsoft Word 97 o Microsoft Office Word 2003 de Visual FoxPro para Windows 5.0 y posterior utilizando automatización OLE. La tabla contiene un campo de agrupamiento para el Id. de venta de instancia, un estado, compañía o cliente En este ejemplo se agrupa por país o región. Los datos para el documento de Word se se recopila mediante una consulta SQL en un cursor temporal.

Más información

Para que este código funcione correctamente, el primer campo en la consulta debe ser el campo de grupo utilizado en el informe de Word 97. Por ejemplo, si es necesario utilizar todos los campos de una tabla para el informe, pero el campo que va a ser el campo de grupo es no el primer campo de la tabla de origen, a continuación, emitir una consulta similar a ésta:
SELECT state,* FROM Customer GROUP BY state, custid INTO CURSOR category
				
fuerza el el campo de grupo, el estado en este ejemplo, para ser el primer campo en el resultado consultado.

Nota: Este código sólo funciona con el Service Release-1 para Word 97. Utilizando las versiones anteriores de Word 97, un "coinciden los tipos" y otros errores OLE.

Crear un programa y escriba el código que se indican a continuación. Cuando se ejecuta el código, el usuario verá dos preguntas. Estas preguntas preguntar al usuario dar formato el documento de Word. La primera pregunta si el usuario desea tener cada agrupar en su propia página o no. La segunda pregunta pide al usuario si desea subrayado entre las filas de la tabla o no. Estas preguntas son simplemente para ver las preferencias y para mostrar cómo el programador puede formato a la tabla de Word con estas y otras preferencias.

Aquí es el código de ejemplo:
    */ Begin program code /*
       CLEAR
       SET TALK OFF
       SET CONSOLE OFF
       ctempfield = ""               && Variable to hold group category.
       headings_added = .F.
       newgrouppage = .F.

   * Make sure the FIRST field in the SELECT is the field the report
   * is categorized by. The Customer table is located in the
   * \VFP\Samples\Data folder. In Visual FoxPro 6.0, the Customer table is
   * in the Microsoft Visual Studio\Common\Samples\Data folder.
   
    ** We toggle the value of SET ENGINEBEHAVIOR in VFP 8.0 and
    ** 9.0 to allow this SELECT-SQL command to function. 
    **  For more information on the SET ENGIENBEHAVIOR command,
    ** see the VFP Help file. 

   IF "8.0"$VERSION() OR "9.0"$VERSION()
x=SET("enginebehavior")
SET ENGINEBEHAVIOR 70
   SELECT country, company, contact, title,maxordamt,phone;
   FROM HOME()+"Samples\Data\testdata!customer" GROUP BY;
      country,cust_id INTO CURSOR category
      SET ENGINEBEHAVIOR x
      ELSE
      SELECT country, company, contact, title,maxordamt,phone;
   FROM HOME()+"Samples\Data\testdata!customer" GROUP BY;
      country,cust_id INTO CURSOR category
endif

   IF _TALLY > 0
      oWord = CREATEOBJECT("Word.Application")
      oWord.Documents.Add
      owRange = oWord.Activedocument.Range(0,0)
      numcols = FCOUNT()-1   && Get number of fields for detail section
      oWord.Activedocument.Tables.Add(owRange, 1, numcols)

      * First prompt, separate pages for each group.
      nanswer = messagebox("Put each group on a new page?",36,;
         "Sepatate Pages")
      DO CASE
         CASE nanswer = 6         && Yes
            newgrouppage = .T.
         CASE nanswer = 7         && No
            headings_added = .F.
      ENDCASE

      WAIT WINDOW "Please wait while the data is formatted in Word.";
         + CHR(13)+"This may take several minutes..." NOWAIT

      DO WHILE !EOF()
         ctempfield = EVAL(FIELD(1)) && Set 1st field in table as category
         WITH oWord
            .Selection.Font.Reset
            .Selection.TypeText(EVAL(FIELD(1)))
            .Selection.SelectRow
            .Selection.ParagraphFormat.Alignment = 1
            .Selection.Font.Name = "Arial"
            .Selection.Font.Size = 16
            .Selection.Font.Bold = .T.
            .Selection.SelectRow
            .Selection.Cells.Merge
            .Selection.MoveRight(12)
            .Selection.Cells.Split(1,numcols)

            IF NOT headings_added && Put at least one heading in document
               .Selection.MoveRight(12)
               FOR i = 2 TO FCOUNT()
                  .Selection.Font.Italic = .T.
                  .Selection.ParagraphFormat.Alignment = 1
                  .Selection.Font.Name = "Times New Roman"
                  .Selection.Font.Size = 8
                  .Selection.TypeText((FIELD(i)))
                  .Selection.MoveRight(12)
                  headings_added = .T.
               ENDFOR
            ENDIF

            FOR i = 2 TO FCOUNT()
               curfield = EVAL(FIELD(i))
   * Check data type. Does not check Double, Float, Integer, General, Memo.
               IF TYPE((FIELD(i)))<>"C"
               DO CASE
                  CASE TYPE((FIELD(i))) = "D"         && Date field
                     curfield = DTOC((FIELD(i)))
                  CASE TYPE((FIELD(i))) = "N"         && Numerical
                     curfield = STR((FIELD(i)))
                  CASE TYPE((FIELD(i))) = "Y"         && Currency
                     curfield = STR(EVAL(FIELD(i)),8,2)
                  CASE TYPE((FIELD(i))) = "L"         && Logical
                     IF curfield
                        curfield = "True"
                     ELSE
                        curfield = "False"
                     ENDIF
                  CASE TYPE((FIELD(i))) = "T"         && DateTime
                     curfield = TTOC(EVAL(FIELD(i)))
                  ENDCASE
                  .Selection.Font.Reset
                  .Selection.TypeText(curfield)
               ELSE
                  .Selection.Font.Reset
                  .Selection.TypeText(curfield)
               ENDIF
               .Selection.Font.Reset
               .Selection.MoveRight(12)
            ENDFOR
            SKIP
         ENDWITH

         DO WHILE ctempfield = EVAL(FIELD(1))   && Get other like records.
            WITH oWord
               FOR i = 2 TO FCOUNT()
                  curfield = EVAL(FIELD(i))
                  IF TYPE((FIELD(i)))<>"C"
                     DO CASE
                     CASE TYPE((FIELD(i))) = "D"
                        curfield = DTOC((FIELD(i)))
                     CASE TYPE((FIELD(i))) = "N"
                        curfield = STR((FIELD(i)))
                     CASE TYPE((FIELD(i))) = "Y"
                        curfield = STR(EVAL(FIELD(i)),8,2)
                     CASE TYPE((FIELD(i))) = "L"
                        IF curfield
                           curfield = "True"
                        ELSE
                           curfield = "False"
                        ENDIF
                     CASE TYPE((FIELD(i))) = "T"
                        curfield = TTOC(EVAL(FIELD(i)))
                     ENDCASE
                     .Selection.TypeText(curfield)
                  ELSE
                     .Selection.TypeText(curfield)
                  ENDIF
                     .Selection.MoveRight(12)
                  ENDFOR
            ENDWITH
            SKIP
         ENDDO

         IF RECNO() > RECCOUNT()   && Prevents an empty table/cells.
            EXIT
         ELSE
            IF newgrouppage
               headings_added = .F.    && False: add headings to each page.
               oWord.Selection.InsertBreak(2)  && Page break each category.
            ENDIF
         ENDIF
      ENDDO

      oWord.Selection.SelectRow   && Ensures no extra rows in the table.
      oWord.Selection.Rows.Delete

      * This section underlines or turns off all lines in the table.
      nanswer = MESSAGEBOX("Turn off underlines Y/N",36,;
         "No underlines in the table?")
      DO CASE
      CASE nanswer = 6       && Yes, turn off all underlines.
         WAIT WINDOW 'Formating table with no underlines in the table.';
            NOWAIT
         WITH oWord
            For Each aTable In .ActiveDocument.Tables && Format all tables.
               aTable.Borders(-1).LineStyle = 0         && Top border.
               aTable.Borders(-2).LineStyle = 0         && Left
               aTable.Borders(-3).LineStyle = 0         && Bottom
               aTable.Borders(-4).LineStyle = 0         && Right
               aTable.Borders(-5).LineStyle = 0         && Horizontal
               aTable.Borders(-6).LineStyle = 0         && Vertical
               aTable.Borders.Shadow = 0
            ENDFOR
         ENDWITH
      CASE nanswer = 7         && Number just underlines.
         WITH oWord
            WAIT WINDOW 'Formating table with underlines between records.';
               NOWAIT
            For Each aTable In .ActiveDocument.Tables && Format each table.
               aTable.Borders(-1).LineStyle = 0         && Top border
               aTable.Borders(-2).LineStyle = 0         && Left
               aTable.Borders(-3).LineStyle = 1         && Bottom
               aTable.Borders(-4).LineStyle = 0         && Right
               aTable.Borders(-5).LineStyle = 1         && Horizontal
               aTable.Borders(-6).LineStyle = 0         && Vertical
               aTable.Borders.Shadow = 0
            ENDFOR
         ENDWITH
         oWord.ActiveWindow.View.TableGridlines = .F. && No table gridlines
      ENDCASE

   * Get the number of pages in the Word report. The code adds the report
   * headings to the document header when the user chooses not to have the
   * report categories print on separate pages. Makes viewing groups
   * headings easier on other pages.
      numpages = oWord.ActiveDocument.ComputeStatistics(2)
      IF numpages > 1 AND NOT newgrouppage
         WITH oWord
            .Selection.MoveDown
            .ActiveWindow.ActivePane.View.Type = 3 && Put Word in Page view
            .ActiveWindow.ActivePane.View.SeekView = 9      && Open header.
            .Selection.ParagraphFormat.TabStops.ClearAll   && Clear tabs.

            * Printed header width is computed by subtracting margins
            * from page width. The margins are divided by 72. Word stores
            * these values as points; i.e. 72points/inch.
            pagewidth = 8.5-(.ActiveDocument.PageSetup.RightMargin+;
            .ActiveDocument.PageSetup.LeftMargin)/72
            tabspace = (pagewidth/(numcols))*72 && Convert inches to points
            tabstops = tabspace
            FOR i = 2 TO FCOUNT()
               .Selection.Font.Italic = .T.   && Format heading captions.
               .Selection.ParagraphFormat.Alignment = 1
               .Selection.Font.Name = "Times New Roman"
               .Selection.Font.Size = 8
               .Selection.TypeText((FIELD(i)))
               .Selection.TypeText(chr(9)) && Tab to set the next heading.
               .Selection.ParagraphFormat.TabStops.Add(tabstops) && Tab
               tabstops = tabstops+tabspace
            ENDFOR
         ENDWITH
      ENDIF
      WITH oWord
         .ActiveWindow.View.Type = 3 && Switch to page view. Normal view=1
         .ActiveWindow.ActivePane.View.SeekView = 0 && Open main document.
         .Selection.Homekey(6)               && Go to top of document.
         .Visible = .T.                     && Make Word visible.
         .Application.Activate               && Bring Word forward.
         .WindowState = 0    && Show Word in normal state. Maximized=1
         .ActiveWindow.ActivePane.View.ShowAll = 0 && No nonprinting items.
      ENDWITH
   ELSE
      =MESSAGEBOX("There were no records in the query.",16,;
         "Empty Query")
   ENDIF
   */ End program code /*
				

Referencias

Para obtener más información acerca de cómo obtener Word para Windows 97 Service Release - 1, consulte en contacto con el siguiente artículo en Microsoft Knowledge Base:
172475Cómo obtener y instalar MS Office 97 SR-1
Ayuda de Visual Basic de Microsoft Word

(c) 1998 Microsoft Corporation, reservados todos los derechos. Contribuciones por Dean Christopher, Microsoft Corporation

Propiedades

Id. de artículo: 180901 - Última revisión: sábado, 22 de febrero de 2014 - Versión: 2.4
La información de este artículo se refiere a:
  • 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
  • Service Pack 1 de Microsoft Word 97
  • Microsoft Office Word 2003
Palabras clave: 
kbnosurvey kbarchive kbmt kbcode kbhowto kbinterop KB180901 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): 180901

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