Hi,<P>
mit dem folgenden Code versuche ich eine Excel-Datei zu erstellen und anschliessend Daten zu exportieren. Leider kriege ich es nicht hin, die Feldernamen in der ersten Zeile zu unterdrücken. Ich verwende Win2000 und MDAC 2.7. Export mit OLE-Automation kommt nicht in Frage, denn die Daten müssen auch dann generiert werden können, wenn kein Excel auf dem Rechner installiert ist. Hat jemand eine Idee?<BR>
<PRE>
type
TTestField = (tfField1,tfField2);
const
TestRecordsCount = 3;
TestFieldName : array[TTestField] of string = ('Field1','Field2');
TestFieldType : array[TTestField] of integer = (adVarWChar,adVarWChar);
TestRecords : array[0..TestRecordsCount-1,TTestField] of string =
(('Field10','Field20'),
('Field11','Field21'),
('Field12','Field22'));
procedure DoCreateExcel;
resourcestring
cCONNECTSTRING = 'Provider=Microsoft.Jet.OLEDB.4.0;' +
'Data Source=%s;' +
'Extended Properties="Excel 8.0;HDR=NO;"';
var
aCatalog : _Catalog;
aTable : _Table;
aRecSet : _RecordSet;
sDBName : String;
sConnStr : OleVariant;
aField : TTestField;
iRec : integer;
begin
sDBName := ExtractFilePath(Application.ExeName)+'test.xls';
sConnStr := Format(cCONNECTSTRING,[sDBName]);
if FileExists(sDBName) then
DeleteFile(sDBName);
aCatalog := CoCatalog.Create;
aCatalog._Set_ActiveConnection(sConnStr);
aTable := CoTable.Create;
aTable.ParentCatalog := aCatalog;
aTable.Name := 'Test';
for AField := Low(TTestField) to High(TTestField) do
begin
aTable.Columns.Append(TestFieldName[AField], TestFieldType[AField], 0);
end;
aTable.Columns.Refresh;
aCatalog.Tables.Append(aTable);
aRecSet := CoRecordSet.Create;
with aRecSet do
try
Open(aTable.Name,sConnStr,adOpenStatic,adLockBatch Optimistic,adCmdTable);
for iRec := 0 to TestRecordsCount - 1 do
begin
AddNew(EmptyParam,EmptyParam);
for aField := Low(TTestField) to High(TTestField) do
Fields.Item[integer(aField)].Value := TestRecords[iRec,aField];
UpdateBatch(adAffectCurrent);
end
finally
if State = adStateOpen then
Close;
end;
end;
</PRE><P>
Peter
mit dem folgenden Code versuche ich eine Excel-Datei zu erstellen und anschliessend Daten zu exportieren. Leider kriege ich es nicht hin, die Feldernamen in der ersten Zeile zu unterdrücken. Ich verwende Win2000 und MDAC 2.7. Export mit OLE-Automation kommt nicht in Frage, denn die Daten müssen auch dann generiert werden können, wenn kein Excel auf dem Rechner installiert ist. Hat jemand eine Idee?<BR>
<PRE>
type
TTestField = (tfField1,tfField2);
const
TestRecordsCount = 3;
TestFieldName : array[TTestField] of string = ('Field1','Field2');
TestFieldType : array[TTestField] of integer = (adVarWChar,adVarWChar);
TestRecords : array[0..TestRecordsCount-1,TTestField] of string =
(('Field10','Field20'),
('Field11','Field21'),
('Field12','Field22'));
procedure DoCreateExcel;
resourcestring
cCONNECTSTRING = 'Provider=Microsoft.Jet.OLEDB.4.0;' +
'Data Source=%s;' +
'Extended Properties="Excel 8.0;HDR=NO;"';
var
aCatalog : _Catalog;
aTable : _Table;
aRecSet : _RecordSet;
sDBName : String;
sConnStr : OleVariant;
aField : TTestField;
iRec : integer;
begin
sDBName := ExtractFilePath(Application.ExeName)+'test.xls';
sConnStr := Format(cCONNECTSTRING,[sDBName]);
if FileExists(sDBName) then
DeleteFile(sDBName);
aCatalog := CoCatalog.Create;
aCatalog._Set_ActiveConnection(sConnStr);
aTable := CoTable.Create;
aTable.ParentCatalog := aCatalog;
aTable.Name := 'Test';
for AField := Low(TTestField) to High(TTestField) do
begin
aTable.Columns.Append(TestFieldName[AField], TestFieldType[AField], 0);
end;
aTable.Columns.Refresh;
aCatalog.Tables.Append(aTable);
aRecSet := CoRecordSet.Create;
with aRecSet do
try
Open(aTable.Name,sConnStr,adOpenStatic,adLockBatch Optimistic,adCmdTable);
for iRec := 0 to TestRecordsCount - 1 do
begin
AddNew(EmptyParam,EmptyParam);
for aField := Low(TTestField) to High(TTestField) do
Fields.Item[integer(aField)].Value := TestRecords[iRec,aField];
UpdateBatch(adAffectCurrent);
end
finally
if State = adStateOpen then
Close;
end;
end;
</PRE><P>
Peter