![]() |
Excel-Export formatieren
Hallo,
ich habe folgenden Quelltext, der prinzipiell auch ganz gut funktioniert: ![]()
Delphi-Quellcode:
Einige Probleme treten dabei aber auf:
procedure DBGridToExcelADO(DBGrid: TDBGrid; FileName: string; SheetName: string);
var cat: _Catalog; tbl: _Table; col: _Column; i: integer; ADOConnection: TADOConnection; ADOQuery: TADOQuery; ScrollEvents: TScrollEvents; SavePlace: TBookmark; begin // //WorkBook creation (database) cat := CoCatalog.Create; cat._Set_ActiveConnection('Provider=Microsoft.Jet.OLEDB.4.0; Data Source=' + FileName + ';Extended Properties=Excel 8.0'); //WorkSheet creation (table) tbl := CoTable.Create; tbl.Set_Name(SheetName); //Columns creation (fields) DBGrid.DataSource.DataSet.First; with DBGrid.Columns do begin for i := 0 to Count - 1 do if Items[i].Visible then begin col := nil; col := CoColumn.Create; with col do begin Set_Name(Items[i].Title.Caption); Set_Type_(adVarWChar); end; //add column to table tbl.Columns.Append(col, adVarWChar, 20); end; end; //add table to database cat.Tables.Append(tbl); col := nil; tbl := nil; cat := nil; //exporting ADOConnection := TADOConnection.Create(nil); ADOConnection.LoginPrompt := False; ADOConnection.ConnectionString := 'Provider=Microsoft.Jet.OLEDB.4.0; Data Source=' + FileName + ';Extended Properties=Excel 8.0'; ADOQuery := TADOQuery.Create(nil); ADOQuery.Connection := ADOConnection; ADOQuery.SQL.Text := 'Select * from [' + SheetName + '$]'; ADOQuery.Open; DisableDependencies(DBGrid.DataSource.DataSet, ScrollEvents); SavePlace := DBGrid.DataSource.DataSet.GetBookmark; try with DBGrid.DataSource.DataSet do begin First; while not Eof do begin ADOQuery.Append; with DBGrid.Columns do begin ADOQuery.Edit; for i := 0 to Count - 1 do if Items[i].Visible then begin ADOQuery.FieldByName(Items[i].Title.Caption).AsString := FieldByName(Items[i].FieldName).AsString; end; ADOQuery.Post; end; Next; end; end; finally DBGrid.DataSource.DataSet.GotoBookmark(SavePlace); DBGrid.DataSource.DataSet.FreeBookmark(SavePlace); EnableDependencies(DBGrid.DataSource.DataSet, ScrollEvents); ADOQuery.Close; ADOConnection.Close; ADOQuery.Free; ADOConnection.Free; end; end; - Wie könnte ich überprüfen, ob es den SheetName schon gibt und dementsprechend das sheet anders bennen? - Wie könnte ich die Spaltennamen formatieren (fett, bunt)? - alle Spalten werden als adVarWChar definiert und dadurch wird in Excel alles mit Hochkomma angezeigt, also auch meine Zahlen - ein ändern auf einen anderen Typ im Quelltext scheint nicht so einfach zu funktionieren Danke Tim P.S.: Ich hatte erst mit OLE exportiert, aber das lief um einiges zu langsam... |
Re: Excel-Export formatieren
OLE ist aber schon das richtige Stichwort. Es ist langsam, das stimmt, aber du kannst doch dein Export beibehalten, und dann nur über OLE die Formatierungen vornehmen.
Oder google mal nach nativen Excel Komponenten. Das geht dann wohl am Flottesten, die XLS direkt nativ zu erstellen und die Formatierungen vorzunehmen. |
Re: Excel-Export formatieren
Ok, dankeschön mit OLE klappt das doch wie gewünscht.
Nun habe ich folgenden Code, aber das Programm bleibt beim Beenden noch offen, also im Taskmanager. Fenster sind alle geschlossen:
Delphi-Quellcode:
Woran liegt das hier? Muss man da noch irgendetwas wieder freigeben?
procedure excelFormat;
const // SheetType xlChart = -4109; xlWorksheet = -4167; // WBATemplate xlWBATWorksheet = -4167; xlWBATChart = -4109; // Page Setup xlPortrait = 1; xlLandscape = 2; xlPaperA4 = 9; // Format Cells xlBottom = -4107; xlLeft = -4131; xlRight = -4152; xlTop = -4160; // Text Alignment xlHAlignCenter = -4108; xlVAlignCenter = -4108; // Cell Borders xlThick = 4; xlThin = 2; var ColumnRange: OleVariant; // function to get the number of Rows in a certain column function GetLastLine(AColumn: Integer): Integer; const xlUp = 3; begin Result := ExcelApp.Range[Char(96 + AColumn) + IntToStr(65536)].end[xlUp].Rows.Row; end; begin { Start Excel by using GetActiveOleObject, you use an instance of Word that's already running, if there is one.} try ExcelApp:= GetActiveOleObject('Excel.Application'); except try // if no instance of Word is running, try to Create a new Excel Object ExcelApp:= CreateOleObject('Excel.Application'); except Application.MessageBox (PChar ('Excel kann nicht gestartet werden!'+#13#10+ 'Wurde Excel installiert?'),'Excel nicht gefunden', mb_iconWarning+ MB_SETFOREGROUND + MB_SYSTEMMODAL); Exit; end; end; // Arbeitsmappe öffnen ExcelApp.Workbooks.Open('export.xls'); // Change the Column Width. ColumnRange:= ExcelApp.Workbooks[1].WorkSheets[1].Columns; ColumnRange.Columns[1].ColumnWidth := 20; ColumnRange.Columns[2].ColumnWidth := 20; ColumnRange.Columns[3].ColumnWidth := 20; ColumnRange.Columns[4].ColumnWidth := 20; ColumnRange.Columns[5].ColumnWidth := 20; // Fettdruck in den Zellen ExcelApp.Range['A1:Z1'].Font.Bold := True; // Zoom ExcelApp.ActiveSheet.PageSetup.Zoom := 95; // Show Excel: ExcelApp.Visible := True; end; Außerdem hab ich das Problem mit dem Hochkommas und den Datentyp noch nicht lösen können. Dankeschön Tim |
Re: Excel-Export formatieren
Zitat:
Delphi-Quellcode:
d.h. du machst Excel nur unsichtbar. Versuch mal ExcelApp.Quit oder Close oder Exit...
ExcelApp.Visible := True;
|
Re: Excel-Export formatieren
Das hat auch nicht geklappt, aber ExcelApp:= Unassigned; scheint zu gehen.
Hast du noch eine Idee mit diesen nervigen Hochkommas am Anfang jeder Zelle? |
Re: Excel-Export formatieren
Zitat:
|
Re: Excel-Export formatieren
Hallo Tim und Jelly,
Zitat:
Zitat:
Zitat:
Die Hochkommas wirst Du wahrscheinlich, nicht ohne Aufwand entfernen können. Bis bald Chemiker |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:23 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz