AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Daten an Excel und Co. übertragen: Dezimaltrennzeichen
Thema durchsuchen
Ansicht
Themen-Optionen

Daten an Excel und Co. übertragen: Dezimaltrennzeichen

Ein Thema von messie · begonnen am 25. Jul 2006 · letzter Beitrag vom 26. Jul 2006
Antwort Antwort
messie

Registriert seit: 2. Mär 2005
Ort: Göttingen
1.592 Beiträge
 
Delphi 2009 Professional
 
#1

Daten an Excel und Co. übertragen: Dezimaltrennzeichen

  Alt 25. Jul 2006, 20:20
Hallo,

ich passe DecimalSeparator zur Laufzeit so an, daß ich keine Probleme mit einem Komma bekommen kann. Bei Beendigung setze ich das zurück.
Nun hatte ich das Problem, daß ich Textdaten über in die Zwischenablage kopiert habe (auch Zahlen), Excel die aber die Zahlen nicht als solche akzeptierte (vermutlich weil es vor meinem Programm gestartet wurde und intern mit einem anderen Trennzeichen arbeitet).
Ich möchte eigentlich die Zwischenablage auch anderen Programmen zugänglich halten und überlege, ob ich eine Extrafunktion für den Export nach Excel mache. Ich weiß aber nicht, ob sich das lohnt, weil ja ein eventuell vorher gestartetes Excel wieder den DecimalSeparator falsch interpretieren könnte.
Kann man beim Excelexport den Separator mit übergeben, so daß ich unabhängig von den Windows-Einstellungen bin?

Grüße, Messie
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#2

Re: Daten an Excel und Co. übertragen: Dezimaltrennzeichen

  Alt 25. Jul 2006, 20:48
Hallo Messie,

für die Programm-Zu-Programm Kommunikation - auch über die Zwischenablage - solltest du unbedingt die Windows-Einstellungen verwenden. So will es die Konvention. Probleme mit der Darstellung umgehst du am ehesten indem du die Daten über Automation weitergibst.

Grüße vom marabu
  Mit Zitat antworten Zitat
messie

Registriert seit: 2. Mär 2005
Ort: Göttingen
1.592 Beiträge
 
Delphi 2009 Professional
 
#3

Re: Daten an Excel und Co. übertragen: Dezimaltrennzeichen

  Alt 26. Jul 2006, 07:31
Zitat von marabu:
für die Programm-Zu-Programm Kommunikation - auch über die Zwischenablage - solltest du unbedingt die Windows-Einstellungen verwenden. So will es die Konvention
Ja, mir scheint nur die richtige Methode zu fehlen. Ich habe bisher den DecimalSeparator geändert, das scheint nicht auszureichen, um ihn systemweit zu ändern.
Ein Beispiel: ich öffne Excel und gebe ein paar Zahlen ein, mal mit Komma, mal mit Punkt. Die Eingaben mit dem gültigen Trennzeichen werden als Zahlen interpretiert. Wenn ich das Trennzeichen in der Systemsteuerung ändere, werden die Zahlen in Excel sofort mit geändert. Wenn ich das aus meinem Programm mache, passiert das nicht.
Es muß also noch Routinen geben, die diese Änderung systemweit bekannt geben und die ich noch nicht kenne.

Grüße, Messie
  Mit Zitat antworten Zitat
messie

Registriert seit: 2. Mär 2005
Ort: Göttingen
1.592 Beiträge
 
Delphi 2009 Professional
 
#4

Re: Daten an Excel und Co. übertragen: Dezimaltrennzeichen

  Alt 26. Jul 2006, 08:52
Übrigens:
das Dezimaltrennzeichen systemweit ändern
funktioniert auch nur so, daß Excel nach dem Neustart das Trennzeichen akzeptiert. Die direkte Übernahme zur Excel-Laufzeit bleibt weiterhin unmöglich.

Grüße, Messie
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#5

Re: Daten an Excel und Co. übertragen: Dezimaltrennzeichen

  Alt 26. Jul 2006, 09:30
Hallo Messie,

