Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.071 Beiträge
 
Delphi 12 Athens
 
#15

AW: virtualstringtree in excel exportieren

  Alt 16. Jul 2010, 09:37
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;
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat