Dans Delphi, que dois-je faire erreur « non présent GetEnumerator » lors de l'utilisation d'une boucle sur la collection Excel Interop Feuilles de travail?

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

Question

Je suis en train d'écrire un programme Delphi qui boucle à travers chaque feuille de calcul dans un fichier Excel et formater des cellules. Je reçois une erreur en essayant d'utiliser la boucle for-in sur la collection Workbook.Worksheets, cependant. L'erreur est spécifiquement:

  

[Erreur CDC] Office.pas (36): E2431   for-in ne peut pas fonctionner sur   type de collection « Feuilles » parce que   « Feuilles » ne contient pas de membre pour   'GetEnumerator', ou il est inaccessible

La ligne de code de ce produit est la suivante:

for Worksheet in Workbook.Worksheets do

La définition de la feuille de travail et le classeur est comme suit:

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

Je suis le portage de ce code à Delphi de C #, dans lequel il fonctionne. Est-ce que quelqu'un sait pourquoi j'obtiendrais cette erreur GetEnumerator? J'utilise Office 2007 fichier Excel Interop et Embarcadero® Delphi® 2010 Version 14.0.3593.25826.

Était-ce utile?

La solution

Je ne sais pas comment gère C # collections énumérables, mais pour Delphi, il semble une méthode sur la collection appelée GetEnumerator, qui retourne un recenseur. L 'agent doit être une structure de données qui contient au moins les deux éléments suivants:

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

Si Delphi dit « Feuilles » ne contient pas membre pour « GetEnumerator », ou il est inaccessible, alors cela signifie exactement ce qu'il dit. Soit il n'y a pas GetEnumerator sur les feuilles, ou ce n'est pas une méthode publique. Qu'est-ce que la définition de feuilles ressemble?

Autres conseils

C # gère les agents recenseurs similaires à Delphi. Il existe une interface IEnumerable qui a deux méthodes: MoveNext et Reset; et également une propriété appelée actuelle.

Pour propriété ExcelWorkBook.Sheets, vous devez prendre note que, bien que la documentation MSDN dit qu'il a une méthode GetEnumerator, la définition de cette classe dans l'unité ExcelXP fournie par Delphi ne fournit pas une telle méthode. vous avez donc peut-être importer une version plus récente de sa bibliothèque de type dans Delphi.

EDIT: D'après les commentaires, la méthode GetEnumerator existe pour l'objet, de sorte que cette solution est probablement incorrecte

.

Il a été un moment que je l'ai utilisé Delphi, mais je pense basé sur l'erreur est que la collecte ExcelWorksheet n'énumérait, ce qui voudrait dire faire un pour / chaque boucle de style ne fonctionnerait pas et vous auriez besoin d'utiliser un C-like boucle for:

 For  i := 1 to Length(Workbook.Worksheets) do
  Worksheet = Workbook.Worksheets[i];
end;
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top