Was mache ich in Delphi mit "No Getenumerator Present" -Fehler, wenn ich eine für Schleifen über Excel Interop -Arbeitsblättersammlungen verwendete?

StackOverflow https://stackoverflow.com/questions/2448897

Frage

Ich versuche, ein Delphi -Programm zu schreiben, das jedes Arbeitsblatt in einer Excel -Datei durchschlägt und einige Zellen formatiert. Ich erhalte jedoch einen Fehler, während ich versuche, die für das Arbeitsbuch über die Sammlung von Workbooks zu verwenden. Der Fehler ist speziell:

DCC-Fehler] Office.pas (36): E2431 For-In-Erklärung kann nicht auf Sammelart 'Blättern' betrieben werden, da 'Blätter' kein Mitglied für 'Getzumerator' enthält oder es nicht zugänglich ist

Die Codezeile ist dies auf: IS:

for Worksheet in Workbook.Worksheets do

Die Definition von Arbeitsblatt und Arbeitsmappe lautet wie folgt:

var ExcelApp: ExcelApplication;
var Workbook: ExcelWorkbook;
var Worksheet: ExcelWorksheet;

Ich portiere diesen Code von C#mit Delphi, in dem er funktioniert. Weiß jemand, warum ich diesen Göttenumerator -Fehler bekommen würde? Ich verwende die Office 2007 Excel Interop -Datei und Embarcadero® Delphi® 2010 Version 14.0.3593.25826.

War es hilfreich?

Lösung

Ich bin mir nicht sicher, wie C# aufzählbare Sammlungen umgeht, aber für Delphi sucht es nach einer Methode in der Sammlung namens Gortenumerator, die einen Enumerator zurückgibt. Der Enumerator muss eine Datenstruktur sein, die mindestens die folgenden zwei Mitglieder enthält:

public
  function MoveNext: boolean;
  property Current: <some type> read <some read method>;
end;

Wenn Delphi sagt, dass 'Blätter' kein Mitglied für 'Gassenumerator' enthält oder es unzugänglich ist, bedeutet dies genau das, was es sagt. Entweder gibt es keinen Göttenumer auf Blättern, oder es ist keine öffentliche Methode. Wie sieht die Definition von Blättern aus?

Andere Tipps

C# behandelt Enumeratoren ähnlich wie Delphi. Es gibt eine ienumerable Schnittstelle mit zwei Methoden: MoveNext und Reset; und auch eine Eigenschaft namens Current.

Für die Eigenschaft von Excelworkbook.Sheets sollten Sie beachten, dass die MSDN -Dokumentation laut MSDN -Dokumentation über eine Gortenumerator -Methode verfügt, die von Delphi bereitgestellte Definition dieser Klasse jedoch keine solche Methode bietet. Vielleicht müssen Sie also eine neuere Version seiner Typbibliothek in Delphi importieren.

Bearbeiten: Basierend auf Kommentaren gibt es für das Objekt die Getenumerator -Methode, sodass diese Lösung wahrscheinlich falsch ist.

Es ist schon eine Weile her, dass ich Delphi verwendet habe, aber ich schätze, basierend auf dem Fehler ist, dass die Excelworksheet-Sammlung nicht aufgezählt wird, was bedeuten würde, dass eine für/jede Stilschleife nicht funktioniert, und Sie müssen ein C- wie für die Schleife:

 For  i := 1 to Length(Workbook.Worksheets) do
  Worksheet = Workbook.Worksheets[i];
end;
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top