// Speichern der Änderungen am Dokument
procedure TVokabelnEditForm.FormClose(Sender: TObject; var Action: TCloseAction);
// ist Excel geöffnet???
function IsObjectActive(ClassName: string): Boolean;
var
ClassID: TCLSID;
Unknown: IUnknown;
begin
try
ClassID := ProgIDToClassID(ClassName);
Result := GetActiveObject(ClassID, nil, Unknown) = S_OK;
except
// raise;
Result := False;
end;
end;
var
myExcel, sheet: OLEVariant;
zeile: Integer;
selectedRect: TGridRect;
begin
if IsObjectActive('Excel.Application') then
ShowMessage('Excel is running !');
if bWereThereChangings = true then begin
if MessageDlg('Sollen die Änderungen übernommen werden?', mtWarning, [mbYes,mbNo,mbAbort], 0) = mrYes then
begin
// alle Leerzeilen bzw. unvollständigen Zeilen löschen
for zeile := 1 to StringGrid1.RowCount-1 do
// leere Zeile gefunden
if (StringGrid_pruefeZeileAufVollstaendigkeit(StringGrid1, zeile) = false) then begin
// leere Zeile gefunden --> löschen
// dazu ein Feld der aktuellen leeren Zeile markieren
selectedRect.Top := zeile;
selectedRect.Bottom := zeile;
selectedRect.Left := 1;
selectedrect.Right := 1;
StringGrid1.Selection := selectedRect;
// und dann die vorgefertigte StringGridFunktion aufrufen
StringGrid_selektierteZeilenLoeschen(StringGrid1);
end;
// Sortieren nach der 1. Spalte
SortStringGrid(StringGrid1, 1);
////////////////////////////////////////////////////////////////////////////
//
// Inhalte des Grids abspeichern
//
try
// Create Excel-
OLE Object
myExcel := CreateOleObject('Excel.Application')
except
ShowMessage('Excel konnte nicht gestartet werden!');
exit
end;
// Excel verbergen
myExcel.Visible := false;
// Anlegen einer Arbeitsmappe
myExcel.Workbooks.Add(xlWBatWorkSheet);
Sheet := myExcel.Workbooks[1].WorkSheets[1];
//Sheet := myExcel.Workbooks[ExtractFileName(sVokabelListFile)].WorkSheets[1];
//Sheet.Name := ASheetName;
for zeile:=1 to StringGrid1.RowCount-1 do begin
Sheet.Cells[1, zeile].Value := StringGrid1.Cells[1,zeile];
Sheet.Cells[2, zeile].Value := StringGrid1.Cells[2,zeile];
end;
// der Datei einen Namen geben wenn keiner vorhanden
if sVokabelListFile = '' then
if SaveDialog1.Execute then
sVokabelListFile := SaveDialog1.FileName;
try
myExcel.Workbooks[1].SaveAs(sVokabelListFile);
except
on E:
Exception do begin
ShowMessage('Fehler beim Speichern aufgetreten: ' + E.message);
end
end;
// Quit Excel
if not VarIsEmpty(myExcel) then
begin
myExcel.DisplayAlerts := False;
myExcel.Quit;
myExcel := Unassigned;
Sheet := Unassigned;
end
end
end;
Action := caFree
end;