![]() |
Re: Excel und Delphi
Hallo Maa83,
man kann in Excel benutzerdefinierte Zahlenformate zuweisen. Dies kann man sowohl für Text, als auch zum Beispiel für ein Datum verwenden. Die Funktion in Excel ist: NumberFormat
Delphi-Quellcode:
Das sollte Dein Problem lösen.
unit excelzahlUnit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ComObj; type TForm1 = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); // Button1: TButton; // procedure Button1Click(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; implementation var Excel : Variant; {$R *.dfm} {------------------------------------------------------------------------------} { EXCEL starten } {------------------------------------------------------------------------------} function f_EXCEL (var m_EXCEL : Variant): boolean; begin try m_EXCEL := CreateOleObject('Excel.Application'); Result := TRUE; except ShowMessage('Excel konnte nicht gestartet werden!'); Result := FALSE; Exit end; end; procedure TForm1.Button1Click(Sender: TObject); var zahl : string; begin if f_Excel(Excel)then // Excel startet ShowMessage('MSExcel ist erfolgreich gestartet worden!!') else ShowMessage('MSExcel konnte nicht gestartet werden!!'); Excel.Visible := TRUE; // TRUE = Excel sichtbar. Excel.Application.Workbooks.Add; // Neue Arbeitsmappe öffnen in EXECL Excel.Worksheets ['Tabelle1'].Activate; zahl:= '0000123789'; Excel.cells[2,2].select; // Zelle wählen Excel.Selection.numberFormat:= '@'; // benutzerdefiniertes Zahlenformat zuweisen Excel.Cells[2,2]:= zahl; // String in die Zelle schreiben. Excel.Workbooks.Close; // Excel wieder schliessen. end; end. Bis bald Chemiker |
Re: Excel und Delphi
meiner meinung nach müsste es eigentlich schon reichen wenn du denn zellen das gewünschte format mitgibst, also in deinem fall wäre das z.b.:
Delphi-Quellcode:
oleExcelSheets1.Columns[1].NumberFormat := '@';
|
Re: Excel und Delphi
Zitat:
|
Re: Excel und Delphi
vielen Dank erst mal :)
mit ExcelWS.Columns.NumberFormat := '@'; funktioniert es. Jetzt hab ich das selbe Problem noch wenn ich über eine CSV-Datei gehen möchte. Hier schreibe ich die Werte in eine CSV Datei und öffne diese mit der Funktion ExcelApp.Workbooks.OpenText Diese Methode ist viel schneller als direkt über Excel (und bei mehreren 10.000 Datensätze auch mehr als nötig). Wenn ihr mir hier auch noch helfen könntet wie ich hier die führenden Nullen behalte wäre ich wunschlos glücklich ;) |
Re: Excel und Delphi
@maa83
also bei der csv datei kann ich dir leider nicht helfen... aber wenn du einen lösungsweg gefunden hast, könntest du mir evtl. ein bsp. zukommen lassen wie man daten in eine csv datei exportiertiert und dann anschließend nach excel exportiert??? weil ich muss 1 mal im viertel jahr eine text datei in excel exportieren... und wie lang das dauert bei mehr als 100.000 Datensätzen kannst du dir bestimmt vorstellen ;) |
Re: Excel und Delphi
@Andidreas:
die csv Datei besteht aus der Kopfzeile dort sind die Überschriften mit ; getrennt aufgezählt. Die Werte sind jeweils in einer Extrazeile ebenfalls durch ; getrennt. Beispiel: Identnummer;Nachname;Vorname;Ort 0001234;Fritzbert;Hugo;Hasenheim 0004567;Funky;Brother;Quarkhausen Diese Datei kann man dann einfach mit ExcelApplication.Workbooks.OpenText aufrufen. Komplett:
Delphi-Quellcode:
FieldInfo kann NULL enthalten. Ich habe alles möglich laut Hilfe versucht aber bin bisher noch nicht dahinter gekommen wie ich den Typ übergebe damit Excel es anerkennt
ExcelApp.Workbooks.OpenText(//Pfad
Datei, //woher (xlMacintosh, xlWindows, xlMSDOS) xlWindows, //Start-Row 1, //DataType //Bestimmt das Spaltenformat der Daten in der Datei. //Zulässig ist eine der folgenden XlTextParsingType-Konstanten: //xlDelimited, xlFixedWidth. //Default: xlDelimited. xlDelimited, //TextQualifier legt den Textkennzeichner fest. //Zulässig ist eine der folgenden XlTextQualifier-Konstanten: //xlTextQualifierDoubleQuote, xlTextQualifierSingleQuote, //xlTextQualifierNone. //Default: xlTextQualifierDoubleQuote. xlTextQualifierDoubleQuote, //xlTextQualifierSingleQuote, //ConsecutiveDelimiter: //True, falls aufeinander folgende Trennzeichen als ein //Zeichen interpretiert werden sollen. //Default: False. False, //Tab: True = Tabulatorzeichen ist Trennzeichen //(DataType muss den Wert xlDelimited haben). //Die Voreinstellung ist False. False, //Semicolon: True = Semikolon ist Trennzeichen //(DataType muss den Wert xlDelimited haben). //Die Voreinstellung ist False. True, //Comma: True = Komma ist Trennzeichen //(DataType muss den Wert xlDelimited haben). //Die Voreinstellung ist False. False, //Space: True = Leerzeichen ist Trennzeichen //(DataType muss den Wert xlDelimited haben). //Die Voreinstellung ist False. False, //Other: True, falls das durch das Argument //OtherChar angegebene Zeichen das Trennzeichen ist //(DataType muss den Wert xlDelimited haben). //Die Voreinstellung ist False. False, //OtherChar (erforderlich, falls Other den Wert True hat). //Gibt das Trennzeichen an, falls Other den Wert True hat. //Wird mehr als ein Zeichen angegeben, //wird nur das erste Zeichen verwendet und die restlichen //Zeichen werden nicht beachtet. '', //FieldInfo (Variant): Eine Matrix mit Informationen zur Analyse // der einzelnen Datenspalten. Die Deutung // hängt vom Wert von DataType ab. // // Wenn die Daten getrennt sind, ist dieses // Argument eine Matrix von aus zwei Elementen // bestehenden Matrizen. Jede Matrix aus // zwei Elementen gibt die Umwandlungsoptionen // für eine bestimmte Spalte an. Das erste // Element ist die Spaltennummer (beginnend mit 1) // und das zweite Element ist eine der in der // folgenden Tabelle aufgeführten // xlColumnDataType-Konstanten, die angeben, // wie die Spalte analysiert wird. FieldInfo, //TextVisualLayout TextVisualLayout, //Nur für Excel 2000 {$IFDEF USE_EXCEL2000} //DecimalSeparator DecimalSeparator, //ThousandsSeparator ThousandSeparator, {$ENDIF} //lcid lcid ); lcid ist ein Integer. Diesen auf 0 initialisieren. DecimalSeparator und ThousandSeparator sind Variablen aus der SysUtil Unit. Diese benötigt man nur bei Excel 2000 (dafür hab ich den Schalter {$IFDEF USE_EXCEL2000} einfach deier Version anpassen) hoffe das hilft dir erst mal weiter. Aber wie gesagt schneidet er so die Nullen ab. |
Re: Excel und Delphi
@maa83
cool, danke für die info, werd ich bei gelegenheit ausprobieren :) |
Re: Excel und Delphi
Hallo Maa83,
Delphi-Quellcode:
//FieldInfo (Variant): Eine Matrix mit Informationen zur Analyse
// der einzelnen Datenspalten. Die Deutung // hängt vom Wert von DataType ab. // // Wenn die Daten getrennt sind, ist dieses // Argument eine Matrix von aus zwei Elementen // bestehenden Matrizen. Jede Matrix aus // zwei Elementen gibt die Umwandlungsoptionen // für eine bestimmte Spalte an. Das erste // Element ist die Spaltennummer (beginnend mit 1) // und das zweite Element ist eine der in der // folgenden Tabelle aufgeführten // xlColumnDataType-Konstanten, die angeben, // wie die Spalte analysiert wird. FieldInfo, Das Problem scheint mir an FieldInfo zu liegen, denn dort wird auch der DataType übergeben und dieser muss xlTextFormat sein. Du muss dabei den Datentype mit angeben sonst analysiert Excel in als Standard und es werden keine führenden Nullen ausgegeben. Wenn Du es als Index übergeben hast wird wahrscheinlich 1 als zweite Variable übergeben worden sein, setze dort eine 2 ein und es werden auch führende Nullen in Excel ausgegeben. Eine Bemerkung noch am Rande, warum benutzt Du nicht eine Datenbank für 10.000 Datensätze? Bis bald Chemiker |
Re: Excel und Delphi
Wenn man z.B. Messdaten hat, ist die graphische Auswertung evtl. besser als in einer DB !?
Mmh...klar eine Adressenverwaltung like Telefonbuch ist wohl in DB besser...zumindest das Suchen-Finden-Problem :roll: Er wird schon seine Gründe haben... @Andidreas Man kann aber die Felder auch mit "Tabs" trennen, müssen jetzt nicht unbedigt ";" sein... :gruebel: Ich meine zu wissen, dass csv auch für irgendwas steht, woraufhin das mit den Trennzeichen zwecks Excel einleuchtend wird...hab das aber irgendwie nicht mehr so richtig bei sammen... @Edit tata..gefunden..."Character Separated Values" ![]() |
Re: Excel und Delphi
als Trennzeichen kann jedes beliegige Zeichen benutzt werden. Dies kann man dann als Parameter unter OtherCahr mitgeben. ; ist halt der Standard.
Die Daten befinden sich auch in einer Datenbank. Es gibt in dem Programm aber die Möglichkeit alle Selektierten Daten mitsamt aufbereiteten Adressen nach Excel zu exportieren. Das mit den Datentypen an Excel übergeben hab ich schon probiert. Es funktioniert aber leider nicht. Zumindest nicht so wie ich es getestet habe... |
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:15 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