Como abrir arquivos XLS/XLSX no Delphi ?

8,214 views
Skip to first unread message

na...@bol.com.br

unread,
Jul 29, 2009, 9:09:49 AM7/29/09
to dug...@googlegroups.com

Pessoal,

Eu tenho um programa que recebe cadastros dos meus clientes via arquivo CSV e para gerar estes arquivos os clientes digitam os dados no Excel e depois gravam no formato CSV, que é o que minha aplicação está preparada para receber.

Só que a maioria dos clientes manda os arquivos em XLS e eu tenho que ficar convertendo eles em CSV antes de utilizá-los para importar as informações no banco de dados.

Outros usuários usam o OpenOffice e mandam a planilha no formato do ODT, então eu tenho que abrir no OpenOffice e fazer a mesma operação.

Por acaso alguém sabe como fazer para conseguir ler arquivos XLS no Delphi 2007 ? Se conseguir abrir o ODT melhor ainda.

Será que alguém tem uma rotina que leia estes arquivos ou conhece algum componente que faça isso ?

Obrigado.

Nasbe K. Jung
na...@bol.com.br
Delphi Developer since 2001

Newton Michel de Oliveira

unread,
Jul 29, 2009, 9:16:07 AM7/29/09
to dug...@googlegroups.com
De uma olhada nestes links
XLS:
http://www.linhadecodigo.com.br/Artigo.aspx?id=773

ODT:
http://www.broffice.org/anuncio_bridge_pascal_uno

Newton Michel de Oliveira www.nmooliveira.com.br
Mobile 55 51 92358577
Consultor de TI
Embarcadero Delphi 2009 Programming

Public Profile
http://www.linkedin.com/in/newtongaucho




2009/7/29 <na...@bol.com.br>

Samuel

unread,
Jul 29, 2009, 11:51:57 AM7/29/09
to dug...@googlegroups.com
Boa tarde Nasbe,

Existe um componente da EMS chamado Advanced Data Import que permite importar dados de arquivos dos formatos mais comuns do mercado como XLS, XLSX, CSV, DBF, ODT, XML entre outros.

Ele é muito simples de usar e, além de permitir que você faça a ligação dos campos do XLS com os do seu banco de dados, ele possui um Wizard que permite ligar os campos visualmente.

A mesma empresa possui o Advanced Data Export, que faz o processo inverso, isto é, permite exportar dados de TDatasets,/DBGrids para XLS, XLSX, DOC, PDF, CSV, XML, etc.

Você conseguirá maiores informações no endereço http://sqlmanager.net.br/html/desenvolvimento.html (no site tem uma versão Trial que você poderá baixar para ver se lhe atende).

Eu utilizo estes componentes há um bom tempo e só tenho que elogiar o trabalho que eles me pouparam.

Abraços,

Samuel

na...@bol.com.br

unread,
Jul 29, 2009, 12:07:57 PM7/29/09
to dug...@googlegroups.com

Obrigado Samuel,

Olhei este componente e parece que resolve meu problema.

Já que tu usa ele, tem como me enviar uma cópia do instalador para evitar que eu tenha que comprá-lo ?

Abraço,



Nasbe K. Jung
na...@bol.com.br
Delphi Developer since 2001



Em 29/07/2009 12:51, Samuel < e...@sqlmanager.com.br > escreveu:


Boa tarde Nasbe,

Existe um componente da EMS chamado Advanced Data Import que permite importar dados de arquivos dos formatos mais comuns do mercado como XLS, XLSX, CSV, DBF, ODT, XML entre outros.

Ele é muito simples de usar e, além de permitir que você faça a ligação dos campos do XLS com os do seu banco de dados, ele possui um Wizard que permite ligar os campos visualmente.

A mesma empresa possui o Advanced Data Export, que faz o processo inverso, isto é, permite exportar dados de TDatasets,/DBGrids para XLS, XLSX, DOC, PDF, CSV, XML, etc.

Você conseguirá maiores informações no endereço http://sqlmanager.net.br/html/desenvolvimento.html (no site tem uma versão Trial que você p oderá baixar para ver se lhe atende).

Diego Campos Rosa

unread,
Jul 29, 2009, 12:13:21 PM7/29/09
to dug...@googlegroups.com
Nasbe

Tenho a rotina a baixo que importa um XLS para um TStringGrid e depois importo as informações para o BD com o velho while.
Mas desta forma você pode implementar para abrir outros tipos de arquivo.

function XlsToStringGrid(AGrid: TStringGrid; AXLSFile: string): Boolean;
const
    xlCellTypeLastCell = $0000000B;
var
    XLApp, Sheet: OLEVariant;
    RangeMatrix: Variant;
    x, y, k, r: Integer;
begin
Result:=False;
//Cria Excel- OLE Object
XLApp:=CreateOleObject('Excel.Application');
try
    //Esconde Excel
    XLApp.Visible:=False;
    //Abre o Workbook
    XLApp.Workbooks.Open(AXLSFile);
    Sheet:=XLApp.Workbooks[ExtractFileName(AXLSFile)].WorkSheets[1];
    Sheet.Cells.SpecialCells(xlCellTypeLastCell, EmptyParam).Activate;
    //Pegar o número da última linha
    x:=XLApp.ActiveCell.Row;
    //Pegar o número da última coluna
    y:=XLApp.ActiveCell.Column;
    //Seta Stringgrid linha e coluna
    AGrid.RowCount:=x;
    AGrid.ColCount:=y;
    //Associaca a variant WorkSheet com a variant do Delphi
    RangeMatrix:=XLApp.Range['A1', XLApp.Cells.Item[X, Y]].Value;
    //Cria o loop para listar os registros no TStringGrid
    k:=1;
    repeat
        for r:=1 to y do
            AGrid.Cells[(r - 1),(k - 1)]:=RangeMatrix[K, R];
        Inc(k,1);
    until k > x;
    RangeMatrix:=Unassigned;
