Como criar uma tabela categorizada no Word 97 ou no Office Word 2003 do Visual FoxPro para Windows 5.0 e versões posteriores

Traduções de Artigos Traduções de Artigos
Artigo: 180901 - Ver produtos para os quais este artigo se aplica.
Este artigo foi arquivado. Este artigo é oferecido "tal como está" e deixará de ser actualizado.
Expandir tudo | Reduzir tudo

Sumário

Este artigo demonstra como criar e formatar uma tabela do Microsoft Word 97 ou do Microsoft Office Word 2003 do Visual FoxPro para Windows 5.0 e posterior utilizando Automatização OLE. A tabela contiver um campo de agrupamento para ID. de venda de instância, estado, empresa ou cliente Neste exemplo agrupa por país ou região. Os dados para o documento do Word irão ser recolhidos com uma consulta SQL para um cursor temporário.

Mais Informação

Para este código funcionar correctamente, o primeiro campo na consulta tem de ser o campo de grupo utilizado no relatório de Word 97. Por exemplo, se for necessário utilizar todos os campos numa tabela para o relatório, mas o campo que está a ser o campo de grupo é não o primeiro campo na tabela de origem, em seguida, emitir uma consulta semelhante ao seguinte:
SELECT state,* FROM Customer GROUP BY state, custid INTO CURSOR category
				
Isto força o campo de grupo, estado neste exemplo, seja o primeiro campo no resultado da consultado.

NOTA: Este código funciona apenas com o Service Release-1 para o Word 97. Utilizar versões anteriores do Word 97 faz com que um "tipo de incompatibilidade" e outros erros OLE.

Criar um programa e introduza o código fornecido abaixo. Quando o código é executado, o utilizador verá dois avisos. Estes pedidos perguntar ao utilizador como o documento do Word devia ser formatado. A primeira mensagem pergunta se o utilizador pretende ter cada agrupamento numa página própria ou não. A segunda pergunta pergunta se o utilizador pretende sublinhados entre as linhas da tabela ou não. Estas perguntas são apenas para visualizar as preferências e para mostrar como o programador pode formatar a tabela no Word com estas e outras preferências.

Segue-se o código de exemplo:
    */ 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 /*
				

Referências

Para obter mais informações sobre como obter o Word para Windows 97 Service Release - 1, consulte o seguinte artigo na base de dados de conhecimento da Microsoft:
172475Como obter e instalar o MS Office 97 SR-1
Ajuda do Visual Basic do Microsoft Word

(c) Microsoft Corporation 1998, todos os direitos reservados. Contribuições de Dean Christopher, Microsoft Corporation

Propriedades

Artigo: 180901 - Última revisão: 22 de fevereiro de 2014 - Revisão: 2.4
A informação contida neste artigo aplica-se 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
  • Microsoft Word 97 Service Pack 1
  • Microsoft Office Word 2003
Palavras-chave: 
kbnosurvey kbarchive kbmt kbcode kbhowto kbinterop KB180901 KbMtpt
Tradução automática
IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine translation ou MT), não tendo sido portanto revisto ou traduzido por humanos. A Microsoft tem artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais. O objectivo é simples: oferecer em Português a totalidade dos artigos existentes na base de dados do suporte. Sabemos no entanto que a tradução automática não é sempre perfeita. Esta pode conter erros de vocabulário, sintaxe ou gramática? erros semelhantes aos que um estrangeiro realiza ao falar em Português. A Microsoft não é responsável por incoerências, erros ou estragos realizados na sequência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza actualizações frequentes ao software de tradução automática (MT). Obrigado.
Clique aqui para ver a versão em Inglês deste artigo: 180901

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