No funciona en xHarbour porque?
odoc:PageSetup:TopMargin := oWord:CentimetersToPoints( 2.5 )
Error:
Erro! A entrada de AutoTexto não foi definida.
¡Error! La entrada de Autotexto no se ha definido.
Que falta? Como defino Autotexto ?
Compila bien con Harbour y xharbour:
- Code: Select all Expand view RUN
#include "FiveWin.ch"
/* ****************************************************************************
GERAR ARQUIVOS EM WORD USANDO HARBOUR
por cjp
Segue meu código completo, exatamente como retirei do post acima:
hbmk2 -run TstHb2Word.prg hbwin.hbc
hbmk2: Processando opções do ambiente: -comp=mingw
Harbour 3.4.0dev () (2017-12-20 13:40)
Copyright (c) 1999-2017, https://github.com/vszakats/harbour-core/
******************************************************************************/
/* TRY / CATCH / FINALLY / END */
#ifdef __XHARBOUR__
// nada a fazer.
#else // ?? En fivewin? creo que no necesite.
// #xcommand TRY => BEGIN SEQUENCE WITH __BreakBlock()
// #xcommand CATCH [<!oErr!>] => RECOVER [USING <oErr>] <-oErr->
// #xcommand FINALLY => ALWAYS
#endif
// Enumeração WdOrientation (Word)
//
// Especifica uma orientação do layout de página.
// Nome Valor Descrição
//
#define wdOrientLandscape 1 // Orientação em paisagem.
#define wdOrientPortrait 0 // Orientação em retrato.
// Enumeração WdPaperSize (Word)
//
// Especifica do layout de página.
// Nome Valor Descrição
//
#define wdPaper10x14 0 // 10 inches wide, 14 inches long.
#define wdPaper11x17 1 // Legal 11 inches wide, 17 inches long.
#define wdPaperA3 6 // A3 dimensions.
#define wdPaperA4 7 // A4 dimensions.
#define wdPaperA4Small 8 // Small A4 dimensions.
#define wdPaperA5 9 // A5 dimensions.
#define wdPaperB4 10 // B4 dimensions.
#define wdPaperB5 11 // B5 dimensions.
#define wdPaperCSheet 12 // C sheet dimensions.
#define wdPaperCustom 41 // Custom paper size.
#define wdPaperDSheet 13 // D sheet dimensions.
#define wdPaperEnvelope10 25 // Legal envelope, size 10.
#define wdPaperEnvelope11 26 // Envelope, size 11.
#define wdPaperEnvelope12 27 // Envelope, size 12.
#define wdPaperEnvelope14 28 // Envelope, size 14.
#define wdPaperEnvelope9 24 // Envelope, size 9.
#define wdPaperEnvelopeB4 29 // B4 envelope.
#define wdPaperEnvelopeB5 30 // B5 envelope.
#define wdPaperEnvelopeB6 31 // B6 envelope.
#define wdPaperEnvelopeC3 32 // C3 envelope.
#define wdPaperEnvelopeC4 33 // C4 envelope.
#define wdPaperEnvelopeC5 34 // C5 envelope.
#define wdPaperEnvelopeC6 35 // C6 envelope.
#define wdPaperEnvelopeC65 36 // C65 envelope.
#define wdPaperEnvelopeDL 37 // DL envelope.
#define wdPaperEnvelopeItaly 38 // Italian envelope.
#define wdPaperEnvelopeMonarch 39 // Monarch envelope.
#define wdPaperEnvelopePersonal 40 // Personal envelope.
#define wdPaperESheet 14 // E sheet dimensions.
#define wdPaperExecutive 5 // Executive dimensions.
#define wdPaperFanfoldLegalGerman 15 // German legal fanfold dimensions.
#define wdPaperFanfoldStdGerman 16 // German standard fanfold dimensions.
#define wdPaperFanfoldUS 17 // United States fanfold dimensions.
#define wdPaperFolio 18 // Folio dimensions.
#define wdPaperLedger 19 // Ledger dimensions.
#define wdPaperLegal 4 // Legal dimensions.
#define wdPaperLetter 2 // Letter dimensions.
#define wdPaperLetterSmall 3 // Small letter dimensions.
#define wdPaperNote 20 // Note dimensions.
#define wdPaperQuarto 21 // Quarto dimensions.
#define wdPaperStatement 22 // Statement dimensions.
#define wdPaperTabloid 23 // Tabloid dimensions.
// Enumeração WdSeekView (Word)
//
// Especifica o elemento do documetno a ser exibido no modo de exibição de layout de impressão.
// Nome Valor Descrição
//
#define wdSeekCurrentPageFooter 10 // O rodapé da página atual.
#define wdSeekCurrentPageHeader 9 // O cabeçalho da página atual.
#define wdSeekEndnotes 8 // Notas de fim.
#define wdSeekEvenPagesFooter 6 // O rodapé das páginas pares.
#define wdSeekEvenPagesHeader 3 // O cabeçalho das páginas pares.
#define wdSeekFirstPageFooter 5 // O rodapé da primeira página.
#define wdSeekFirstPageHeader 2 // O cabeçalho da primeira página.
#define wdSeekFootnotes 7 // Rodapés.
#define wdSeekMainDocument 0 // O documento principal.
#define wdSeekPrimaryFooter 4 // O rodapé primário.
#define wdSeekPrimaryHeader 1 // O cabeçalho primário.
// Enumeração WdParagraphAlignment (Word)
//
// Especifica o alinhamento de um parágrafo.
// Nome Valor Descrição
//
#define wdAlignParagraphCenter 1 // Alinhamento centralizado.
#define wdAlignParagraphDistribute 4 // Os caracteres do parágrafo são distribuÃdos para preencher toda a largura do parágrafo.
#define wdAlignParagraphJustify 3 // Totalmente justificado.
#define wdAlignParagraphJustifyHi 7 // Justificado com uma alta taxa de compactação do caractere.
#define wdAlignParagraphJustifyLow 8 // Justificado com uma baixa taxa de compactação do caractere.
#define wdAlignParagraphJustifyMed 5 // Justificado com uma taxa média de compactação do caractere.
#define wdAlignParagraphLeft 0 // Alinhamento à esquerda.
#define wdAlignParagraphRight 2 // Alinhamento à direita.
#define wdAlignParagraphThaiJustify 9 // Justificado de acordo com o layout de formatação tailandês.
// Enumeração WdConstants (Word)
//
// Esta enumeração agrupa as constantes utilizadas com vários métodos do Microsoft Word.
// Nome Valor Descrição
//
#define wdAutoPosition 0 // Representa o valor Auto da definição especificada.
#define wdBackward -1073741823 // Indica que a seleção será estendida para trás usando o método MoveStartUntil ou MoveStartWhile do objeto Range ou Selection.
#define wdCreatorCode 1297307460 // Representa o código do criador dos objetos criados pelo Microsoft Word.
#define wdFirst 1 // Representa o primeiro item em uma coleção.
#define wdForward 1073741823 // Indica que a seleção será estendida sequencial usando o método MoveStartUntil ou MoveStartWhile do objeto Range ou Selection.
#define wdToggle 9999998 // Alterna um valor de propriedade.
#define wdUndefined 9999999 // Representa um valor não definido.
// Enumeração WdLineStyle (Word)
//
// Especifica o estilo de linha da borda de um objeto.
// Nome Valor Descrição
//
#define wdLineStyleDashDot 5 // Um travessão seguido por um ponto.
#define wdLineStyleDashDotDot 6 // Um travessão seguido por dois pontos.
#define wdLineStyleDashDotStroked 20 // Um travessão seguido por um traço pontilhado e, em seguida, se tornando uma borda semelhante a um poste listrado.
#define wdLineStyleDashLargeGap 4 // Um travessão seguido por uma grande lacuna.
#define wdLineStyleDashSmallGap 3 // Um travessão seguido por uma pequena lacuna.
#define wdLineStyleDot 2 // Pontos.
#define wdLineStyleDouble 7 // Linhas duplas sólidas.
#define wdLineStyleDoubleWavy 19 // Linhas duplas e onduladas sólidas.
#define wdLineStyleEmboss3D 21 // A borda parece ter uma aparência em alto relevo 3D.
#define wdLineStyleEngrave3D 22 // A borda parece ter uma aparência de baixo relevo 3D.
#define wdLineStyleInset 24 // A borda parece estar em baixo-relevo.
#define wdLineStyleNone 0 // Sem borda.
#define wdLineStyleOutset 23 // A borda parece estar em alto relevo.
#define wdLineStyleSingle 1 // Uma única linha sólida.
#define wdLineStyleSingleWavy 18 // Uma única linha ondulada e sólida.
#define wdLineStyleThickThinLargeGap 16 // Uma única linha interna sólida e espessa envolta por uma única linha sólida e fina com uma grande lacuna entre elas.
#define wdLineStyleThickThinMedGap 13 // Uma única linha interna sólida e espessa envolta por uma única linha sólida e fina com uma lacuna média entre elas.
#define wdLineStyleThickThinSmallGap 10 // Uma única linha interna sólida e espessa envolta por uma única linha sólida e fina com uma pequena lacuna entre elas.
#define wdLineStyleThinThickLargeGap 15 // Uma única linha interna sólida e fina envolta por uma única linha sólida e espesssa com uma grande lacuna entre elas.
#define wdLineStyleThinThickMedGap 12 // Uma única linha interna sólida e fina envolta por uma única linha sólida e espessa com uma lacuna média entre elas.
#define wdLineStyleThinThickSmallGap 9 // Uma única linha interna sólida e fina envolta por uma única linha sólida e espessa com uma pequena lacuna entre elas.
#define wdLineStyleThinThickThinLargeGap 17 // Uma única linha interna sólida e fina envolta por uma única linha sólida e espessa envolta por uma única linha sólida e fina com uma grande lacuna entre todas as linhas☺.
#define wdLineStyleThinThickThinMedGap 14 // Uma única linha interna sólida e fina envolta por uma única linha sólida e espessa envolta por uma única linha sólida e fina com uma lacuna média entre todas as linhas?.
#define wdLineStyleThinThickThinSmallGap 11 // Uma única linha interna sólida e fina envolta por uma única linha sólida e espessa envolta por uma única linha sólida e fina com uma pequena lacuna entre todas as linhas?.
#define wdLineStyleTriple 8 // Três linhas sólidas e finas.
// Enumeração WdCellVerticalAlignment (Word)
//
// Define o alinhamento vertical do texto em uma ou mais células de uma tabela.
// Nome Valor Descrição
//
#define wdCellAlignVerticalBottom 3 // O texto é alinhado à borda inferior da célula.
#define wdCellAlignVerticalCenter 1 // O texto é alinhado ao centro da célula.
#define wdCellAlignVerticalTop 0 // O texto é alinhado à borda superior da célula.
// Enumeração WdUnits (Word)
//
// Especifica uma unidade de medida a ser utilizada.
// Nome Valor Descrição
//
#define wdCell 12 // Uma célula.
#define wdCharacter 1 // Um caractere.
#define wdCharacterFormatting 13 // Formatação do caractere.
#define wdColumn 9 // Uma coluna.
#define wdItem 16 // O item selecionado.
#define wdLine 5 // Uma linha.
#define wdParagraph 4 // Um parágrafo.
#define wdParagraphFormatting 14 // Formatação do parágrafo.
#define wdRow 10 // Uma linha.
#define wdScreen 7 // As dimensões da tela.
#define wdSection 8 // Uma seção.
#define wdSentence 3 // Uma frase.
#define wdStory 6 // Uma história.
#define wdTable 15 // Uma tabela.
#define Essa 11 // Uma janela.
#define wdWord 2 // Uma palavra.
// Enumeração WdCollapseDirection
//
#define wdCollapseEnd 0 // Collapse the range to the ending point.
#define wdCollapseStart 1 // Collapse the range to the starting point.
// Enumeração WdFieldType (Word)
//
// Especifica um campo do Microsoft Word. A menos que seja especificado de outra forma, os tipos de campo descritos nesta enumeração podem ser adicionados interativamente a um documento do Word utilizando a caixa de diálogo Campo. Consulte a Ajuda do Word para obter mais informações sobre os códigos de campo especÃficos.
// Nome Valor Descrição
#define wdFieldAddin 81 // Campo do suplemento. Não disponÃvel na caixa de diálogo Campo. Utilizado para armazenar dados ocultos da interface do usuário.
#define wdFieldAddressBlock 93 // Campo AddressBlock.
#define wdFieldAdvance 84 // Campo Advance.
#define wdFieldAsk 38 // Campo Ask.
#define wdFieldAuthor 17 // Campo Author.
#define wdFieldAutoNum 54 // Campo AutoNum.
#define wdFieldAutoNumLegal 53 // Campo AutoNumLgl.
#define wdFieldAutoNumOutline 52 // Campo AutoNumOut.
#define wdFieldAutoText 79 // Campo AutoText.
#define wdFieldAutoTextList 89 // Campo AutoTextList.
#define wdFieldBarCode 63 // Campo BarCode.
#define wdFieldBidiOutline 97 // Campo BidiOutline.
#define wdFieldComments 92 // Campo Comments.
#define wdFieldCompare 96 // Campo Compare.
#define wdFieldCreateDate 19 // Campo CreateDate.
#define wdFieldData 80 // Campo Data.
#define wdFieldDatabase 21 // Campo Database.
#define wdFieldDate 40 // Campo Date.
#define wdFieldDDE 78 // Campo DDE. Não está mais disponÃvel na caixa de diálogo Campo, mas oferece suporte a documentos criados em versões anteriores do Word.
#define wdFieldDDEAuto 31 // Campo DDEAuto. Não está mais disponÃvel na caixa de diálogo Campo, mas oferece suporte a documentos criados em versões anteriores do Word.
#define wdFieldDisplayBarcode 45 // Campo DisplayBarcode.
#define wdFieldDocProperty 46 // Campo DocProperty.
#define wdFieldDocVariable 99 // Campo DocVariable.
#define wdFieldEditTime 85 // Campo EditTime.
#define wdFieldEmbed 64 // Campo Embedded.
#define wdFieldEmpty 25 // Campo Empty. Atua como um espaço reservado para o conteúdo de campo que ainda não foi adicionado. Um campo adicionado por meio das teclas Ctrl+F9 na interface do usuário é um campo Empty.
#define wdFieldExpression 58 // Campo = (Fórmula).
#define wdFieldFileName -1 // Campo FileName.
#define wdFieldFileSize 34 // Campo FileSize.
#define wdFieldFillIn 29 // Campo Fill-In.
#define wdFieldFootnoteRef 69 // Campo FootnoteRef. Não disponÃvel na caixa de diálogo Campo. Inserido por meio de programação ou interação.
#define wdFieldFormCheckBox 39 // Campo FormCheckBox.
#define wdFieldFormDropDown 5 // Campo FormDropDown.
#define wdFieldFormTextInput 71 // Campo FormText.
#define wdFieldFormula 83 // Campo EQ (Equação).
#define wdFieldGlossary 70 // Campo Glossary. Não é mais oferecido suporte para este campo no Word.
#define wdFieldGoToButton 49 // Campo GoToButton.
#define wdFieldGreetingLine 47 // Campo GreetingLine.
#define wdFieldHTMLActiveX 50 // Campo HTMLActiveX. Não é oferecido suporte atualmente para este campo.
#define wdFieldHyperlink 94 // Campo Hyperlink.
#define wdFieldIf 91 // Se o campo.
#define wdFieldImport 88 // Campo Import. Não pode ser adicionado pela caixa de diálogo Campo, mas pode ser adicionado de forma interativa ou por código.
#define wdFieldInclude 7 // Campo Include. Não pode ser adicionado pela caixa de diálogo Campo, mas pode ser adicionado de forma interativa ou por código.
#define wdFieldIncludePicture 55 // Campo IncludePicture.
#define wdFieldIncludeText 36 // Campo IncludeText.
#define wdFieldIndex 67 // Campo Index.
#define wdFieldIndexEntry 68 // Campo XE (Entrada de Ãndice).
#define wdFieldInfo 8 // Campo Info.
#define wdFieldKeyWord 4 // Campo Keywords.
#define wdFieldLastSavedBy 14 // Campo LastSavedBy.
#define wdFieldLink 18 // Campo Link.
#define wdFieldListNum 20 // Campo ListNum.
#define wdFieldMacroButton 56 // Campo MacroButton.
#define wdFieldMergeBarcode 90 // Campo MergeBarcode.
#define wdFieldMergeField 51 // Campo MergeField.
#define wdFieldMergeRec 98 // Campo MergeRec.
#define wdFieldMergeSeq 59 // Campo MergeSeq.
#define wdFieldNext 44 // Campo Next.
#define wdFieldNextIf 75 // Campo NextIf.
#define wdFieldNoteRef 41 // Campo NoteRef.
#define wdFieldNumChars 42 // Campo NumChars.
#define wdFieldNumPages 72 // Campo NumPages.
#define wdFieldNumWords 28 // Campo NumWords.
#define wdFieldOCX 26 // Campo OCX. Não pode ser adicionado pela caixa de diálogo Campo, mas pode ser adicionado pelo código utilizando o método AddOLEControl da coleção Shapes ou InlineShapes.
#define wdFieldPage 27 // Campo Page.
#define wdFieldPageRef 87 // Campo PageRef.
#define wdFieldPrint 33 // Campo Print.
#define wdFieldPrintDate 37 // Campo PrintDate.
#define wdFieldPrivate 48 // Campo Private.
#define wdFieldQuote 23 // Campo Quote.
#define wdFieldRef 77 // Campo Ref.
#define wdFieldRefDoc 35 // Campo RD (Documento de referência).
#define wdFieldRevisionNum 3 // Campo RevNum.
#define wdFieldSaveDate 11 // Campo SaveDate.
#define wdFieldSection 24 // Campo Section.
#define wdFieldSectionPages 22 // Campo SectionPages.
#define wdFieldSequence 65 // Campo Seq (Sequência).
#define wdFieldSet 66 // Campo Set.
#define wdFieldShape 12 // Campo Shape. Criado automaticamente para qualquer figura desenhada.
#define wdFieldSkipIf 6 // Campo SkipIf.
#define wdFieldStyleRef 95 // Campo StyleRef.
#define wdFieldSubject 43 // Campo Subject.
#define wdFieldSubscriber 10 // Somente Macintosh. (Para obter informações sobre esta constante, consulte a ajuda de referência da linguagem incluÃda com o Microsoft Office Macintosh Edition.)
#define wdFieldSymbol 16 // Campo Symbol.
#define wdFieldTemplate 82 // Campo Template.
#define wdFieldTime 57 // Campo Time.
#define wdFieldTitle 30 // Campo Title.
#define wdFieldTOA 32 // Campo TOA (Ãndice de autoridades).
#define wdFieldTOAEntry 15 // Campo TOA (Entrada do Ãndice de autoridades).
#define wdFieldTOC 73 // Campo TOC (Sumário).
#define wdFieldTOCEntry 74 // Campo TOC (Entrada do sumário).
#define wdFieldUserAddress 13 // Campo UserAddress.
#define wdFieldUserInitials 9 // Campo UserInitials.
#define wdFieldUserName 62 // Campo UserName.
#define wdFieldBibliography 61 // Campo Bibliography.
#define wdFieldCitation 60 // Campo Citation.
// Enumeração WdProtectionType (Word)
//
// Especifica o tipo de proteção aplicado ao documento atual.
// Nome Valor Descrição
//
#define wdAllowOnlyComments 1 // Permite que somente comentários sejam adicionados ao documento.
#define wdAllowOnlyFormFields 2 // Permite que o conteúdo seja adicionado ao documento somente através dos campos de formulário.
#define wdAllowOnlyReading 3 // Permite somente acesso de leitura ao documento.
#define wdAllowOnlyRevisions 0 // Permite que sejam feitas revisões somente ao conteúdo existente.
#define wdNoProtection -1 // Não aplica proteção ao documento.
// Enumeração WdVerticalAlignment (Word)
//
// Especifica o tipo de alinhamento vertical a ser aplicado.
// Nome Valor Descrição
//
#define wdAlignVerticalBottom 3 // Alinhamento vertical inferior.
#define wdAlignVerticalCenter 1 // Alinhamento vertical centralizado.
#define wdAlignVerticalJustify 2 // Alinhamento vertical justificado.
#define wdAlignVerticalTop 0 // Alinhamento vertical superior.
FUNCTION Main()
LOCAL cFileName := "C:\TEMP\TestWord.doc"
MEMVAR vtbl
PRIVATE vtbl := { { "CM0001", "MK", 0.00, 1.000, 2.00, 9.000, 0.00 }, ;
{ "CM0002", "MK", 0.00, 1.000, 2.00, 9.000, 0.00 }, ;
{ "CM0003", "MK", 0.00, 1.000, 2.00, 9.000, 0.00 }, ;
{ "CM0004", "MK", 0.00, 1.000, 2.00, 9.000, 0.00 }, ;
{ "CM0005", "MK", 0.00, 1.000, 2.00, 9.000, 0.00 }, ;
{ "CM0006", "MK", 0.00, 1.000, 2.00, 9.000, 0.00 }, ;
{ "CM0007", "MK", 0.00, 1.000, 2.00, 9.000, 0.00 } ;
}
HB_GCALL( .F. )
IF .NOT. lIsDir( "C:\TEMP" )
lMkDir( UPPER( "C:\TEMP" ) )
ENDIF
SET CENTURY ON
SET DATE BRITISH
SET TIME FORMAT TO "HH:MM:SS"
SET EPOCH TO YEAR( DATE() ) - 30
// Crear el .DOC
Table_Form( vtbl, cFileName )
// Imprime_Word( cFileName ) // PRINT .DOC
HB_GCALL( .T. )
CLEAR MEMORY
PostQuitMessage( 0 )
QUIT
RETURN NIL
FUNCTION table_form( vtbl, cFileName )
// Parameter vtbl -> order data array para vtbl
LOCAL oWord, __text, oDoc, __AUTO, OPR1, RNG1, OTB1, OPR2, RNG2, OPR3
LOCAL OTB2, OPR4, RNG4, OPR5, RNG5, OTB3, __MENS, OPR6, RNG6
LOCAL RNG3, VCAB, OPRA, RNGA, NROW, NCOL, OTB4, IC, I, J, CRNG, FORMULA
#ifdef __XHARBOUR__
TRY
oWord := TOleAuto():New( "Word.Application" )
CATCH
TRY
oWord = CreateObject( "Word.Application" )
CATCH
MsgInfo( "xHarbour: Word is not installed on this PC. " + ;
"You need Excel to continue", "Ooooopppsss" )
RETURN( .F. )
END
END
#else
TRY
oWord := TOleAuto():New( "Word.Application" )
CATCH
TRY
oWord := win_oleCreateObject( "Word.Application" )
CATCH
MsgInfo( "Harbour: Word is not installed on this PC. " + ;
"You need Excel to continue", "Ooooopppsss" )
RETURN( .F. )
END
END
#endif
oWord:Visible := .T.
// oWord:WindowState = 1 // Maximize
// Creating new Doc
odoc := oWord:Documents:Add()
// DOC Setup
// -----------------------------------------------------------------
odoc:PageSetup:Orientation := ( wdOrientLandscape )
odoc:PageSetup:PaperSize := ( wdPaperA4 )
// Don't know why but Word Function CentimetersToPoints cause LINKER error ?!
/*
VB
Selection.Paragraphs.TabStops.Add _
Position:=Application.CentimetersToPoints(1.5), _
Alignment:=wdAlignTabCenter
Este exemplo define um recuo da primeira linha de 2,5 centímetros para o primeiro parágrafo do documento ativo.
VB
ActiveDocument.Paragraphs(1).FirstLineIndent = _
Application.CentimetersToPoints(2.5)
*/
#ifdef __XHARBOUR__ // No funciona en xHarbour porque?
// NO CAMBIA NADA SE NO USO ESTE COMANDO. Misterio...
// odoc:PageSetup:TopMargin := oWord:CentimetersToPoints( 2.5 )
#else // asi, funciona en Harbour - xHarbour, no.
// funciona.
// odoc:PageSetup:TopMargin := oWord:CentimetersToPoints( 2.5 )
// No funciona en xHarbour?
odoc:PageSetup:TopMargin := oWord:Application:CentimetersToPoints( 2.5 )
#endif
odoc:PageSetup:TopMargin := 80 // points
odoc:PageSetup:BottomMargin := 60
odoc:PageSetup:LeftMargin := 60
odoc:PageSetup:RightMargin := 40
odoc:PageSetup:Gutter := 0
odoc:PageSetup:HeaderDistance := 40
odoc:PageSetup:FooterDistance := 40
// odoc:PageSetup:PageWidth := 21
// odoc:PageSetup:PageHeight := 29.7
odoc:PageSetup:VerticalAlignment := wdAlignVerticalTop
// DOC Setup
// -----------------------------------------------------------------
// Header
// --------------------------------------------------------------------
odoc:ActiveWindow:ActivePane:View:SeekView := ( wdSeekCurrentPageHeader )
odoc:Select()
oWord:Selection:ParagraphFormat:Alignment := wdAlignParagraphCenter
oWord:Selection:Font:Name := "Arial"
oWord:Selection:Font:Bold := wdToggle
//__text := win_OEMToANSI( "Order Confirmation" )
__text := OemToAnsi( "Order Confirmation" )
oWord:Selection:TypeText( __text )
// Header
// --------------------------------------------------------------------
// Footer
// --------------------------------------------------------------------
odoc:ActiveWindow:ActivePane:View:SeekView := ( wdSeekCurrentPageFooter )
odoc:Select()
oWord:Selection:ParagraphFormat:Alignment := wdAlignParagraphLeft
oWord:Selection:Font:Name := "Arial"
oWord:Selection:Font:Bold := wdToggle
oWord:Selection:Font:Size := 6
// Order number
//
// __text := win_OEMToANSI( "PD 9999999.DOC" )
__text := OemToAnsi( "PD 9999999.DOC" )
oWord:Selection:TypeText( __text )
// Blank Lines
oWord:Selection:TypeParagraph()
oWord:Selection:TypeParagraph()
oWord:Selection:ParagraphFormat:Alignment := wdAlignParagraphCenter
oWord:Selection:Font:Name := "Arial"
oWord:Selection:Font:Bold := wdToggle
oWord:Selection:Font:Size := 8
__auto := 'AUTOTEXT "Pagina X de Y" '
// __auto := win_OEMToANSI( __auto )
__auto := OemToAnsi( __auto )
oWord:Selection:Fields:Add( oWord:Selection:RANGE, - 1, __auto, .T. )
// Footer
// --------------------------------------------------------------------
// Return Active Doc
// ---------------------------------------------------------
odoc:ActiveWindow:ActivePane:View:SeekView := ( wdSeekMainDocument )
// First Paragraph , just to assign a range for table 1
opr1 := odoc:Paragraphs:Add() // paragrafo 1 para Tab1
rng1 := opr1:Range
otb1 := odoc:Tables:Add( rng1, 3, 2 )
// Tab1 setup
otb1:Borders:OutsideLineStyle := wdLineStyleSingle
otb1:Borders:InsideLineStyle := wdLineStyleNone
otb1:Select()
oWord:Selection:Cells:VerticalAlignment := wdCellAlignVerticalCenter
// Tab1 rows and cols setup
otb1:Rows:Item( 1 ):Height := 18
otb1:Rows:Item( 2 ):Height := 12
otb1:Rows:Item( 3 ):Height := 12
otb1:Columns:Item( 1 ):PreferredWidth := 350
otb1:Columns:Item( 2 ):PreferredWidth := 100
// Size columns, for simplicity, let word do the work
//otb1:Columns:Autofit()
// Fill the cells
__text := 'ACME INC. - '
__text += 'Pedido : 9999999'
otb1:Cell( 1, 1 ):Range:Font:Name := "Arial"
otb1:Cell( 1, 1 ):Range:Font:Size := 10
otb1:Cell( 1, 1 ):Range:Font:Bold := wdToggle
otb1:Cell( 1, 1 ):Range:TEXT := __text
otb1:Cell( 1, 1 ):Range:Select()
oWord:Selection:MoveRight( wdCell, 1 )
// __text := 'Data : 99/99/9999'
__text := "Data : " + DTOC( DATE() )
otb1:Cell( 1, 2 ):Range:Font:Name := "Arial"
otb1:Cell( 1, 2 ):Range:Font:Size := 10
otb1:Cell( 1, 2 ):Range:Font:Bold := wdToggle
otb1:Cell( 1, 2 ):Range:TEXT := __text
otb1:Cell( 1, 2 ):Range:Select()
oWord:Selection:MoveLeft( wdCell, 1 )
otb1:Cell( 1, 2 ):Range:Select()
oWord:Selection:MoveLeft( wdCell, 1 )
__text := 'Sitio Baixa do Maracuja, S/N - Distrito de Santa Fe'
__text += ' - Crato-CE'
__text += Chr( 13 ) + Chr( 10 )
__text += 'CEP : 63.136-000'
otb1:Cell( 2, 1 ):Range:Font:Name := "Arial"
otb1:Cell( 2, 1 ):Range:Font:Size := 9
otb1:Cell( 2, 1 ):Range:TEXT := __text
otb1:Cell( 2, 1 ):Range:Select()
oWord:Selection:MoveRight( wdCell, 1 )
__text := 'Resp. LYC : Caio'
otb1:Cell( 2, 2 ):Range:Font:Name := "Arial"
otb1:Cell( 2, 2 ):Range:Font:Size := 9
otb1:Cell( 2, 2 ):Range:Font:Bold := wdToggle
otb1:Cell( 2, 2 ):Range:TEXT := __text
otb1:Cell( 2, 2 ):Range:Select()
oWord:Selection:MoveLeft( wdCell, 1 )
__text := 'Tel. / Fax : (88) 9.9815-2920'
otb1:Cell( 3, 1 ):Range:Font:Name := "Arial"
otb1:Cell( 3, 1 ):Range:Font:Size := 9
otb1:Cell( 3, 1 ):Range:TEXT := __text
otb1:Cell( 3, 1 ):Range:Select()
oWord:Selection:MoveRight( wdCell, 1 )
otb1:Cell( 3, 2 ):Range:Select()
oWord:Selection:Collapse( wdCollapseEnd )
// Closing Tab1 range , selection
// Blank Line
opr2 := odoc:Paragraphs:Add() // paragrafo 2
rng2 := opr2:Range
rng2:Select()
oWord:Selection:Collapse( wdCollapseEnd )
// Client Data
opr3 := odoc:Paragraphs:Add() // paragrafo 3 , Tab2
rng3 := opr3:Range
otb2 := odoc:Tables:Add( rng3, 3, 2 )
otb2:Borders:OutsideLineStyle := wdLineStyleSingle
otb2:Borders:InsideLineStyle := wdLineStyleNone
otb2:Select()
oWord:Selection:Cells:VerticalAlignment := wdCellAlignVerticalCenter
otb2:Rows:Item( 1 ):Height := 18
otb2:Rows:Item( 2 ):Height := 12
otb2:Rows:Item( 3 ):Height := 12
otb2:Columns:Item( 1 ):PreferredWidth := 50
otb2:Columns:Item( 2 ):PreferredWidth := 400
// Size columns, for simplicity, let word do the work
//otb2:Columns:Autofit()
__text := 'Cliente : '
otb2:Cell( 1, 1 ):Range:Font:Name := "Arial"
otb2:Cell( 1, 1 ):Range:Font:Size := 10
otb2:Cell( 1, 1 ):Range:TEXT := __text
otb2:Cell( 1, 1 ):Range:Select()
oWord:Selection:MoveRight( wdCell, 1 )
__text := 'Cecilio dos Santos Lima'
otb2:Cell( 1, 2 ):Range:Font:Name := "Arial"
otb2:Cell( 1, 2 ):Range:Font:Size := 10
otb2:Cell( 1, 2 ):Range:TEXT := __text
otb2:Cell( 1, 2 ):Range:Select()
oWord:Selection:MoveLeft( wdCell, 1 )
__text := ''
otb2:Cell( 2, 1 ):Range:Font:Name := "Arial"
otb2:Cell( 2, 1 ):Range:Font:Size := 10
otb2:Cell( 2, 1 ):Range:TEXT := __text
otb2:Cell( 2, 1 ):Range:Select()
oWord:Selection:MoveRight( wdCell, 1 )
__text := 'Sitio Baixa do Maracuja, 185 - Distrito de Santa Fe'
__text += ' - Crato-CE'
__text += Chr( 13 ) + Chr( 10 )
__text += 'CEP : 63.136-000'
otb2:Cell( 2, 2 ):Range:Font:Name := "Arial"
otb2:Cell( 2, 2 ):Range:Font:Size := 8
otb2:Cell( 2, 2 ):Range:TEXT := __text
otb2:Cell( 2, 2 ):Range:Select()
oWord:Selection:MoveLeft( wdCell, 1 )
__text := 'Contato : '
otb2:Cell( 3, 1 ):Range:Font:Name := "Arial"
otb2:Cell( 3, 1 ):Range:Font:Size := 8
otb2:Cell( 3, 1 ):Range:TEXT := __text
otb2:Cell( 3, 1 ):Range:Select()
oWord:Selection:MoveRight( wdCell, 1 )
__text := 'O Proprio'
otb2:Cell( 3, 2 ):Range:Font:Name := "Arial"
otb2:Cell( 3, 2 ):Range:Font:Size := 8
otb2:Cell( 3, 2 ):Range:TEXT := __text
otb2:Cell( 3, 2 ):Range:Select()
oWord:Selection:Collapse( wdCollapseEnd )
// Blank Line
opr4 := odoc:Paragraphs:Add() // paragrafo 4
rng4 := opr4:Range
rng4:Select()
oWord:Selection:Collapse( wdCollapseEnd )
// Order Table Instruction and Button
opr5 := odoc:Paragraphs:Add() // paragrafo 5
rng5 := opr5:Range
otb3 := odoc:Tables:Add( rng5, 1, 2 )
otb3:Select()
oWord:Selection:Cells:VerticalAlignment := wdCellAlignVerticalCenter
otb3:Borders:OutsideLineStyle := wdLineStyleNone
otb3:Borders:InsideLineStyle := wdLineStyleNone
otb3:Rows:Item( 1 ):Height := 16
otb3:Columns:Item( 1 ):PreferredWidth := 350
otb3:Columns:Item( 2 ):PreferredWidth := 100
// Size columns, for simplicity, let word do the work
// otb3:Columns:Autofit()
__mens := 'Eventuais alteracoes de quantidades poderao serem feitas na Col. "Qtde. Alt.".'
__mens += Chr( 13 ) + Chr( 10 )
__mens += 'Em caso de alteracoes, para atualizar Tab. Pedido basta clicar botao "Atualizar Pedido".'
// __mens := win_OEMToANSI( __mens )
__mens := OemToAnsi( __mens )
otb3:Cell( 1, 1 ):Range:Font:Name := "Arial"
otb3:Cell( 1, 1 ):Range:Font:Size := 8
otb3:Cell( 1, 1 ):Range:Font:Bold := wdToggle
otb3:Cell( 1, 1 ):Range:TEXT := __mens
otb3:Cell( 1, 1 ):Range:Select()
oWord:Selection:MoveLeft( wdCell, 1 )
// Linha em branco
opr6 := odoc:Paragraphs:Add() // paragrafo 6
rng6 := opr6:Range
rng6:Select()
oWord:Selection:Collapse( wdCollapseEnd )
// Order Table Header array
vcab := {}
AAdd( vcab, 'Codigo Mercado' ) // esquerda
AAdd( vcab, 'Marca' ) // centro
AAdd( vcab, 'FOB US$' ) // direita
AAdd( vcab, 'Qtde.' ) // direita
AAdd( vcab, 'Total US$' ) // direita
AAdd( vcab, 'Qtde. Alt.' ) // direita
AAdd( vcab, 'Total Alt. US$' ) // direita
// Order Table Def.
oprA := odoc:Paragraphs:Add() // paragrafo 10 , Tab3
rngA := oprA:Range
// Definicao linhas e colunas tabela
nrow := Len( vtbl )
ncol := Len( vcab )
// 1 linha cab.
//
otb4 := odoc:Tables:Add( rngA, nrow + 1, ncol )
otb4:Borders:OutsideLineStyle := wdLineStyleSingle
otb4:Borders:InsideLineStyle := wdLineStyleSingle
otb4:Select()
oWord:Selection:Cells:VerticalAlignment := wdCellAlignVerticalCenter
// Order Table Header
FOR ic = 1 TO ncol
__text := vcab[ ic ]
otb4:Cell( 1, ic ):Range:Font:Name := "Arial"
otb4:Cell( 1, ic ):Range:Font:Size := 9
otb4:Cell( 1, ic ):Range:Font:Bold := wdToggle
otb4:Cell( 1, ic ):Range:TEXT := __text
otb4:Columns:Item( ic ):Select()
// Size columns, for simplicity, let word do the work
// otb4:Columns:Autofit()
IF ic = 1
otb4:Columns:Item( ic ):PreferredWidth := 100
oWord:Selection:ParagraphFormat:Alignment := wdAlignParagraphLeft
ELSEIF ic = 2
otb4:Columns:Item( ic ):PreferredWidth := 50
oWord:Selection:ParagraphFormat:Alignment := wdAlignParagraphCenter
ELSE
otb4:Columns:Item( ic ):PreferredWidth := 70
oWord:Selection:ParagraphFormat:Alignment := wdAlignParagraphRight
ENDIF
oWord:Selection:Collapse( wdCollapseEnd )
NEXT
// Order Table
FOR i = 1 TO nrow
FOR j = 1 TO ncol
otb4:Cell( i + 1, j ):Range:Font:Name := "Courier New"
otb4:Cell( i + 1, j ):Range:Font:Size := 8
IF j <= ncol - 2
__text := vtbl[ i, j ]
otb4:Cell( i + 1, j ):Range:TEXT := __text
ELSEIF j = ncol - 1
crng := otb4:Cell( i + 1, j ):Range
odoc:FormFields:Add( crng, wdFieldFormTextInput )
ELSE
formula := "="
formula += "C" + AllTrim( tran( i + 1, '999' ) )
formula += "*"
formula += "F" + AllTrim( tran( i + 1, '999' ) )
otb4:Cell( i + 1, j ):Formula( formula, "0,00" )
ENDIF
NEXT
NEXT
//
otb4:Cell( nrow + 1, ncol ):Range:Select()
oWord:Selection:Collapse( wdCollapseEnd )
oWord:ActiveDocument:Protect( wdAllowOnlyFormFields, .T., "hu" )
odoc:SaveAS( cFileName ) // EN C:\TEMP
// odoc:Close() // CLOSE .DOC
// oWord:Quit() // QUIT WORD.exe
RETURN NIL
// Print .doc
FUNCTION Imprime_Word( cFileName )
LOCAL oWord
#ifdef __XHARBOUR__
oWord := CreateObject( "Word.Application" )
#else
oWord := win_oleCreateObject( "Word.Application" )
#endif
oWord:Documents:Open( cFileName )
oWord:WindowState := 1
oWord:Visible := .T.
oWord:PrintOut() // PARA IMPRIMIR DIRETO
oWord:Quit()
RETURN NIL
// FIN / END
Regards, saludos.