Lazarus 3.0 (2023.12.21.)
Letöltés

  • Oldal:
  • 1

TÉMA:

DBGrid kimentése excel-be 2016 aug. 24 18:13 #2088

  • budboy
  • budboy profilkép Témaindító
  • Új tag
  • Új tag
  • Hozzászólások: 8
  • Köszönetek: 0
***...müködik :)

és igazad volt rohadt egyszerű:)

procedure TForm1.Button1Click(Sender: TObject);
var
Exp: TFPSExport;
ExpSettings: TFPSExportFormatSettings;
TheDate: TDateTime;
begin
Dbf1.First; //assume we have a dataset called FDataset
Exp := TFPSExport.Create(nil);
ExpSettings := TFPSExportFormatSettings.Create(true);
try
ExpSettings.ExportFormat := efXLS; // choose file format
ExpSettings.HeaderRow := true; // include header row with field names
Exp.FormatSettings := ExpSettings; // apply settings to export object
Exp.Dataset:=Dbf1; // specify source
Exp.FileName := 'd:\datadump.xls';
Exp.Execute; // run the export
finally
Exp.Free;
ExpSettings.Free;
end;

end;


KÖSZI! :)

DBGrid kimentése excel-be 2016 aug. 24 17:48 #2087

  • budboy
  • budboy profilkép Témaindító
  • Új tag
  • Új tag
  • Hozzászólások: 8
  • Köszönetek: 0
Igen,megtaláltam napközben.
Van benne egy példaprogi is,aminek a 2része pont a kimentés,ott kicseréltem,hogy ne hozzon létre adatbázist,hanem használja már az enyémet.
De Extrenal:SIGSEGV hibával indul el.

Az mi lehet?

DBGrid kimentése excel-be 2016 aug. 24 12:18 #2086

  • JohnnyK
  • JohnnyK profilkép
  • Haladó forumozó
  • Haladó forumozó
  • Hozzászólások: 78
  • Köszönetek: 16
Sokféle módon megoldható a dolog, köztük az általad elkezdett Windows specifikus OLE megoldással is. Mégis, inkább javasolnék egy másik megközelítést, mert sokkal rövidebben, egyszerűbben megoldhatod vele az exportálást, ráadásul működni fog akár Linux alatt is. Van egy komponens: fpSpreadSheet . Dinamikusan fejlődik az utóbbi időben, és egyre többet tud. Ha legörgetsz a DatasetExport fejezetig, ott látsz egy rövid forráskódot. Ennyi lenne az egész. Ahhoz, hogy működjön, le kell töltened az fpSpreadSheet vagy a stabil, vagy az svn változatát, Lazarusban hozzá kell adnod ezt az új komponenst. Szerintem rövidebb, tömörebb, elegánsabb, mint az OLE-s megoldás, ráadásul működéséhez nem kell Excel-nek sem települve lennie a számítógépen.

DBGrid kimentése excel-be 2016 aug. 24 06:46 #2085

  • budboy
  • budboy profilkép Témaindító
  • Új tag
  • Új tag
  • Hozzászólások: 8
  • Köszönetek: 0
Folytatás gomb után
Mellékletek:

DBGrid kimentése excel-be 2016 aug. 24 06:45 #2084

  • budboy
  • budboy profilkép Témaindító
  • Új tag
  • Új tag
  • Hozzászólások: 8
  • Köszönetek: 0
A forrását már nem tudom,neten valahol.

Igen megjegyzés mert próbálkoztam
Mellékletek:

DBGrid kimentése excel-be 2016 aug. 24 05:38 #2083

  • Gábor
  • Gábor profilkép
  • Adminisztrátor
  • Adminisztrátor
  • Hozzászólások: 499
  • Köszönetek: 86
Mi a hibaüzenet? (Biztosan kaptál)
Honnan származik az eredeti forráskód? (Ha már azt írtad, hogy találtad)

+ A forráskódokat BB kóddal zárd közre a hozzászólásaidban, főleg ha ilyen hosszan idézed!

Annyi ránézésre is biztos, hogy az általad hivatkozott sor megjegyzésben található. Így hibát nem okozhat.
Továbbá a helyette(?) alatta lévő sor után hiba van: véletlen beillesztés vagy törlés után ott maradt "Dbf1.Fields.". Ilyen állapotban biztosan nem ment sehol:
end; Dbf1.Fields.
//write data
J:=1;
Hogyan kérdezzünk okosan? / Mit kell tennünk kérdezés előtt? -- Lazarus 3.0 -- FPC 3.2-- GNU/Linux 5.15.0 x86_64

DBGrid kimentése excel-be 2016 aug. 23 22:03 #2082

  • budboy
  • budboy profilkép Témaindító
  • Új tag
  • Új tag
  • Hozzászólások: 8
  • Köszönetek: 0
Hali

Találtam egy kodót,amivel elvileg ki lehetne menteni a DBGrid tartalmát Excelbe.

Data[1, I+1] := Dbf1.Fields.FieldName;

ennél a sornál akad meg
ha figyelem,akkor nem tudom bekapcsolni a függvényhívásokat...delphi-ben ez flottul ment

az adatbázis oké,vannak benne adatok





function RefToCell(ARow, ACol: Integer): string;

begin

Result := Chr(Ord('A') + ACol - 1) + IntToStr(ARow);

end;

procedure TForm1.SaveToExcelFile(const AFileName: TFileName);

const

Worksheet = -4167;

var

Row, Col: Integer;

Excel, Sheet, Data: OLEVariant;

I, J, DataCols, DataRows: Integer;

begin

DataCols := Dbf1.FieldCount;

DataRows := Dbf1.RecordCount + 1; //1 for the title



//Create a variant array the size of your data

Data := VarArrayCreate([1, DataRows, 1, DataCols], varVariant);



//write the titles

for I := 0 to DataCols - 1 do
begin
// Data[1, I+1] := Dbf1.Fields.FieldName;
Data[1, I+1] := Dbf1.Fields.Text;
end; Dbf1.Fields.



//write data



J := 1;

Dbf1.First;

while (not Dbf1.Eof) and (J < DataRows) do

begin

for I := 0 to DataCols - 1 do

Data[J + 1, I + 1] := Dbf1.Fields.Value;

Inc(J);

Dbf1.Next;

end;



//Create Excel-OLE Object

Excel := CreateOleObject('Excel.Application');

try

//Don't show excel

Excel.Visible := True;



Excel.Workbooks.Add(Worksheet);

Sheet := Excel.Workbooks[1].WorkSheets[1];

Sheet.Name := 'elsőke';


//Fill up the sheet

// Sheet.Range[RefToCell(1, 1), RefToCell(DataRows, DataCols)].Value := Data;

Sheet.Range[RefToCell(1, 1), RefToCell(DataRows, DataCols)].Value := 1;

//Save Excel Worksheet

try

// Excel.Workbooks[1].SaveAs(AFileName);

except

on E: Exception do

raise Exception.Create('Data transfer error: ' + E.Message);

end;

finally

if not VarIsEmpty(Excel) then

begin

Excel.DisplayAlerts := False;

// Excel.Quit;

Excel := Unassigned;

Sheet := Unassigned;

end;

end;

end;

  • Oldal:
  • 1