Announcement

Collapse
No announcement yet.

EXCEL-AutoFilter

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

  • EXCEL-AutoFilter

    Ich bringe es einfach nicht zustande aus Delphi heraus die Funktion AutoFilter zu aktivieren.

    Wenn ich über das Worksheet auf Autofilter zugreife bekomme ich immer einen OLE Fehler.

    Und die Funktion EnableAutofilter stürzt zwar nicht ab aber es passiert auch nichts.

    Dabei will ich nur Daten ins Excel importieren (mit dem ImportRecordset - geht prima) und den Menüpunkt Daten-Filter-Autofilter aktivieren bevor ich die Excel-Tabelle für weitere manuelle Barbeitung anzeige.

    Hab jetzt 3 Stunden im Internet zugebracht aber nichts gefunden außer Beispielen die überhaupt nicht funktionieren oder die nur zu OLE Fehlern führen. Hab auch bei MSDN nachgeschaut aber die Beispiele dort sind überhaupt nicht umsetzbar weil die Parameterlisten (viele Felder sind optional) nicht übereinstimmen mit dem was Delphi 5.0 Enterprise und EXCEL2000_TLB erwartet bzw. wenn sie mal stimmen dann beim ausführen immer zu einem OLE Fehler führen.

    Hat damit jemand schon Erfahrung?

    Lg
    Peter

  • #2
    Probiere mal das:<p>
    <pre class="sourcecode"><code>
    <b>procedure</b> TForm1.Button1Click(Sender: TObject);
    <b>var</b> ExcelRange : Excel97.Range;
    ExcelApplication : Excel97.TExcelApplication;
    ExcelWorkbook : Excel97.TExcelWorkbook;
    ExcelWorkSheet: Excel97._WorkSheet;
    OleRange: OleVariant;
    <b>begin</b>
    ExcelApplication := TExcelApplication.Create(Self);
    ExcelApplication.Connect;
    ExcelApplication.Visible[0] := True;

    ExcelWorkbook := TExcelWorkbook.Create(Self);

    ExcelWorkbook.ConnectTo(ExcelApplication.WorkBooks .Add(EmptyParam,0));
    ExcelWorkSheet := ExcelWorkbook.Sheets.Item[1] <b>as</b> _WorkSheet;
    <b>Try</b>
    ExcelWorkSheet.AutoFilterMode[0] := False;
    ExcelRange := ExcelWorkSheet.Range [<font color="#9933CC">'G1'</font>, <font color="#9933CC">'G1'</font>];
    ExcelRange.Formula := <font color="#9933CC">'1'</font>;
    ExcelRange := ExcelWorkSheet.Range [<font color="#9933CC">'G2'</font>, <font color="#9933CC">'G2'</font>];
    ExcelRange.Formula := <font color="#9933CC">'2'</font>;
    ExcelRange := ExcelWorkSheet.Range [<font color="#9933CC">'G3'</font>, <font color="#9933CC">'G3'</font>];
    ExcelRange.Formula := <font color="#9933CC">'3'</font>;
    OleRange := ExcelWorkSheet.Range [<font color="#9933CC">'G1'</font>, <font color="#9933CC">'G1'</font>];
    OleRange.AutoFilter;
    <font color="#003399"><i>// ExcelRange.AutoFilter(EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam); </i></font>
    <b>Finally</b>
    ExcelWorkSheet := <b>NIL</b>;
    ExcelWorkbook.Free;
    ExcelApplication.Free;
    <b>END</b>;
    <b>end</b>;

    </code></pre><p>
    Es scheint da im Import der Unit einen Fehler zu geben. Geht man über die späte Bindung, tut es aber.
    <p>Schöne Grüße, Mario Noac
    Schöne Grüße, Mario

    Comment


    • #3
      Hallo Mario,

      Danke klappt jetzt.

      Eine Frage noch die Gurus.
      Kann man die TLB nachbessern wenn solche Sachen passieren?

      LG
      PEte

      Comment

      Working...
      X