calcio 2 Denunciar post Postado Outubro 9, 2006 Minha aplicação lê um arquivo .csv via excel e pega as linhas e grava em uma tabela. Até aí tudo bem, porém no meu loop está um valor fixo.Preciso saber de uma maneira de contar quantas linhas preenchidas esse Excel tem. Se ñ me engano uso o ExcelApplication. Compartilhar este post Link para o post Compartilhar em outros sites
marcio.theis 3 Denunciar post Postado Outubro 9, 2006 Fiz algo do tipo: procedure TForm1.BitBtn1Click(Sender: TObject);var excel, excelSheet: Variant; linhas: integer;beginexcel:=CreateOleObject('Excel.Application');try excel.WorkBooks.Open('c:\teste.xls',0,True); //Entre aspas coloca onde esta o xls excelSheet:=excel.Workbooks[1].WorkSheets['plan1']; //Entre aspas coloca o nome da planilha a contar as linhas linhas:=excelSheet.Cells.SpecialCells(11).Row; excel.Quitexcept linhas:=0; excel.Quit end;ShowMessage(IntToStr(linhas));end; Compartilhar este post Link para o post Compartilhar em outros sites
calcio 2 Denunciar post Postado Outubro 10, 2006 Cara da erro nos comandos excelSheet:=excel.Workbooks[1].WorkSheets['plan1']; //Entre aspas coloca o nome da planilha a contar as linhas linhas:=excelSheet.Cells.SpecialCells(11).Row; se eu Fizer excel.Workbooks[1].WorkSheets['plan1']; //Entre aspas coloca o nome da planilha a contar as linhas Linhas:=excelSheet.Cells.SpecialCells(11).Row; Aí da erro na última linha. oq pode ser? Veja como astá meu código: ExcelApplication1.Visible[Id_User] := False; // torna a aplicação visível ExcelApplication1.DisplayAlerts[Id_User] := False; // remove alertas do excel // Esta linha conecta a aplicação com o arquivo. // OBS - Vale apena ver o nº de parametros e suas funcionalidades. Con_Excel := ExcelApplication1.Workbooks.Open(EdCaminho.Text, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, Id_User); // conecta a planilha manipular os dados ExcelWorksheet1.ConnectTo(Con_Excel.Worksheets[1] as _Worksheet); //ativa a planilha conectada ExcelWorksheet1.Activate(Id_User); // //TotalLinhas := 35000; Plan := ExcelApplication1.Workbooks[1].Worksheets['plan1']; TotalLinhas := ExcelWorksheet1.Cells.SpecialCells(11).Row; ///41297;.... Compartilhar este post Link para o post Compartilhar em outros sites
marcio.theis 3 Denunciar post Postado Outubro 10, 2006 E qual o erro ?Só faz um teste simples com o código que lhe passei, pode até mesmo ser em uma nova aplicação, somente para ver se funciona... Compartilhar este post Link para o post Compartilhar em outros sites
calcio 2 Denunciar post Postado Outubro 11, 2006 Era bobeira, a variavel q criei ñ era do tipo variant...depois parou de dar o erro do DeBUG. Agora quando rodo o prog da o erro.Exception class EOLE Exception With mesage 'Indice inválido'.Suspeitei do nome da planilha do CSV mas alterei para Plan1 como no exemplo + continua dando errovou verificar denovo o nome Compartilhar este post Link para o post Compartilhar em outros sites
marcio.theis 3 Denunciar post Postado Outubro 11, 2006 Que estranho mesmo, acabei de criar uma planilha aqui e testei, funfou legal... Compartilhar este post Link para o post Compartilhar em outros sites
calcio 2 Denunciar post Postado Outubro 11, 2006 Ignore a outra MSG. Descobri q no arquivo CSV o nome da planílha assume o nome do arquivo...como pode ver eu peego o arquivo via campo txt. EdCaminho.TextComo faria pra Pegar só o nome do arquivo, ignorando o caminho e a extenção.Em PHP eu saberia fazer usaria o Mid ou o str_pos mas no delphi ñ sei como se faz. pode me dar essa ajuda? Compartilhar este post Link para o post Compartilhar em outros sites
marcio.theis 3 Denunciar post Postado Outubro 11, 2006 você pode usar a função ChangeFileExt ChangeFileExt(ExtractFileName('CAMINHO_DO_ARQUIVO\NOME_ARQUIVO.xls'),'');No caso vai alterar a extenção, removendo o .xls Compartilhar este post Link para o post Compartilhar em outros sites
calcio 2 Denunciar post Postado Outubro 11, 2006 Marcio pode me dar + um help. rsFiz oq falouNomePlan := ChangeFileExt(ExtractFileName(EdCaminho.Text),'');//ShowMessage(NomePlan);Plan := ExcelApplication1.Workbooks[1].Worksheets[NomePlan];TotalLinhas := Plan.Cells.SpecialCells(11).Row;No ShowMessage ele mostra Bonitinho o nome mas quando jogo pra função ele da errotentei das seguintes maneiras..Plan := ExcelApplication1.Workbooks[1].Worksheets[NomePlan];Plan := ExcelApplication1.Workbooks[1].Worksheets['+NomePlan+'];Plan := ExcelApplication1.Workbooks[1].Worksheets['NomePlan'];Aí da o erro de 'Indice inválido'. Compartilhar este post Link para o post Compartilhar em outros sites
marcio.theis 3 Denunciar post Postado Outubro 11, 2006 O correto éPlan := ExcelApplication1.Workbooks[1].Worksheets[NomePlan];No caso se no showMessage ele mostra certinho, depois ele não tem como mudar, visto que não tem nenhuma alteração para isto... Compartilhar este post Link para o post Compartilhar em outros sites
calcio 2 Denunciar post Postado Outubro 11, 2006 Valeu Marcio,Agora ta funcionando perfeito!Abraços Compartilhar este post Link para o post Compartilhar em outros sites
marcio.theis 3 Denunciar post Postado Outubro 11, 2006 Opa... Coisa boa, tinha mais alguma alteração para ser feita ? Se era algo na função que precisava mudar, pode postar, pode ajudar outros membros... Compartilhar este post Link para o post Compartilhar em outros sites