Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Excel OLE Zellen formatieren (https://www.delphipraxis.net/57655-excel-ole-zellen-formatieren.html)

Micha 24. Nov 2005 18:24


Excel OLE Zellen formatieren
 
Hallo zusammen,

ich habe ein StringGrid, dessen Inhalt ich gerne nach Excel übergeben möchte. Das klappt auch einwandfrei.

Vereinfachte Darstellung:
Das StringGrid enthält 3 Zahlen, die ich mir erst in Excel mit der Summen-Formel zusammenzählen lassen möchte.
Übergebe ich nund die Zahlen nach Excel, so werden mir diese nicht korrekt dargestellt.

Excel setzt mir an die Ecke der Zelle den Hinweis auf den Formelüberwachungsassitenten. Auch sind weitere Kontext-Menü-Einträge vorhanden, mit denen ich das Ganze in eine Zahl umwandeln könnte ("In eine Zahl umwandeln").
Jetzt möchte ich aber nicht jede Zelle anklicken müssen, um diese als Zahl zu formatieren.

Hat jemand eine Idee? Hier im Forum habe ich schon gesucht. Ein vergleichbares Thema habe ich nicht gefunden.

Hier ein Ausschnitt meines bisherigen Codes:

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
i, j : integer;
 xls, wb, Range, Format: OLEVariant;
 arrData: Variant;
Sheet: OLEVariant;
 Excel: _Application;
begin
 {create variant array where we'll copy our data}
 arrData := VarArrayCreate([1, ws.RowCount, 1,
ws.ColCount], varVariant);

 {fill array}
 for i := 1 to ws.RowCount do
   for j := 1 to ws.ColCount do
     arrData[i, j] := ws.Cells[j-1, i-1];

 {initialize an instance of Excel}
 xls := CreateOLEObject('Excel.Application');

 {create workbook}
 wb := xls.Workbooks.Add;

 {retrieve a range where data must be placed}
 Range := wb.WorkSheets[1].Range[wb.WorkSheets[1].Cells[1, 1],
 wb.WorkSheets[1].Cells[ws.RowCount, ws.ColCount]];

// nachfolgende in Kommentar gesetzte varianten funktionieren nicht

// Format := 'General';
// Sheet.Range['G3', 'G3'].EntireColumn.NumberFormat := Format;
//Format := '$#,##0.00_);[Red]($#,##0.00)';
//Sheet.range['G3', 'G3'].EntireColumn.NumberFormat := Format;
 xls.Visible := True;

 {copy data from allocated variant array}
 Range.Value := arrData;

 {show Excel with our data}
// xls.Visible := True;
end;

dataspider 24. Nov 2005 19:05

Re: Excel OLE Zellen formatieren
 
Also, es sollte etwa so gehen:
Delphi-Quellcode:
  wb.WorkSheets[1].Cells[x, y].Select;
  wb.WorkSheets[1].Selection.NumberFormat := '#.##0,00';
Cu, Frank

Micha 25. Nov 2005 06:44

Re: Excel OLE Zellen formatieren
 
hört sich auf den ersten Blick schon gut an, ja!

Es kommt aber die Meldung "Selection" wird vom Automatisierungsprozess nicht unterstützt :-(

Jens Schumann 25. Nov 2005 08:01

Re: Excel OLE Zellen formatieren
 
Zitat:

Zitat von Micha
hört sich auf den ersten Blick schon gut an, ja!

Es kommt aber die Meldung "Selection" wird vom Automatisierungsprozess nicht unterstützt :-(

So ist es richtig
Code:
 Excelsheet.Cells.Range_['B1','B1'].NumberFormat:='#.##0,00';
so könnte es auch klappen
Code:
 Excelsheet.Cells.Item[Row,Col].NumberFormat:='#.##0,00';


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:13 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz