Autor Téma: ADOpřipojení tabulky Excelu  (Přečteno 929 krát)

Offline Faltynek

  • Plnoletý
  • ***
  • Příspěvků: 196
  • Karma: 2
    • Verze Delphi: D5 Enterprise, D2009
Re:ADOpřipojení tabulky Excelu
« Odpověď #15 kdy: 12-04-2020, 14:39:28 »
Tak jsem to zkusil bez ADOConnection komponenty a to napřímo jsem do connectionstringu v ADOQuery zadal
Kód: Delphi [Vybrat]
  1. Provider=Microsoft.ACE.OLEDB.12.0;Data Source=d:\PT100.xlsx;Extended Properties=Excel 12.0;Persist Security Info=False
do SQLstringu potom Select * from [List1$]
a ejhle funguje to jak má.
Asi v té ADOConnection komponentě je něco, co se musí povolit ale neodhalil jsem co.

Dalibor. ???
Dalibor (D2009 Enterprise, dřív D5Enterprise)

Offline RomanNTA

  • Nováček
  • *
  • Příspěvků: 2
  • Karma: 0
    • Verze Delphi: Assembler; Pascal BP7; Delphi 2,4,6, (XE2)
Re:ADOpřipojení tabulky Excelu
« Odpověď #16 kdy: 13-04-2020, 21:27:29 »
Mám v tom seznam čidel s kalibračníma konstantama. V měřicím programu si podle čísla čidla načítám konstanty a kalibrační lhůty. Teď to mám tak, že to vyplním v excelu a převedu do csv a tu csv tabulku pak načítám jako texták a v Delphi parsuju přes středníky. Tomu převádění bych se rád vyhnul. Potud by mi stačilo tabulku jenom načíst, ale když narazím na čidlo, které má třeba novou kalibraci, nebo v tabulce vůbec není, rád bych ho přímo doplnil a uložil zpátky to toho excelu.
Normálně bych to asi nechal plavat, ale teď jsem doma a mám čas, tak procházím resty. Tak proto.
A proč je to v Excelu? No má to historické kořeny.

Dalibor.

Ahoj. Je nutný ten přístup přes ADO ? Přímo z Delphi se dá přistupovat k Excelu přes COM, DCOM, číst/vkládat data do buněk,  spouštět makra apod. Není to pro Tebe lepší způsob ? Kdysi se mi moc líbil import OLB (?) souboru, který vytvořil, interface + server Excelu a pomocí toho se pak ovládal Excel jak tahací panák. (... jen myšlenka, tak mě nekamenujte).
R.

Offline Faltynek

  • Plnoletý
  • ***
  • Příspěvků: 196
  • Karma: 2
    • Verze Delphi: D5 Enterprise, D2009
Re:ADOpřipojení tabulky Excelu
« Odpověď #17 kdy: 13-04-2020, 22:33:36 »
Ahoj
a děkuji za odpověď. Přes to názvosloví jsem nikdy moc nebyl, možná myslels něco jako
Kód: Delphi [Vybrat]
  1.      AppExcel:=createoleobject('Excel.Application');
  2.      AppExcel.visible:=true;
  3.      AppExcel.SheetsInNewWorkbook:= 2 + pocetlistuEL;
  4.      AppExcel.workbooks.Add;
  5.      verze:=AppExcel.Version;
  6.      if strtofloat(copy(verze,1,2)) > 11 then FExcelName:=copy(F2name,1,length(F2name)-3) + 'xlsx' else FExcelName:=copy(F2name,1,length(F2name)-3) + 'xls';
  7.      listfyz:=AppExcel.Workbooks[1].Worksheets[2];
  8.      if flagexportall then listEL:=AppExcel.Workbooks[1].Worksheets[3];
  9.      listfyz.select;
  10.      haj:=pocetmist;
  11.      Matice:= VarArrayCreate([1,pocmer+8,1,haj+1],varVariant);
  12.  
a potom třeba
Kód: Delphi [Vybrat]
  1.         { *** Cyklus načtení hodnot do matic *** }
  2.         for i := 1 to pocmer do
  3.         begin
  4.             k:=0;
  5.             for j := 1 to pocetmist do
  6.             begin
  7.                 read(F2, recF2);
  8.                 if (j=1) then
  9.                 begin
  10.                     matice[8+i,j]:=recF2.cas1;
  11.                     if flagexportall then maticeEL[8+i,j]:=recF2.cas1;
  12.                 end;
  13.                 if (j>=lou) and (j<=haj) then k:=k+1;
  14.                 matice[8+i,k+1]:=recF2.mfyz1;
  15.                 if flagexportall then maticeEL[8+i,k+1]:=recF2.mdat1;
  16.             end;   //j
  17.         end;   //i
  18.         { *** Nakopírování naměřených hodnot do listu *** }
  19.         listfyz.Range[listfyz.cells[1,1], listfyz.cells[pocmer+8,haj+1]].Value := Matice;
  20.         { *** Nakopírování elektrických hodnot do listu *** }
  21.         if flagexportall then listEL.Range[listEL.cells[1,1], listEL.cells[pocmer+8,haj+1]].Value := MaticeEL;
  22.  
  23.         VarClear(matice);
  24.         VarClear(maticeEL);
  25.  
  26.         { *** Nakopírování vzorců do listu *** }
  27.         listfyz.Range[listfyz.Cells[4, 2], listfyz.Cells[4, haj - lou + 2]].FormulaR1C1:= '=AVERAGE(R[+5]C:R' + Trim(IntToStr(Pocmer+8)) + 'C)';
  28.         listfyz.Range[listfyz.Cells[5, 2], listfyz.Cells[5, haj - lou + 2]].FormulaR1C1:= '=MIN(R[+4]C:R' + Trim(IntToStr(Pocmer+8)) + 'C)';
  29.         listfyz.Range[listfyz.Cells[6, 2], listfyz.Cells[6, haj - lou + 2]].FormulaR1C1:= '=MAX(R[+3]C:R' + Trim(IntToStr(Pocmer+8)) + 'C)';
  30.         listfyz.Range['A8'].FormulaR1C1:= '=Count(R9C2:R' + Trim(IntToStr(Pocmer+8)) + 'C2)';
  31.         listfyz.Range[listfyz.Cells[7, 2], listfyz.Cells[7, haj - lou + 2]].FormulaR1C1:= '=STDEV(R[+2]C:R' + Trim(IntToStr(Pocmer+8)) + 'C)/SQRT(R8C1)';  // + inttostr(pocmer);
  32.         ...
  33.  
tak to používám, i když ne zrovna na databázi čidel.

Jenže co když v počítači excel není a je tam nějaký open office apod.
Dalibor.

Dalibor (D2009 Enterprise, dřív D5Enterprise)

Offline RomanNTA

  • Nováček
  • *
  • Příspěvků: 2
  • Karma: 0
    • Verze Delphi: Assembler; Pascal BP7; Delphi 2,4,6, (XE2)
Re:ADOpřipojení tabulky Excelu
« Odpověď #18 kdy: 14-04-2020, 18:51:57 »
Ahoj. V podstatě ano. Předpokládám, že máš v Delphi komponentu, kterou používáš.
Ty jsi psal o načítání a ukládání do Excelu ... na to jsem reagoval. Že tam Excel není a nebo, že použiješ OpenOffice ... to mi v textu uniklo.

Offline Faltynek

  • Plnoletý
  • ***
  • Příspěvků: 196
  • Karma: 2
    • Verze Delphi: D5 Enterprise, D2009
Re:ADOpřipojení tabulky Excelu
« Odpověď #19 kdy: 17-04-2020, 09:19:51 »
Obvykle tam Excel je, ale není to vždycky tak. Někdy je nutné na měření použít místní počítač, který jej mít nemusí.
Dalibor (D2009 Enterprise, dřív D5Enterprise)