AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Excel-Tabelle in Stringgrid einlesen!
Thema durchsuchen
Ansicht
Themen-Optionen

Excel-Tabelle in Stringgrid einlesen!

Ein Thema von Chriss · begonnen am 26. Apr 2003 · letzter Beitrag vom 16. Jan 2023
Antwort Antwort
Seite 2 von 2     12   
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#11

Re: Excel-Tabelle in Stringgrid einlesen!

  Alt 30. Jan 2007, 20:55
Zitat von stoxx:
hmm .. versteh ich jetzt nich ganz..
Was denn ? Die gelieferten Stichwörter zum suchen, oder was ?

Das hier reicht allemal (zumindest mir) :

Zitat von stoxx:
..65536..
Zitat von stoxx:
..Sind ja nur 4 effektive Zeilen mit Excel ....
Und die werden nicht gezeigt. "Effektiv" ist zudem relativ.
Gruß
Hansa
  Mit Zitat antworten Zitat
Benutzerbild von stoxx
stoxx

Registriert seit: 13. Aug 2003
1.111 Beiträge
 
#12

Re: Excel-Tabelle in Stringgrid einlesen!

  Alt 30. Jan 2007, 21:17
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 ?

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)

sheet.Range['A1', 'E5'].Copy(EmptyParam); siehe hier: http://www.dsdt.info/tipps/?id=605

vielleicht gibts ja eine einfache Lösung dafür?
Phantasie ist etwas, was sich manche Leute gar nicht vorstellen können.
  Mit Zitat antworten Zitat
Gelmo

Registriert seit: 14. Sep 2006
Ort: Niederrhein
31 Beiträge
 
Delphi 10.3 Rio
 
#13

AW: Excel-Tabelle in Stringgrid einlesen!

  Alt 8. Jan 2019, 20:48
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
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#14

AW: Excel-Tabelle in Stringgrid einlesen!

  Alt 8. Jan 2019, 23:40
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
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.276 Beiträge
 
Delphi 10.4 Sydney
 
#15

AW: Excel-Tabelle in Stringgrid einlesen!

  Alt 9. Jan 2019, 08:15
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. https://api.libreoffice.org/examples/examples.html .
Heiko

Geändert von hoika ( 9. Jan 2019 um 08:18 Uhr)
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#16

AW: Excel-Tabelle in Stringgrid einlesen!

  Alt 9. Jan 2019, 09:04
OpenOffice/LibreOffice:
https://www.winsoft.sk/libre.htm

https://api.libreoffice.org/
https://sourceforge.net/projects/uno-pas-bridge/
Markus Kinzler
  Mit Zitat antworten Zitat
Jumpy

Registriert seit: 9. Dez 2010
Ort: Mönchengladbach
1.736 Beiträge
 
Delphi 6 Enterprise
 
#17

AW: Excel-Tabelle in Stringgrid einlesen!

  Alt 9. Jan 2019, 09:25
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.
Ralph
  Mit Zitat antworten Zitat
Benutzerbild von Moombas
Moombas

Registriert seit: 22. Mär 2017
Ort: bei Flensburg
525 Beiträge
 
FreePascal / Lazarus
 
#18

AW: Excel-Tabelle in Stringgrid einlesen!

  Alt 9. Jan 2019, 09:35
Ich lese eine Excel CSV in MEHRERE Stringgrids ein (Ein Stringgrid = Ein Tabellenblatt).

Von HolgerX eine .pas: https://www.delphipraxis.net/1399704-post14.html
Kleine Änderungen von mir: https://www.delphipraxis.net/1412808-post14.html

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:
  OpenExcel(DATEINAME, FXLApp);
  Xls_To_StringGrid(FXLApp, STRINGGRID, TABELLENBLATTNAME);
Falls du die Spaltenbreite auch anpassen willst nach dem befüllen:
GridColWidth(STRINGRID,1,0);
Delphi-Quellcode:
//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;
Wieder in Excel Speichern:

SaveExcel(FXLApp)
Der Weg ist das Ziel aber man sollte auf dem Weg niemals das Ziel aus den Augen verlieren.
  Mit Zitat antworten Zitat
Gelmo

Registriert seit: 14. Sep 2006
Ort: Niederrhein
31 Beiträge
 
Delphi 10.3 Rio
 
#19

AW: Excel-Tabelle in Stringgrid einlesen!

  Alt 9. Jan 2019, 11:20
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
  Mit Zitat antworten Zitat
waterboy

Registriert seit: 9. Jan 2023
4 Beiträge
 
#20

AW: Excel-Tabelle in Stringgrid einlesen!

  Alt 16. Jan 2023, 20:45
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;

Sehr beeindruckend! Vielen Dank. habe ich auch gleich mal probiert.

viele Grüße

rainer
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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 02:28 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