finally
    //Fecha o Excel
    if not VarIsEmpty(XLApp) then
        begin
        XLApp.Quit;
        XLAPP:=Unassigned;
        Sheet:=Unassigned;
        Result:=True;
        end;
    end;
end;

Atenciosamente,
Diego Campos Rosa diego.ca...@gmail.com
Mobile 55 51 84597563
Consultor de TI
Borland Delphi 2007 Programming

Public Profile
http://www.linkedin.com/in/diegocamposrosa82


2009/7/29 Samuel <e...@sqlmanager.com.br>

Samuel

unread,
Jul 29, 2009, 1:05:34 PM7/29/09
to dug...@googlegroups.com
Boa tarde Nasbe,

Desculpe, mas não posso te enviar o componente pois isso não seria legal.

Abraço,

Samuel

na...@bol.com.br

unread,
Aug 5, 2009, 1:38:41 PM8/5/09
to dug...@googlegroups.com

Olá Diego,

Gostei da sua função mas para ela funcionar o micro onde ela roda precisa ter o Excel instalado e o micro onde o processo roda não tem licença dele.

Acabamos comprando aquela VCL da EMS (Advanced Data Import)  que indicaram e ela resolveu o problema, pois não precisa do Excel e também importa arquivos do OpenOffice diretamente.

Ela poupou um bom trabalho pois também precisamos começar a tratar arquivos XML e XLSX que esta VCL consegue ler sem problemas.

Aconselho que todos que precisam ler dados de arquivos em disco para importar no banco de dados conheçam essa biblioteca (o site deles aqui no Brasil é www.sqlmanager.com.br).

Mas, muito obrigado pela sua ajuda.

Abraços,

 

Nasbe

Diego Campos Rosa

unread,
Aug 5, 2009, 1:50:10 PM8/5/09
to dug...@googlegroups.com
E qual o valor da ferramenta?



Atenciosamente,
Diego Campos Rosa diego.ca...@gmail.com
Mobile 55 51 84597563
Consultor de TI
Borland Delphi 2007 Programming

Public Profile
http://www.linkedin.com/in/diegocamposrosa82


2009/8/5 <na...@bol.com.br>

na...@bol.com.br

unread,
Aug 5, 2009, 2:07:40 PM8/5/09
to dug...@googlegroups.com

Custou R$ 390,00.

Depois do que eu sofri tentando resolver isso, acabamos comprando sem reclamar muito do preço.

Agora estamos pensando em testar a outra ferramenta deles que faz o processo oposto (exporta dados) pois um dos módulos do nosso novo sistema é gerar os dados em XLS e XLSX e não vou pretendo perder tempo desenvolvendo algo que já existe pronto (nem sofrer novamente).

Se quiser eu te envio um projeto demo dela para você tú como ela funciona.

Abraços

Nasbe

2009/8/5 <na...@bol.com.br>
//Seta Stri nggrid linha e coluna

Diego Campos Rosa

unread,
Aug 5, 2009, 2:18:41 PM8/5/09
to dug...@googlegroups.com
Gostaria!

Valeu!!

Rodrigo Sebben

unread,
Aug 5, 2009, 3:29:28 PM8/5/09
to dug...@googlegroups.com
Será que não é melhor gerar os xls usando relatório??? tem muitos componentes de relatório que fazem isso. assim você não precisa gastar com uma segunda aplicação.
 
Rodrigo

2009/8/5 Diego Campos Rosa <diego.ca...@gmail.com>

Diego Campos Rosa

unread,
Aug 5, 2009, 3:36:35 PM8/5/09
to dug...@googlegroups.com
Eu tentei fazer isso com o quick report, mas não deu muito certo. As informações ficavam desalinhadas.

Dai fiz uma função para exportar direto da query para o XLS, mas para ela funcionar o excel tem que estar instalado. Tem como usar com o open office também, mas isso é outra estoria... não cheguei a estudar a fundo.



Atenciosamente,
Diego Campos Rosa diego.ca...@gmail.com
Mobile 55 51 84597563
Consultor de TI
Borland Delphi 2007 Programming

Public Profile
http://www.linkedin.com/in/diegocamposrosa82


2009/8/5 Rodrigo Sebben <hyug...@gmail.com>

na...@bol.com.br

unread,
Aug 5, 2009, 3:44:36 PM8/5/09
to dug...@googlegroups.com

Olá Rodrigo,

Bom seria mais "barato" mas eu baixei a versão de testes da outra VCL (Advanced Data Export) e ela gera aquivos em uns 20 formatos diferentes e ainda permite personalizar praticamente todo o XLS (com cores, fonte das letras, etc.). E também permite exportar os dados em XML o que será um dos próximos formatos.

Consegui convencer o pessoal da empresa que R$ 390,00 não é tão caro. Bastou mostrar quanto perderíamos para fazer o que essa VCL faz e quando isso representaria no meu salário.

Aliás, essa é uma "tirada" para quem precisa comprar componentes e não consegue aprovar com a empresa. Digam para os "gerentes" quanto tempo conseguiríamos "economizar" com esses produtos e quando ganharíamos no tempo do projeto.

Olha, fiquei "apaixonado" por esses dois componentes (quase tanto quanto sou pelo Delphi).

Abraços,

Nasbe

Reply all
Reply to author
Forward
0 new messages