en harbour hay una libreria para crear archivos xml para excel, es extremadamente rapida,
Code: Select all | Expand
/*
* $Id: example.prg 17099 2011-10-28 18:34:39Z vouchcac $
*//*
* Harbour Project source code:
*
* Copyright 2011 Fausto Di Creddo Trautwein, ftwein@yahoo.com.br
* www - http://www.xharbour.org http://harbour-project.org
*
* Thanks TO Robert F Greer, PHP original version
* http://sourceforge.net/projects/excelwriterxml/
*
* This program is free software; you can redistribute it AND/OR modify
* it under the terms of the GNU General PUBLIC License as published by
* the Free Software Foundation; either version 2, OR( at your option )
* any later version.
*
* This program is distributed IN the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General PUBLIC License FOR more details.
*
* You should have received a copy of the GNU General PUBLIC License
* along WITH this software; see the file COPYING. IF NOT, write TO
* the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
* Boston, MA 02111-1307 USA( OR visit the web site http://www.gnu.org/ ).
*
* As a special exception, the Harbour Project gives permission FOR
* additional uses of the text contained IN its release of Harbour.
*
* The exception is that, IF you link the Harbour libraries WITH other
* files TO produce an executable, this does NOT by itself cause the
* resulting executable TO be covered by the GNU General PUBLIC License.
* Your use of that executable is IN no way restricted on account of
* linking the Harbour library code into it.
*
* This exception does NOT however invalidate any other reasons why
* the executable file might be covered by the GNU General PUBLIC License.
*
* This exception applies only TO the code released by the Harbour
* Project under the name Harbour. IF you copy code FROM other
* Harbour Project OR Free Software Foundation releases into a copy of
* Harbour, as the General PUBLIC License permits, the exception does
* NOT apply TO the code that you add IN this way. TO avoid misleading
* anyone as TO the status of such modified files, you must delete
* this exception notice FROM them.
*
* IF you write modifications of your own FOR Harbour, it is your choice
* whether TO permit this exception TO apply TO your modifications.
* IF you DO NOT wish that, delete this exception notice.
*
*//*----------------------------------------------------------------------*/FUNCTION main
() LOCAL oXml, oSheet, xarquivo :=
"example.xml" LOCAL i, xqtddoc, xttotnot, xtbascal, xtvlricm, xtbasipi, xtvlripi, aDoc, nLinha
LOCAL xEmpresa
LOCAL xDataImp
LOCAL xTitulo
LOCAL xPeriodo
LOCAL xOrdem
SET DATE
TO BRITISH
oXml:= ExcelWriterXML
():
New(xarquivo
) oXml:
setOverwriteFile(.t.
) WITH OBJECT oXml:
addStyle('textLeft') :
alignHorizontal('Left') :
alignVertical('Center') :
fontSize(10) END WITH
WITH OBJECT oXml:
addStyle('textLeftWrap') :
alignHorizontal('Left') :
alignVertical('Center') :
alignWraptext() :
fontSize(10) END WITH
WITH OBJECT oXml:
addStyle('textLeftBold') :
alignHorizontal('Left') :
alignVertical('Center') :
fontSize(10) :
setFontBold() END WITH
WITH OBJECT oXml:
addStyle('textLeftBoldCor') :
alignHorizontal('Left') :
alignVertical('Center') :
fontSize(10) :
setFontBold() :
bgColor('lightblue') :
alignWraptext() END WITH
WITH OBJECT oXml:
addStyle('textRight') :
alignHorizontal('Right') :
alignVertical('Center') :
fontSize(10) END WITH
WITH OBJECT oXml:
addStyle('textRightBold') :
alignHorizontal('Right') :
alignVertical('Center') :
fontSize(10) :
setFontBold() END WITH
WITH OBJECT oXml:
addStyle('textRightBoldCor') :
alignHorizontal('Right') :
alignVertical('Center') :
fontSize(10) :
setFontBold() :
bgColor('lightblue') :
alignWraptext() END WITH
WITH OBJECT oXml:
addStyle('numberRight') :
alignHorizontal('Right') :
alignVertical('Center') :
setNumberFormat('#,##0.00') :
fontSize(10) END WITH
WITH OBJECT oXml:
addStyle('numberRightBold') :
alignHorizontal('Right') :
alignVertical('Center') :
setNumberFormat('#,##0.00') :
fontSize(10) :
setFontBold() END WITH
WITH OBJECT oXml:
addStyle('numberRightBoldCor') :
alignHorizontal('Right') :
alignVertical('Center') :
setNumberFormat('#,##0.00') :
fontSize(10) :
setFontBold() :
bgColor('lightblue') END WITH
WITH OBJECT oXml:
addStyle('numberRightZero') :
alignHorizontal('Right') :
alignVertical('Center') :
setNumberFormat('#,##0.00;[Red]-#,##0.00;;@') //'#,###.00') :
fontSize(10) :
setFontBold() END WITH
WITH OBJECT oXml:
addStyle('Cabec') :
alignHorizontal('Left') :
alignVertical('Center') :
fontSize(12) :
setFontBold() END WITH
WITH OBJECT oXml:
addStyle('CabecRight') :
alignHorizontal('Right') :
alignVertical('Center') :
fontSize(12) :
setFontBold() END WITH
oSheet := oXml:
addSheet('Plan1') WITH OBJECT oSheet
:
columnWidth( 1,
70 ) // N.Fiscal :
columnWidth( 2,
20 ) // TM :
columnWidth( 3,
70 ) // Data Movto :
columnWidth( 4,
70 ) // Data Emis. :
columnWidth( 5,
50 ) // CFOP :
columnWidth( 6,
50 ) // C›d. Cliente/Fornecedor :
columnWidth( 7,
300 ) // Nome Cliente/Fornecedor :
columnWidth( 8,
20 ) // UF :
columnWidth( 9,
80 ) // Vlr.Tot. :
columnWidth(10,
80 ) // Base Calc. :
columnWidth(11,
80 ) // Vlr ICMS :
columnWidth(12,
80 ) // Base IPI :
columnWidth(13,
80 ) // Valor IPI xEmpresa:=
"EMPRESA DEMONSTRACAO LTDA" xDataImp:=
"22.03.2011" xTitulo :=
"RELATORIO PARA DEMONSTRAR XML EXCEL" xPeriodo:=
"01.02.2011 a 28.02.2011" xOrdem :=
"DATA DE EMISSAO" nLinha:=
0 :
writeString(++nLinha,
1,xEmpresa ,
'Cabec') :
cellMerge( nLinha,
1,
5,
0) :
writeString( nLinha,
12,
"Data:"+xDataImp ,
'CabecRight') :
cellMerge( nLinha,
12,
1,
0) :
writeString(++nLinha,
1,xTitulo ,
'Cabec') :
cellMerge( nLinha,
1,
5,
0) :
writeString(++nLinha,
1,xPeriodo ,
'Cabec') :
cellMerge( nLinha,
1,
5,
0) :
writeString(++nLinha,
1,xOrdem ,
'Cabec') :
cellMerge( nLinha,
1,
5,
0) END WITH
WITH OBJECT oSheet
:
writeString(++nLinha,
1,
"N.Fiscal" ,
'textLeftBoldCor' ) :
writeString( nLinha,
2,
"TM" ,
'textLeftBoldCor' ) :
writeString( nLinha,
3,
"Data Movto" ,
'textLeftBoldCor' ) :
writeString( nLinha,
4,
"Data Emis." ,
'textLeftBoldCor' ) :
writeString( nLinha,
5,
"CFOP" ,
'textLeftBoldCor' ) :
writeString( nLinha,
6,
"C›digo" ,
'textLeftBoldCor' ) :
writeString( nLinha,
7,
"Cliente/Fornecedor",
'textLeftBoldCor' ) :
writeString( nLinha,
8,
"UF" ,
'textLeftBoldCor' ) :
writeString( nLinha,
9,
"Vlr.Tot." ,
'textRightBoldCor') :
writeString( nLinha,
10,
"Base Calc." ,
'textRightBoldCor') :
writeString( nLinha,
11,
"Vlr ICMS" ,
'textRightBoldCor') :
writeString( nLinha,
12,
"Base IPI" ,
'textRightBoldCor') :
writeString( nLinha,
13,
"Valor IPI" ,
'textRightBoldCor') END WITH
aDoc:=
{} FOR i:=
1 TO 40 AADD
( aDoc,;
{ STRZERO
(i,
8),;
"VE",;
DATE
()-49-i,;
DATE
()-50-i,;
"5.102",;
STRZERO
(i,
5),;
"NOME DO CLIENTE TESTE "+ALLTRIM
(STR
(i,
5,
0)),;
"PR",;
i*
100,;
i*
100*
0.90,;
i*
100*
0.90*
0.12,;
i*
100,;
i*
100*
0.10 } ) NEXT xqtddoc:= xttotnot:= xtbascal:= xtvlricm:= xtbasipi:= xtvlripi:=
0 FOR i:=
1 TO 40 WITH OBJECT oSheet
:
writeString(++nLinha,
1,aDoc
[i,
1],
'textLeft') :
writeString( nLinha,
2,aDoc
[i,
2],
'textLeft') :
writeString( nLinha,
3,DTOC
(aDoc
[i,
3]),
'textLeft') :
writeString( nLinha,
4,DTOC
(aDoc
[i,
4]),
'textLeft') :
writeString( nLinha,
5,aDoc
[i,
5],
'textLeft') :
writeString( nLinha,
6,aDoc
[i,
6],
'textLeft') :
writeString( nLinha,
7,aDoc
[i,
7],
'textLeft') :
writeString( nLinha,
8,aDoc
[i,
8],
'textLeft') :
writeNumber( nLinha,
9,aDoc
[i,
9],
'numberRight') :
writeNumber( nLinha,
10,aDoc
[i,
10],
'numberRight') :
writeNumber( nLinha,
11,aDoc
[i,
11],
'numberRight') :
writeNumber( nLinha,
12,aDoc
[i,
12],
'numberRight') :
writeNumber( nLinha,
13,aDoc
[i,
13],
'numberRight') END WITH
xqtddoc++
xttotnot+= aDoc
[i,
9] xtbascal+= aDoc
[i,
10] xtvlricm+= aDoc
[i,
11] xtbasipi+= aDoc
[i,
12] xtvlripi+= aDoc
[i,
13] NEXT WITH OBJECT oSheet
:
writeString(++nLinha,
1,
"",
'textLeft') :
writeString( nLinha,
2,
"",
'textLeft') :
writeString( nLinha,
3,
"",
'textLeft') :
writeString( nLinha,
4,
"",
'textLeft') :
writeString( nLinha,
5,
"",
'textLeft') :
writeString( nLinha,
6,
"",
'textLeft') :
writeString( nLinha,
7,
"TOTAL ==> "+STR
(xqtddoc,
5)+
" documentos",
'textLeftBold') :
writeString( nLinha,
8,
"",
'textLeft') :
writeFormula('Number',nLinha,
9,
'=SUM(R[-40]C:R[-1]C)',
'numberRightBold') //:writeNumber( nLinha, 9,xttotnot,'numberRightBold') :
writeNumber( nLinha,
10,xtbascal,
'numberRightBold') :
writeNumber( nLinha,
11,xtvlricm,
'numberRightBold') :
writeNumber( nLinha,
12,xtbasipi,
'numberRightBold') :
writeNumber( nLinha,
13,xtvlripi,
'numberRightBold') END WITH
oXml:
writeData(xarquivo
) RETURN NIL/*----------------------------------------------------------------------*/