![]() |
Excel-Tabelle in Stringgrid einlesen!
Liste der Anhänge anzeigen (Anzahl: 1)
Hi @ all!!
Ich habe folgendes vor: Ich habe ein Excel-Tabelle mit vorgegebenen Werten (so weit, so gut). DIESE tabelle soll nun mit Start des Programms in ein Stringrid eingelesen werden! und zwar OHNE die Spaltenüberschriften! WICHTIG ist auch, dass die Formate beibehalten werden müssen! Ich habe die Tabelle angehängt, damit ihr damit auch was anfangen könnt! (Die rote zeile gibt es später nicht) Ich habe schon mit memos und so weiter alles durchprobiert, funktionieren tuts, aber ich will hinterher mit den zahlen aus der tabelle auch noch rechnen!! DANKE CHRISS |
Möglich ist es auf jeden Fall, ich selbst hab mal sowas gemacht.
Damals hat mir googeln nach 'Delphi' und 'Excel' vollkommen ausgereicht ... Auch wenn man sich in die Materie etwas einarbeiten muss, es gibt recht brauchbare Hilfen im Internet. Dir alles zu erklären ist viel zu aufwendig, Detailfragen könnten wir hier sicher klären. |
hab ich teils schon versucht, das ergebnis war genau das gegenteil: von einem stringgrid in eine tabelle!!
ich möchte auch nur wissen, wie ich es anstelle, dass die zeilen und spalten in die stringgrid übernommen werden! |
Ich habe es zwar noch nicht ausprobiert, aber vielleicht hilft Dir dieses Posting
![]() ![]() |
hmm, hat mehr mit der gestaltung zu tun....
ich guck mal weiter |
Hab mal eine Funktion Xls_To_StringGrid() geschrieben:
Code:
uses
ComObj; function Xls_To_StringGrid(AGrid: TStringGrid; AXLSFile: string): Boolean; const xlCellTypeLastCell = $0000000B; var XLApp, Sheet: OLEVariant; RangeMatrix: Variant; x, y, k, r: Integer; begin Result := False; // Create Excel-OLE Object XLApp := CreateOleObject('Excel.Application'); try // Hide Excel XLApp.Visible := False; // Open the Workbook XLApp.Workbooks.Open(AXLSFile); // Sheet := XLApp.Workbooks[1].WorkSheets[1]; Sheet := XLApp.Workbooks[ExtractFileName(AXLSFile)].WorkSheets[1]; // In order to know the dimension of the WorkSheet, i.e the number of rows // and the number of columns, we activate the last non-empty cell of it Sheet.Cells.SpecialCells(xlCellTypeLastCell, EmptyParam).Activate; // Get the value of the last row x := XLApp.ActiveCell.Row; // Get the value of the last column y := XLApp.ActiveCell.Column; // Set Stringgrid's row &col dimensions. AGrid.RowCount := x; AGrid.ColCount := y; // Assign the Variant associated with the WorkSheet to the Delphi Variant RangeMatrix := XLApp.Range['A1', XLApp.Cells.Item[X, Y]].Value; // Define the loop for filling in the TStringGrid k := 1; repeat for r := 1 to y do AGrid.Cells[(r - 1), (k - 1)] := RangeMatrix[K, R]; Inc(k, 1); AGrid.RowCount := k + 1; until k > x; // Unassign the Delphi Variant Matrix RangeMatrix := Unassigned; finally // Quit Excel if not VarIsEmpty(XLApp) then begin // XLApp.DisplayAlerts := False; XLApp.Quit; XLAPP := Unassigned; Sheet := Unassigned; Result := True; end; end; end; procedure TForm1.Button1Click(Sender: TObject); begin if Xls_To_StringGrid(StringGrid1, 'C:\Tabelle.xls') then ShowMessage('Table exported!'); end; |
UFF *platt sei* :coder:
da braucht man ja nen doktor für... erstmal danke, mal gucken, was sich damit anstellen lässt *fg*! :coder: :coder: |
wenn in der Excel Datei Worksheets enthalten sind, die bis zur letzten Zeile ( 65536) gefüllt sind, stürzt der Code ab bei:
Delphi-Quellcode:
Sheet.Cells.SpecialCells(xlCellTypeLastCell, EmptyParam).Activate;
Mit der Meldung: " Die Activate-Methode des Range-Objektes konnte nicht ausgeführt werden." Weiß jemand warum ? besten Dank! |
Re: Excel-Tabelle in Stringgrid einlesen!
Zahlentyp integer hört da auf. Hast Delphi-Version leider vergessen anzugeben. Wird wohl heutzutage als ShortInt deklariert sein. 8)
|
Re: Excel-Tabelle in Stringgrid einlesen!
Zitat:
hmm .. versteh ich jetzt nich ganz, bis zu dieser Zeile wird doch noch gar nix mit integern gemacht .. Sind ja nur 4 effektive Zeilen mit Excel .... D2006 hab ich.
Delphi-Quellcode:
XLApp := CreateOleObject('Excel.Application');
try XLApp.Visible := False; XLApp.Workbooks.Open(AXLSFile); Sheet := XLApp.Workbooks[ExtractFileName(AXLSFile)].WorkSheets[1]; Sheet.Cells.SpecialCells(xlCellTypeLastCell, EmptyParam).Activate; |
Re: Excel-Tabelle in Stringgrid einlesen!
Zitat:
Das hier reicht allemal (zumindest mir) : Zitat:
Zitat:
|
Re: Excel-Tabelle in Stringgrid einlesen!
eigentlich ist da activete des Worksheets ja völlig sinnlos .. Ziel ist ja, das Worksheet in einer Delphi Variant Matrix zu kopieren.
warum geht das nicht so, wie ich möchte ?
Delphi-Quellcode:
RangeMatrix := sheet.Range['A1', 'E5'].Copy(EmptyParam);
Kopieren in die Zwischenablage funktioniert: (würde funktionieren, ist aber nicht sehr schick, die daten dann aus der Zwischenablage zu lesen)
Delphi-Quellcode:
siehe hier:
sheet.Range['A1', 'E5'].Copy(EmptyParam);
![]() vielleicht gibts ja eine einfache Lösung dafür? |
AW: Excel-Tabelle in Stringgrid einlesen!
Hallo zusammen
Ich habe ein Delphi-Programm geschrieben, das aus einer Excel-Datei Vokabeln ausliest und zum Üben verwendet. Ohne den Code von Toms (#6) hätte ich das niemals geschafft, da ich von OLE-Automation keine Ahnung habe. Nun würde ich die Daten lieber in Libre Office Calc übergeben, damit ich sie auf beliebigen PCs auslesen kann, ohne auf das Vorhandensein von MS Office angewiesen zu sein. // Create Excel-OLE Object XLApp := CreateOleObject('Excel.Application'); Gibt es inzwischen eine Methode, diesen Code von Toms für LibreOffice Calc anzupassen? Falls ja, könnten die übrigen Befehle übernommen werden oder sind sie für MS Office abgestimmt? Im Internet habe ich dazu noch nichts gefunden. Bin für jede Hilfe dankbar! MfG Gelmo |
AW: Excel-Tabelle in Stringgrid einlesen!
Das Prinzip ist ähnlich,
aber ich an Deiner Stelle würde CSV,JSON oder XML als Speicherformat nutzen. CSV kann von EXCEL und Calc gelesen und geschrieben werden, bei den beiden anderen Formaten bin ich mir nicht sicher. Gruß K-H |
AW: Excel-Tabelle in Stringgrid einlesen!
Hallo,
wenn es etwas kosten kann -> TMS hat Komponenten für Xls und Xlsx (kostet extra), die lesen und schreiben können. Und die arbeiten auch ohne ein installiertes Excel, also ohne die COM-Schnittstelle. Zum LibreOffice: Also wenn ich nach LibreOffice Automation suche, finde ich schon eine Menge, z.B. ![]() |
AW: Excel-Tabelle in Stringgrid einlesen!
|
AW: Excel-Tabelle in Stringgrid einlesen!
Evtl. wäre das jetzt auch der Zeitpunkt, sich mit Datenbanken zu befassen, um komplett unabhängig zu sein, von irgendwelchen Office-Produkten. Gleichzeitig hat man ein besseres/flexibleres Speichermedium für seine Vokabeln, dass nicht nur aus einer irgendwie gearteten Datei besteht (xls, csv, ...). Und man erhält die Möglichkeit mehr Infos zu speichern, z.B. welche Vokabeln waren schon dran, welche waren falsch, müssen also nochmal präsentiert werden usw.
|
AW: Excel-Tabelle in Stringgrid einlesen!
Ich lese eine Excel CSV in MEHRERE Stringgrids ein (Ein Stringgrid = Ein Tabellenblatt).
Von HolgerX eine .pas: ![]() Kleine Änderungen von mir: ![]() Diese ins Programm einbinden Im Programm wird es dann so aufgerufen (FXLApp ist nur ein beliebiger Name für die OleVariant): Laden (für jedes Tabllenblatt:
Delphi-Quellcode:
Falls du die Spaltenbreite auch anpassen willst nach dem befüllen:
OpenExcel(DATEINAME, FXLApp);
Xls_To_StringGrid(FXLApp, STRINGGRID, TABELLENBLATTNAME);
Delphi-Quellcode:
GridColWidth(STRINGRID,1,0);
Delphi-Quellcode:
Wieder in Excel Speichern:
//Stringgrid Spaltenbreite anpassen
procedure GridColWidth(grd:TStringGrid;min,max:word); var Zeile,Spalte,tmp,len: word; begin with grd do begin // für alle Spalten for Spalte:=0 to (ColCount -1) do begin len:=0; for Zeile:=0 to (RowCount-1) do begin // für alle Zeilen tmp:=Canvas.TextWidth(Cells[Spalte,Zeile]); if tmp>len then len:=tmp // neue max Breite end; // for Zeile if max>0 then if len>max then len:=max; // Maximalbreite if len<min then len:=min; // Minimalbreite ColWidths[Spalte]:=len+GridLineWidth+10 // Spalte verbreitern end // for Spalte end // with end;
Delphi-Quellcode:
SaveExcel(FXLApp)
|
AW: Excel-Tabelle in Stringgrid einlesen!
Sorry, ich komme mit Eurem Editor noch nicht klar. Habe gerade eine Antwort geschrieben, die während der Vorschau verschwunden ist. Also vielen Dank für die Tipps, schaue mich da mal weiter um.
MfG Gelmo |
AW: Excel-Tabelle in Stringgrid einlesen!
Zitat:
Sehr beeindruckend! Vielen Dank. habe ich auch gleich mal probiert. viele Grüße rainer |
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:54 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