2010-03-01 5 views
4

Je suis en train d'ouvrir un classeur Excel 2003 et l'enregistrer comme quelque chose d'autre, par exemple Excel 95. J'utilise le code suivant:erreur Ole 800A03EC lors de l'utilisation méthode TExcelWorkBook SaveAs Delphi 7

XLSApp:=TExcelApplication.Create(Self); 
XLSApp.Workbooks.Open(SomeFileName,NULL,false,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,defaultlcid); 
XLSWB:=TExcelWorkbook.Create(XLSApp); 
XLSWB.ConnectTo(XLSApp.Workbooks.Item[1]); 
XLSWB.SaveCopyAs(ExtractFilePath(edTable.Text)+'temp.xls'); 
XLSWB.SaveAs(SomeOtherFileName,xlExcel7,EmptyParam,EmptyParam,False,False,xlNoChange,xlUserResolution,False,EmptyParam,EmptyParam,EmptyParam,DefaultLCID); 

Malheureusement, cette code donne "Ole 800A03EC" sur l'ordinateur des clients, alors que cela fonctionne sur le mien. Notez que j'ai installé Office 2007 et Office 2003 SP3.

Toute aide serait grandement appréciée.

Répondre

9

J'ai déjà vu cette erreur lors de l'automatisation d'Excel. C'est arrivé quand l'utilisateur avait une cellule dans editmode et que vous avez essayé d'automatiser cette instance. Excel ne l'aime pas lorsque vous modifiez une cellule et que certains programmes fonctionnent en arrière-plan.

Donc, c'est ce qui se passe à votre client (je pense):

  • Votre client a Excel ouvert et est édition d'une cellule (sélectionner une cellule et appuyez sur F2)
  • Votre code commence:
    • Vous créez une application TExcelApplication et accède à la propriété Classeurs. Puisque votre application Excel n'est pas encore connectée, elle appelle TOleServer.Connect (regardez l'implémentation de GetDefaultInterface)
    • Puisque la connexion par défaut est ckRunningOrNew, TExcelApplication se connecte à l'instance en cours d'exécution.
    • Étant donné que le client modifie une cellule, vous obtenez une erreur sur la méthode Open.

Comment vous pouvez empêcher ceci: Set ConnectKind de votre TExcelApplication à ckNewInstance que vous gardiez toujours travailler dans une instance Excel distincte.

+0

Merci, je vais essayer –

1

OLE 800A03EC a généralement à voir avec les caractères non valides dans votre fichier Excel. Utilisez-vous les mêmes données que votre client? Y a-t-il une différence dans les paramètres régionaux? Etc. etc. il pourrait y avoir un certain nombre d'erreurs pour cela, mais le plus probable (comme un rapide google m'a dit) c'est un paramètre régional.

+0

Les paramètres régionaux sont probablement différents. Le fichier que nous utilisons est le même. J'ai besoin du programme pour fonctionner correctement sur tous les paramètres reginal, alors que dois-je faire? –

1

Dans mon cas (format xlExcel8):

Au lieu de:

theWorkbookWyjscie.SaveAs(saveFileDialog1.FileName, myExcel.XlFileFormat.xlExcel8); 

J'utilisé:

theWorkbookWyjscie.SaveAs(saveFileDialog1.FileName); 

ou

theWorkbookWyjscie.SaveAs(saveFileDialog1.FileName, myExcel.XlFileFormat.xlExcel7); 

Les deux fonctionnent bien ... Et oui, je sais que c'est stupide solution d'identification, mais ça marche!

2

800A03EC se produit également lorsque l'un (comme moi) fait une chose stupide comme essayer de charger dans une cellule Excel qui n'existe pas, comme:

excel.Cells[rowIndex, ri] = x; 
where ri is 0. 

NOTE BENE: L'indice col commence à 1 , pas 0.

0

Je reçois cette erreur lorsque vous essayez de stocker trop de données à la feuille (par Delphi)

Questions connexes