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

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
Este artículo se ha archivado. Se ofrece "tal cual" y no se volverá a actualizar.
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 categoryendif   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

Advertencia: este artículo se tradujo automáticamente

Propiedades

Id. de artículo: 180901 - Última revisión: 02/22/2014 15:08:50 - Revisión: 2.4

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

  • kbnosurvey kbarchive kbmt kbcode kbhowto kbinterop KB180901 KbMtes
Comentarios