![]() |
Excel & Delphi (Experten gefragt!)
Hallo Delphi-Praxis Experten,
ich spreche hier extra die Fortgeschrittenen an, weil ich derzeit (denke ich) kein triviales "Hilfe, ich schaff es nicht zu Excel zu verbinden"-Problem habe. Kurz zusammengefasst: "EmptyParam" und "OLE Fehler 800A03EC". Die lange Version: :o Zur Vorgeschichte: Ich habe seit jeher (jahrelang) in Delphi 5 programmiert und mir einige recht komplexe Programme für die tägliche Arbeit gebastelt. Eines dieser Programme verbindet sich über eine COM-Schnittstelle zu Excel (2000, XP, 2003) und tat das derzeit ohne Probleme via Einbindung von "Excel2000" und "OleServer". Mir ist leider vor kurzem der Rechner abgeraucht und deswegen habe ich einen neuen herangezogen und sogleich auf eine "neue" Delphi-Version (nämlich 2005) installiert. Erfahrungsgemäß ging einiges nicht mehr, aber das war abzusehen, weswegen ich peut-à-peut nun umbaue. Ein Problem jedoch ist mir nicht verständlich, deswegen meine Frage: Compiliere ich den original Code (von D5) fällt mir als erstes auf, dass er "EmptyParam" nicht finden kann: Zitat:
Delphi-Quellcode:
Perfekt! Der Compiler-Fehler ist weg. "Prima!", dachte ich zumindest. Leider steckt der Teufel im Detail, und sobald das Programm an die Codestelle kommt, an der die "FExcel.Workbooks.Open" Funktion aufgerufen wird, kracht das ganze Kartenhaus in sich zusammen mit der Meldung:
procedure TExcel.OpenTemplate( TemplateFilename: String );
var EmptyParam: OleVariant; begin try // Close and disconnect the current workbook (if open) self.CloseOpenWorkbooks(); FExcelWBK.Disconnect(); self.LogEvent( WideFormat( _( 'Excel: Opening template using file "%s"...' ), [TemplateFilename] ), LS_NORMAL, LL_DEBUG ); // Open the template file FExcel.Workbooks.Open( TemplateFileName, EmptyParam, //UpdateLinks: OleVariant TRUE, //ReadOnly: OleVariant EmptyParam, //Format: OleVariant EmptyParam, //Password: OleVariant EmptyParam, //WriteResPassword: OleVariant EmptyParam, //IgnoreReadOnlyRecommended: OleVariant EmptyParam, //Orign: OleVariant EmptyParam, //Delimiter: OleVariant EmptyParam, //Editable: OleVariant EmptyParam, //Notify: OleVariant EmptyParam, //Converter: OleVariant EmptyParam, //AddToMru: OleVariant EmptyParam, //Local: OleVariant EmptyParam, //CorruptLoad: OleVariant FLocaleIdentifier ); // Connect the workbook FExcelWBK.ConnectTo( FExcel.ActiveWorkbook ); FLoaded := TRUE; except FLoaded := FALSE; FReady := FALSE; end; end; Zitat:
Delphi-Quellcode:
Und ab hier bin ich nun fraglos. :wall: Kann mir evtl. jemand bei der Lösung helfen?
constructor TExcel.Create();
begin FExcel := TExcelApplication.Create( nil ); FExcelWBK := TExcelWorkbook.Create( nil ); FExcelWS := TExcelWorksheet.Create( nil ); // Setup defaults FOnLogEvent := nil; FDefTemp := FALSE; FLoadedTemplate := ''; FReady := TRUE; FLoaded := FALSE; FKeyAccount := -999; FSubKeyAccount := -999; FCurrentLine := 0; try // Get current user locale ID FLocaleIdentifier := GetUserDefaultLCID(); // Setup general info FExcel.DisplayAlerts[FLocaleIdentifier] := FALSE; FExcel.AskToUpdateLinks[FLocaleIdentifier] := FALSE; FExcel.ScreenUpdating[FLocaleIdentifier] := FALSE; FExcel.Visible[FLocaleIdentifier] := ( ELogLevel( __LogLevel ) = LL_DEBUG ); FExcel.UserControl := ( ELogLevel( __LogLevel ) = LL_DEBUG ); // Connect to (a new or running instance of an) Excel application FExcel.ConnectKind := ckRunningOrNew; FExcel.Connect(); except FreeAndNil( FExcelWS ); FreeAndNil( FExcelWBK ); FreeAndNil( FExcel ); FReady := FALSE; end; end; Vielen Dank! Gruß, Christian |
Re: Excel & Delphi (Experten gefragt!)
EmptyParam ist in der Unit VARIANTS deklariert sein...
Grüße Mikhal |
Re: Excel & Delphi (Experten gefragt!)
Hallo moonwhaler,
gestern hatte ich ein ähnliches Problem. Hängt wahrscheinlich mit den unterschiedlichen Units Excel2000 bzw. ExcelXP zusammen. Bei einem müssen zwei Paramter mehr sein. Der Link ![]() hat mir weiter geholfen. Gruß, Linkat |
Re: Excel & Delphi (Experten gefragt!)
Zitat:
Folgende zwei sind dazugekommen:
Delphi-Quellcode:
Hat jemand eine Idee wozu "Local" oder "CorruptLoad" (da habe ich eine Ahnung) benötigt wird?
EmptyParam, //Local: OleVariant
EmptyParam, //CorruptLoad: OleVariant Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:52 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz