Announcement

Collapse
No announcement yet.

Parameter an EXCEL sprachunabhängig möglich?

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Parameter an EXCEL sprachunabhängig möglich?

    Hallo zusammen,

    ich möchte aus einer Delphi-Anwendung heraus eine Zellenformatierung in Excel eintragen. In der Excel-Hilfe ist der Format-String unabhängig von den lokalen Einstellungen '$ #,##0.000_);[Red]$ #,##0.00_)'. Verwende ich diesen String in meiner Anwendung erhalte ich eine Fehlermeldung von EXCEL. Verwende ich dagegen die zur deutschen Version passenden Version ('DM #.##0,00;[Rot]DM #.##0,00_)') funktioniert das Ganze prima. Innerhalb eines Makros in Excel ergeben beide Format-Anweisungen das selbe Ergebnis, Excel kann also offensichtlich mit beiden umgehen.

    Das geht doch sicher auch bei einer Verbindung über COM? Ich vermute mal, dass die internationale (=amerikanische) Version bei jeder lokalisierten Excel-Version funktionieren sollte. Ich weiss aber leider nicht, wo ich dieses Verhalten einstellen kann.

    Gruß,

    Siegbert

  • #2
    Hallo,

    in einem EXCEL-Beispielprojekt aus meinen Buch <i>COM/DCOM/COM+ mit Delphi</i> taucht der folgende Aufruf auf:
    <pre>
    procedure TForm1.ButtonExcelClick(Sender: TObject);
    begin
    ExcelApplication1.Connect;
    ExcelApplication1.Visible[<b>GetUserDefaultLCID</b>] := True;
    ExcelApplication1.UserControl := True;
    ExcelApplication1.Workbooks.Open(cXLS_FileName, False, False,
    EmptyParam,'',False,False,EmptyParam,
    EmptyParam,false,false,EmptyParam,false,0);
    ExcelWorkbook1.ConnectTo(ExcelApplication1.ActiveW orkBook);
    ExcelWorksheet1.ConnectTo(ExcelWorkbook1.Sheets.It em[3] as
    _Worksheet);
    ExcelWorksheet1.Activate;
    end;
    </pre>
    Über <b>GetUserDefaultLCID</b> ordne ich explizit einen <i>Locale Identifier (LCID)</i> zu. Microsoft hat in seiner Knowlegde Base-Datenbank (siehe MSDN-DVD) den Beitrag <b>Q246501</b> "INFO: Use an Explicit Locale Identifier (LCID) When Automating Excel to Set Currency Formats", der die Detail dazu beschreibt. Ein Absatz daraus lautet zum Beispiel so:

    "<i>For example, if you are developing on a system with an English (United States) operating system and you want the Excel currency setting to show DM for German currency, but you ignore the Locale ID, then Excel formats the result with the dollar sign ($) instead of the German currency (DM). Excel does this even if German has been set under the Regional Settings in Control Panel. This is because an LCID of zero is assumed to be the default locale for the system and not a user. Since the system is English (United States), in this example, the currency is displayed in U.S. Dollars.</i>".

    Siehe auch Application.LanguageSettings.LanguageI

    Comment


    • #3
      Hallo Herr Kosch,

      die LCID wurde bereits verwendet. Trotzdem erhalte ich beim Ausführen der Zeile "ExlRange.Item[zeile,Spalte].NumberFormat := '$ #,##0.000_);[Red]$ #,##0.00_)';" die Fehlermeldung "Die Numberformat-Eigenschaft des Range-Objekts kann nicht festgelegt werden". Verwende ich statt der (vermeintlich) allgemeingültigen amerikanischen Fassung die lokalisierte deutsche "ExlRange.Item[Zeile,Spalte].NumberFormat := 'DM #.##0,00;[Rot]DM #.##0,00_)';" funktioniert es. In Excel in einem Makro ausgeführt führen beide Anweisungen zum exakt selben Ergebnis (Formatierung mit "DM", Dezimalkomma und Tausenderpunkt).

      Gruß,
      Siegbert Glode

      Comment

      Working...
      X