Autor Beitrag
Bergmann89
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1742
Erhaltene Danke: 72

Win7 x64, Ubuntu 11.10
Delphi 7 Personal, Lazarus/FPC 2.2.4, C, C++, C# (Visual Studio 2010), PHP, Java (Netbeans, Eclipse)
BeitragVerfasst: Di 06.03.07 12:22 
HI,

ich hab mir jetz die Fkt. zum exportieren eines StringGrids zu einer Exceldatei
in mein Prog übernommen. Ich brauch aber unterschiedliche Spaltenbreiten, kann
mir jemand sagen wie ich das bewerkstelligen kann, gleich wenn ich das Grid exportiere?!

MfG Bergmann.
IngoD7
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 629


D7
BeitragVerfasst: Di 06.03.07 12:26 
Wie exportierst du denn? Schickst du's mit der Post oder machst du eine CSV-Datei oder direkt eine XLS-Datei?
Bergmann89 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1742
Erhaltene Danke: 72

Win7 x64, Ubuntu 11.10
Delphi 7 Personal, Lazarus/FPC 2.2.4, C, C++, C# (Visual Studio 2010), PHP, Java (Netbeans, Eclipse)
BeitragVerfasst: Di 06.03.07 12:31 
HI, so mach ich das: HIER
JoelH
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 806
Erhaltene Danke: 17

Win10
Delphi Alexandria 11.2 Patch 1
BeitragVerfasst: Di 06.03.07 15:21 
tuts auch ein Autofit?

Den machst du so:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
procedure Excel_autofit(app_Excel:Variant;wb,sh:integer);
begin
  app_Excel.workbooks[wb].sheets[sh].Cells.select;
  app_Excel.Selection.Columns.autofit;
end;


App_Excel ist das Excel-OLE, wb das Workbook und sh das Worksheed welches du "autofitten" möchtest.

_________________
mfg. Joel
Bergmann89 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1742
Erhaltene Danke: 72

Win7 x64, Ubuntu 11.10
Delphi 7 Personal, Lazarus/FPC 2.2.4, C, C++, C# (Visual Studio 2010), PHP, Java (Netbeans, Eclipse)
BeitragVerfasst: Do 08.03.07 19:33 
HI, das mit dem Autofit sieht schoma ordentlich aus, Danke.
Kann ich auch einzellne Zellen einfärben, bzw den Font ändern?
Oder gibt es n gutet Tutorial zu der Excel verarbeitung?

MfG & Thx Bergmann.
Keldorn
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 2266
Erhaltene Danke: 4

Vista
D6 Prof, D 2005 Pro, D2007 Pro, DelphiXE2 Pro
BeitragVerfasst: Do 08.03.07 21:17 
klar kannst du Zellen färben und Fonts ändern.
Nutz den Makrorekorder, zeichne ein Makro auf und mach die gewünschten Aktionen. Anschließend makro anguggn, und den vba-code in Delphi umschreiben. Mit Hilfe des Makros hast du am einfachsten alle benötigten Befehle, Parameter und Konstanten.

Mfg Frank

_________________
Lükes Grundlage der Programmierung: Es wird nicht funktionieren.
(Murphy)
JoelH
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 806
Erhaltene Danke: 17

Win10
Delphi Alexandria 11.2 Patch 1
BeitragVerfasst: Fr 09.03.07 12:17 
user profile iconKeldorn hat folgendes geschrieben:

Nutz den Makrorekorder, zeichne ein Makro auf und mach die gewünschten Aktionen. Anschließend makro anguggn, und den vba-code in Delphi umschreiben. Mit Hilfe des Makros hast du am einfachsten alle benötigten Befehle, Parameter und Konstanten.


hehe,
diese Methode nutze ich auch, geht wunderbar. Meistens.....

Ein paar Funktionen hab ich mir dabei gebalstelt die ich öffters benötige:

ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
112:
113:
114:
115:
116:
117:
118:
119:
120:
121:
122:
123:
124:
125:
126:
127:
128:
129:
130:
131:
132:
133:
134:
135:
136:
137:
138:
139:
140:
141:
142:
143:
144:
145:
146:
147:
148:
const      // Excelkonstanten werden benötigt.
  xlCenter = $FFFFEFF4;
  xlWorksheet = -4167;
  xlnone = -4142;
  xlContinuous = 1;
  xlDiagonalDown = 5;
  xlDiagonalup = 6;
  xlEdgeLeft = 7;
  xlEdgeTop = 8;
  xlEdgeBottom = 9;
  xlEdgeRight = 10;
  xlThin = 2;
  xlInsideVertical = 11;
  xlInsideHorizontal = 12;
  xlColumnClustered = 51;
  xlColumns = 2;
  xlRows = 1;
  xlCategory = 1;
  xlPrimary = 1;
  xlBottom = -4107;
  xlValue = 2;
  xlToRight = -4161;
  xlToLeft = -4159;
  xlLandscape = 2;
  xlPageBreakPreview = 2;
  xlNormalView = 1;


procedure Excel_autofit(app_Excel:Variant;wb,sh:integer);OVERLOAD;
procedure Excel_Spaltenfarbe(app_Excel:Variant;wb,sh,ro,ru,sl,sr:integer;farbe:TColor);
procedure Excel_Spaltenhintergrund(app_Excel:Variant;wb,sh,ro,ru,sl,sr:integer;farbe:Integer);
procedure Excel_Nummernformat(app_Excel:Variant;wb,sh,ro,ru,sl,sr:integer;format:String);
procedure Excel_Merge_Spalten(app_Excel:Variant;wb,sh,ro,ru,sl,sr:integer);
procedure Excel_Schriftgroesse(app_Excel:Variant;wb,sh,ro,ru,sl,sr,groesse:integer);
procedure Excel_Schriftart(app_Excel:Variant;wb,sh,ro,ru,sl,sr:Integer;fontstyle:String);
procedure Excel_autofit(app_Excel:Variant;wb,sh,ro,ru,sl,sr:integer);OVERLOAD;
procedure Excel_LineStyle(app_Excel:Variant;wb,sh,ro,ru,sl,sr,dd,du,el,er,eb,et,iv,ih,wdd,wdu,wel,wer,web,wet,wiv,wih:integer);
procedure Excel_Select(app_Excel:Variant;wb,sh,ro,ru,sl,sr:Integer);
procedure Excel_Zeilenumbruch(app_Excel:Variant;wb,sh,ro:Integer;hv:String);


procedure Excel_LineStyle(app_Excel:Variant;wb,sh,ro,ru,sl,sr,dd,du,el,er,eb,et,iv,ih,wdd,wdu,wel,wer,web,wet,wiv,wih:integer);
begin
  app_Excel.workbooks[wb].sheets[sh].Columns.Range[app_Excel.workbooks[wb].sheets[sh].Cells.Item[ro,sl],app_Excel.workbooks[wb].sheets[sh].Cells.Item[ru,sr]].Select;
  app_Excel.Selection.Borders[xlDiagonalDown].LineStyle := dd;
  app_Excel.Selection.Borders[xlDiagonalup].LineStyle := du;
  app_Excel.Selection.Borders[xlEdgeLeft].LineStyle := el;
  app_Excel.Selection.Borders[xlEdgeTop].LineStyle := et;
  app_Excel.Selection.Borders[xlEdgeBottom].LineStyle := eb;
  app_Excel.Selection.Borders[xlEdgeRight].LineStyle := er;
  if sl <> sr then
    app_Excel.Selection.Borders[xlInsideVertical].LineStyle := iv;
  if ru <> ro then
    app_Excel.Selection.Borders[xlInsideHorizontal].LineStyle := ih;
  if wdd <> xlnone then
    app_Excel.Selection.Borders[xlDiagonalDown].Weight := wdd;
  if wdu <> xlnone then
    app_Excel.Selection.Borders[xlDiagonalup].Weight := wdu;
  if wel <> xlnone then
    app_Excel.Selection.Borders[xlEdgeLeft].Weight := wel;
  if wet <> xlnone then
    app_Excel.Selection.Borders[xlEdgeTop].Weight := wet;
  if web <> xlnone then
    app_Excel.Selection.Borders[xlEdgeBottom].Weight := web;
  if wer <> xlnone then
    app_Excel.Selection.Borders[xlEdgeRight].Weight := wer;
  if sl <> sr then
  begin
    if wiv <> xlnone then
      app_Excel.Selection.Borders[xlInsideVertical].Weight := wiv;
  end;
  if ru <> ro then
  begin
    if wih <> xlnone then
      app_Excel.Selection.Borders[xlInsideHorizontal].Weight := wih;
  end;
end;

procedure Excel_Zeilenumbruch(app_Excel:Variant;wb,sh,ro:Integer;hv:String);
var Before : IDispatch;
    st : String;
begin
   st := inttoStr(ro);
   if hv = 'h' then
   begin
     Before := app_Excel.workbooks[wb].sheets[sh].Rows[st];
     app_Excel.workbooks[wb].sheets[sh].HPageBreaks.add(Before);
   end
   else
   begin
     Before := app_Excel.workbooks[wb].sheets[sh].Columns[hv];
     app_Excel.workbooks[wb].sheets[sh].VPageBreaks.add(Before);
   end;
end;


procedure Excel_Select(app_Excel:Variant;wb,sh,ro,ru,sl,sr:Integer);
begin
  app_Excel.workbooks[wb].sheets[sh].Columns.Range[app_Excel.workbooks[wb].sheets[sh].Cells.Item[ro,sl],app_Excel.workbooks[wb].sheets[sh].Cells.Item[ru,sr]].Select;
end;

procedure Excel_Schriftart(app_Excel:Variant;wb,sh,ro,ru,sl,sr:Integer;fontstyle:String);
begin
  app_Excel.workbooks[wb].sheets[sh].Columns.Range[app_Excel.workbooks[wb].sheets[sh].Cells.Item[ro,sl],app_Excel.workbooks[wb].sheets[sh].Cells.Item[ru,sr]].Select;
  app_Excel.Selection.font.fontstyle := fontstyle;
end;

procedure Excel_Schriftgroesse(app_Excel:Variant;wb,sh,ro,ru,sl,sr,groesse:integer);
begin
  app_Excel.workbooks[wb].sheets[sh].Columns.Range[app_Excel.workbooks[wb].sheets[sh].Cells.Item[ro,sl],app_Excel.workbooks[wb].sheets[sh].Cells.Item[ru,sr]].Select;
  app_Excel.Selection.font.size := groesse;
end;

procedure Excel_Merge_Spalten(app_Excel:Variant;wb,sh,ro,ru,sl,sr:integer);
begin
  app_Excel.workbooks[wb].sheets[sh].Columns.Range[app_Excel.workbooks[wb].sheets[sh].Cells.Item[ro,sl],app_Excel.workbooks[wb].sheets[sh].Cells.Item[ru,sr]].Select;
  app_Excel.Selection.MergeCells := true;
end;

procedure Excel_Nummernformat(app_Excel:Variant;wb,sh,ro,ru,sl,sr:integer;format:String);
begin
  app_Excel.workbooks[wb].sheets[sh].Columns.Range[app_Excel.workbooks[wb].sheets[sh].Cells.Item[ro,sl],app_Excel.workbooks[wb].sheets[sh].Cells.Item[ru,sr]].select;
  app_Excel.Selection.NumberFormat := format;
end;

procedure Excel_Spaltenfarbe(app_Excel:Variant;wb,sh,ro,ru,sl,sr:integer;farbe:TColor);
begin
  app_Excel.workbooks[wb].sheets[sh].Columns.Range[app_Excel.workbooks[wb].sheets[sh].Cells.Item[ro,sl],app_Excel.workbooks[wb].sheets[sh].Cells.Item[ru,sr]].select;
  app_Excel.Selection.font.color := farbe;
end;

procedure Excel_Spaltenhintergrund(app_Excel:Variant;wb,sh,ro,ru,sl,sr:integer;farbe:Integer);
begin
  app_Excel.workbooks[wb].sheets[sh].Columns.Range[app_Excel.workbooks[wb].sheets[sh].Cells.Item[ro,sl],app_Excel.workbooks[wb].sheets[sh].Cells.Item[ru,sr]].select;
  app_Excel.Selection.Interior.colorindex := farbe;
end;

procedure Excel_autofit(app_Excel:Variant;wb,sh,ro,ru,sl,sr:integer);
begin
  app_Excel.workbooks[wb].sheets[sh].Columns.Range[app_Excel.workbooks[wb].sheets[sh].Cells.Item[ro,sl],app_Excel.workbooks[wb].sheets[sh].Cells.Item[ru,sr]].select;
  app_Excel.Selection.Columns.autofit;
end;

procedure Excel_autofit(app_Excel:Variant;wb,sh:integer);
begin
  app_Excel.workbooks[wb].sheets[sh].Cells.select;
  app_Excel.Selection.Columns.autofit;
end;


Grundsätzlich bedeutet
wb = Workbook
sh = Sheet
ro = reihe oben
ru = reihe unten
sl = spalte links
sr = spalte rechts

mit den vier unteren begrenzt du also immer den Bereich der Felder auf die Einfluss genommen wird.

Die Funktion Linestyle ist ein Killer, das ist äusserst unübersichtlich, leider hab ich "verdrängt" was da was bedeutet.

Ein Aufruf sieht so aus bei mir

ausblenden Delphi-Quelltext
1:
Excel_LineStyle(app_Excel,1,1,vonzeile,biszeile,von,bis,xlnone,xlnone,xlContinuous,xlContinuous,xlContinuous,xlContinuous,xlContinuous,xlContinuous,xlnone,xlnone,xlThin,xlThin,xlThin,xlThin,xlThin,xlThin);					

das muss man einfach ausprobieren.

_________________
mfg. Joel
Bergmann89 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1742
Erhaltene Danke: 72

Win7 x64, Ubuntu 11.10
Delphi 7 Personal, Lazarus/FPC 2.2.4, C, C++, C# (Visual Studio 2010), PHP, Java (Netbeans, Eclipse)
BeitragVerfasst: Fr 09.03.07 19:14 
Danke, habs jetzt auch geschaft, hab mir aber nciht so ne mühe gemacht mit den ganzen Proceduren^^
JoelH
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 806
Erhaltene Danke: 17

Win10
Delphi Alexandria 11.2 Patch 1
BeitragVerfasst: Mo 12.03.07 09:55 
user profile iconBergmann89 hat folgendes geschrieben:
Danke, habs jetzt auch geschaft, hab mir aber nciht so ne mühe gemacht mit den ganzen Proceduren^^


Ich hab das in einer eigenen Unit und die wird bei jedem Projekt eingehängt, spart Hirnschmalz, weil ich das sehr häufig brauche.

_________________
mfg. Joel