Delphi-Quellcode:
function StringToVariant(const SourceString : string) : Variant;
var
FloatValue : Double;
Grund: Variant kennt kein Extended und er würde es demnach vesuchen runterzurunden, welches bei zu großen Werten Fehler/Exceptions verursachen würde.
das ganze Try-Funally, inklusife der :=UnAssigned; kannst du weglassen, das macht Delphi automatisch, beim Verlassen der Funktionen.
Bei RefToCell ist das Col immer größer als 0?
Wenn nicht, dann wäre eine Fehlerprüfung/-behandlung angebracht.
Und statt dem wenig aussagenden Result würde ich eine etwas aussagekräftigere Fehlerbehandlung verwenden:
Delphi-Quellcode:
procedure ExportStringGridToExcel(StringGrid : TStringGrid);
var
Col : Integer;
Data : OleVariant;
ExcelApp : OleVariant;
MaxCol : Integer;
MaxRow : Integer;
Range : OleVariant;
Row : Integer;
Workbook : OleVariant;
Worksheet : OleVariant;
begin
//Verbindung zu Excel herstellen
ExcelApp := CreateOleObject('
Excel.Application');
if not VarIsNull(ExcelApp)
then
begin
//Neues Workbook öffnen
Workbook := ExcelApp.Workbooks.Add;
if not VarIsNull(Workbook)
then
begin
//Maximalen Bereich bestimmen
MaxCol := Min(StringGrid.ColCount, ExcelApp.Columns.Count);
MaxRow := Min(StringGrid.RowCount, ExcelApp.Rows.Count);
if (MaxRow > 0)
and (MaxCol > 0)
then
begin
//Worksheet auswählen
Worksheet := Workbook.ActiveSheet;
//Bereich auswählen
Range := Worksheet.Range[RefToCell(1, 1), RefToCell(MaxCol, MaxRow)];
if not VarIsNull(Range)
then
begin
//Daten aus Grid holen
Data := VarArrayCreate([1, MaxRow, 1, MaxCol], varVariant);
for Row := 0
to Pred(MaxRow)
do
for Col := 0
to Pred(MaxCol)
do
Data[Succ(Row), Succ(Col)] := StringToVariant(StringGrid.Cells[Col, Row])
//Daten dem Excelsheet übergeben
Range.Value := Data;
Range.Columns.AutoFit;
//Excel anzeigen
Workbook.Activate;
ExcelApp.Visible := True;
end;
end;
end else
raise Exception.Create('
neues Workbook konnte nicht angelegt werden');
end else
raise Exception.Create('
Excel.Application konnte nicht geladen werden');
end;
oder
Delphi-Quellcode:
procedure ExportStringGridToExcel(StringGrid : TStringGrid);
var
Col : Integer;
Data : OleVariant;
ExcelApp : OleVariant;
MaxCol : Integer;
MaxRow : Integer;
Range : OleVariant;
Row : Integer;
Workbook : OleVariant;
Worksheet : OleVariant;
begin
//Verbindung zu Excel herstellen
ExcelApp := CreateOleObject('
Excel.Application');
if VarIsNull(ExcelApp)
then
raise Exception.Create('
Excel.Application konnte nicht geladen werden');
//Neues Workbook öffnen
Workbook := ExcelApp.Workbooks.Add;
if VarIsNull(Workbook)
then
raise Exception.Create('
neues Workbook konnte nicht angelegt werden');
//Maximalen Bereich bestimmen
MaxCol := Min(StringGrid.ColCount, ExcelApp.Columns.Count);
MaxRow := Min(StringGrid.RowCount, ExcelApp.Rows.Count);
if (MaxRow > 0)
and (MaxCol > 0)
then
begin
//Worksheet auswählen
Worksheet := Workbook.ActiveSheet;
//Bereich auswählen
Range := Worksheet.Range[RefToCell(1, 1), RefToCell(MaxCol, MaxRow)];
if not VarIsNull(Range)
then
begin
//Daten aus Grid holen
Data := VarArrayCreate([1, MaxRow, 1, MaxCol], varVariant);
for Row := 0
to Pred(MaxRow)
do
for Col := 0
to Pred(MaxCol)
do
Data[Succ(Row), Succ(Col)] := StringToVariant(StringGrid.Cells[Col, Row])
//Daten dem Excelsheet übergeben
Range.Value := Data;
Range.Columns.AutoFit;
//Excel anzeigen
Workbook.Activate;
ExcelApp.Visible := True;
end;
end;
end;