Zitat von messie:
Ja, mir scheint nur die richtige Methode zu fehlen. Ich habe bisher den DecimalSeparator geändert, das scheint nicht auszureichen, um ihn systemweit zu ändern.
systemweit ändern kannst du über die Einstellung Application.UpdateFormatSettings = True. Dabei wird nach alter Sitte eine broadcast message an alle top level windows geschickt, um mitzuteilen, dass sich bei den Systemeinstellungen etwas geändert hat. Wohlerzogene Anwendungen verarbeiten diese Nachricht. Excel sollte das tun.

Grüße vom marabu
  Mit Zitat antworten Zitat
messie

Registriert seit: 2. Mär 2005
Ort: Göttingen
1.592 Beiträge
 
Delphi 2009 Professional
 
#6

Re: Daten an Excel und Co. übertragen: Dezimaltrennzeichen

  Alt 26. Jul 2006, 10:14
Zitat von marabu:
Excel sollte das tun.
..tut es eben nicht! Es gibt aber eine Message die Excel dazu bringt, die Änderungen sofort zu übernehmen. Ich habe mal das Fenster angehängt, in dem die Einstellungen Windows-Seitig geändert werden können. Mache ich eine Änderung im Anpassen-Untermenü und schicke in dem Fenster Übernehmen ab, werden alle als Zahlen formatierte Zellen im offenen Excel-Fenster sofort auf das neue Zeichen eingestellt.
Kann man solche Messages abhören oder anderweitig ermitteln?

Grüße, Messie
Miniaturansicht angehängter Grafiken
regional_settings_152.jpg  
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#7

Re: Daten an Excel und Co. übertragen: Dezimaltrennzeichen

  Alt 26. Jul 2006, 10:23
Entschuldige, aber ich brate gerade im eigenen Saft. UpdateFormatSettings steuert das Verhalten deiner eigenen Anwendung. Willst du andere Anwendungen informieren, so musst du die Nachricht WM_SETTINGCHANGE broadcasten.

marabu
  Mit Zitat antworten Zitat
messie

Registriert seit: 2. Mär 2005
Ort: Göttingen
1.592 Beiträge
 
Delphi 2009 Professional
 
#8

Dezimaltrennzeichen systemweit sofort ändern

  Alt 26. Jul 2006, 13:53
Zitat von marabu:
Willst du andere Anwendungen informieren, so musst du die Nachricht WM_SETTINGCHANGE broadcasten.
marabu
Ja, genau das war es was ich gesucht habe.
Leider hatte ich verdrängt, daß ich die Funktion in einem Builder-Projekt einsetzen muß und es ist mir (natürlich) nicht gelungen, das umzusetzen :
Code:
void SetDecimalSeparator(String Ch)
{
  LCID DefLCID;
  LPSTR Buffer;

  Application->UpdateFormatSettings = true;
  StrPCopy(Buffer, Ch);
  DefLCID = (LCID)(GetThreadLocale);
  if (SetLocaleInfo(DefLCID, LOCALE_SDECIMAL, Buffer))
  {
    DecimalSeparator = StrPas(Buffer)[1];
  }
  Application->UpdateFormatSettings = false;
  SendMessage( HWND_BROADCAST, WM_SETTINGCHANGE, 0, 0 );
  ShowMessage(DecimalSeparator);
}
Zur Laufzeit klappt SetLocaleInfo nicht, so daß ich meinen alten Separator immer behalte. Ich bin mir bezüglich des LCID-TypeCasts nicht sicher, jedenfalls kommt da eine recht große Zahl raus. Und ich habe das Gefühl, daß LOCALE_SDECIMAL in der Luft hängt, also undefiniert ist.
Vielleicht schickt mir mal jemand eine Tüte Sternchen zum dazwischenstreuen, hat bisher immer wieder etwas gebracht.

Danke, Messie

/Edit:

eine Tüte Klammern statt Sternchen hätte es hier besser getan - oder ein Orakel, das die BCB-Meldungen deuten kann.
DefLCID = GetThreadLocale()!! Damit funzt alles!
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:01 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz