Announcement

Collapse
No announcement yet.

Export in Excel ohne Feldernamen

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Export in Excel ohne Feldernamen

    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
Working...
X