Lazarus 2.0.10 (2020.07.11.)
Letöltés

file DBGrid kimentése excel-be

  • budboy
  • budboy profilkép
  • Új fórumozó
  • Új fórumozó
  • Hozzászólások: 8
  • Köszönetek: 0

budboy válaszolt a témára: DBGrid kimentése excel-be

***...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! :)
#2088

  • budboy
  • budboy profilkép
  • Új fórumozó
  • Új fórumozó
  • Hozzászólások: 8
  • Köszönetek: 0

budboy válaszolt a témára: DBGrid kimentése excel-be

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?
#2087

  • JohnnyK
  • JohnnyK profilkép
  • Gyakori fórumozó
  • Gyakori fórumozó
  • Hozzászólások: 78
  • Köszönetek: 16

JohnnyK válaszolt a témára: DBGrid kimentése excel-be

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.
#2086

  • budboy
  • budboy profilkép
  • Új fórumozó
  • Új fórumozó
  • Hozzászólások: 8
  • Köszönetek: 0

budboy válaszolt a témára: DBGrid kimentése excel-be

Folytatás gomb után
#2085
Mellékletek:

  • budboy
  • budboy profilkép
  • Új fórumozó
  • Új fórumozó
  • Hozzászólások: 8
  • Köszönetek: 0

budboy válaszolt a témára: DBGrid kimentése excel-be

A forrását már nem tudom,neten valahol.

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

  • Gábor
  • Gábor profilkép
  • Adminisztrátor
  • Adminisztrátor
  • Hozzászólások: 432
  • Karma: 8
  • Köszönetek: 70

Gábor válaszolt a témára: DBGrid kimentése excel-be

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;
#2083

  • budboy
  • budboy profilkép
  • Új fórumozó
  • Új fórumozó
  • Hozzászólások: 8
  • Köszönetek: 0

budboy létrehozta a témát: DBGrid kimentése excel-be

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;
#2082