Einzelnen Beitrag anzeigen

crowley

Registriert seit: 7. Jun 2006
Ort: Emmerich
9 Beiträge
 
#1

ExcelApplication: Setzen von DisplayAlerts verursacht Fehler

  Alt 10. Apr 2007, 19:17
Servus und Hallo,

Ich habe folgendes - nerviges - Problem: Ich möchte eine Excel- Datei mit "meinem" Programm ausdrucken. Allerdings schlägt dies mit der Fehlermeldung "Old format or invalid type library" fehl.

Delphi-Quellcode:
  xlsApp.Connect;
  try
    xlsApp.UserControl := False;
    xlsApp.Visible[GetUserDefaultLCID] := False;
    xlsApp.DisplayAlerts[GetUserDefaultLCID] := False; // Hier Fehler!

    xlsApp.Workbooks.Open(
                          ExpandFileName(loc_FileName), False, False,
                          EmptyParam, '', False, False, EmptyParam,
                          EmptyParam, False, False, EmptyParam,
                          EmptyParam, EmptyParam, False, 0
                         );
    xlsBook.ConnectTo(xlsApp.ActiveWorkBook);
    xlsSheet.ConnectTo(xlsBook.Sheets.Item[1] as _Worksheet);
    xlsSheet.Activate;
    xlsSheet.PageSetup.Zoom := False;
    xlsSheet.PageSetup.Orientation := xlLandscape;
    xlsSheet.PageSetup.FitToPagesWide := 1;
    xlsSheet.PageSetup.FitToPagesTall := False;
    xlsSheet.PrintOut(
                      1, 5000, 1, False,
                      Printer.Printers[Printer.PrinterIndex],
                      False, False, False
                     );
    xlsApp.Workbooks[1].Save(GetUserDefaultLCID);
  finally
    xlsApp.Quit;
    xlsApp.Disconnect;
  end;
Nach etwas Recherche habe ich folgendes dank MSDN gefunden
http://support.microsoft.com/?scid=kb;en-us;320369

Es ist tatsächlich so, dass wir bei uns in der Firma (und bei unseren Kunden) ausschließlich "englische" Windows- Versionen installiert haben, diese aber in Landessprache betreiben. Dadurch kommt es eben zu dieser Fehlermeldung.

Jedenfalls stehen da auch zwei wunderschöne Workarounds, allerdings sind meine VB- Kenntnisse bei +/- 0 und ähm... könnte mir das bitte jemand in Delphi "übersetzen"?

Lösung 1:
Code:
// Execute the Excel method or property using InvokeMember
// so that you can specify the CultureInfo for the call.
// For example, the following code illustrates how you can
// invoke the Workbooks object Add method with "en-US" as
// the CultureInfo:
Dim oApp As New Excel.Application()
oApp.Visible = True
oApp.UserControl = True
Dim oBooks As Object = oApp.Workbooks
Dim ci As System.Globalization.CultureInfo = New System.Globalization.CultureInfo("en-US")
oBooks.GetType().InvokeMember("Add", Reflection.BindingFlags.InvokeMethod, Nothing, oBooks, Nothing, ci)
Lösung 2:
Code:
// Set the CultureInfo prior to calling the Excel method.
// For example:
Dim oApp As New Excel.Application()
oApp.Visible = True
oApp.UserControl = True
Dim oldCI As System.Globalization.CultureInfo = _
    System.Threading.Thread.CurrentThread.CurrentCulture
System.Threading.Thread.CurrentThread.CurrentCulture = _
    New System.Globalization.CultureInfo("en-US")
oApp.Workbooks.Add()
System.Threading.Thread.CurrentThread.CurrentCulture = oldCI
Vielen lieben Dank,

Crowley
  Mit Zitat antworten Zitat