AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Delphi Excel Stringgrid in (vorhandene) Excel abspeichern

Excel Stringgrid in (vorhandene) Excel abspeichern

Ein Thema von Moombas · begonnen am 17. Apr 2018 · letzter Beitrag vom 2. Mai 2018
Antwort Antwort
Seite 3 von 3     123
Benutzerbild von Moombas
Moombas

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

AW: Excel Stringgrid in (vorhandene) Excel abspeichern

  Alt 19. Apr 2018, 09:31
@Holger: mit deinem Tool in meinem integriert.
Delphi-Quellcode:
 if StringGridToXLS(FXLApp, DE_XLS, 'DE') then SaveExcel(FXLApp) else CloseExcel(FXLApp);
//...
@jumpy: Da ich die "extrahierte" Version von Holger nutze kommt die angesprochene Zeile so nicht mehr vor.


...ggf. mache ich es nachher testweise nochmal so, wie ich es ursprünglich gefunden hatte (https://www.delphi-treff.de/tipps-tr...l-exportieren/) und schaue dann ob ich es nochmal so hin bekomme, dann es dort raus zu nehmen.
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

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

AW: Excel Stringgrid in (vorhandene) Excel abspeichern

  Alt 19. Apr 2018, 09:32
Mit folgendem Schnipsel, kann man aus einem Stringgrid in eine Excel-Tabelle schreiben:
Delphi-Quellcode:
if forcestring then begin
      excel.activesheet.Cells.NumberFormat := '@';
  end;
  for i:=0 to sg.rowcount-1 do begin
    for j:=0 to sg.colcount-1 do begin
      zelle:=sg.cells[j,i];
      {----  Fehler 800A03EC  bei mehr als 255 Spalten!}
      excel.activesheet.cells(i+1,j+1):=zelle; {cells1..x/1..y }
    end;
  end;
(um den Spaltenfehler hab ich mich damals leider nicht mehr gekümmert)

Damit wird auch 007 übernommen.

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Benutzerbild von Moombas
Moombas

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

AW: Excel Stringgrid in (vorhandene) Excel abspeichern

  Alt 19. Apr 2018, 10:11
Es scheint ein Problem der Exceldatei zu sein.

Und zwar durch folgendes ausgelöst:

Exceldatei ("jungfräulich") mit den Daten gefüllt - ok
Exceldatei 1mal eingelesen - ok
Exceldatei 1mal gespeichert - ok (Eintragungen passen)
Exceldatei 2. Mal einlesen - Fehler -> Namenskonflikt (_Filterdatabase)
aus Exceldatei alle versteckten Namen entfernt mit folgendem Macro:
Code:
Sub EntferneNamen()
Dim i As Name
For Each DefName In ActiveWorkbook.Names
DefName.Delete
Next DefName
End Sub
Exceldatei 3. Mal einlesen - ok (Eintragungen passen, keine Fehlermeldung mehr)
Exceldatei 2. Mal speichern - alles durcheinander

Das Problem scheint also mit dem Namenskonflikt zu sein, denn wenn dieser nicht auftreten würde, bräuchte ich das Makro nicht auszuführen, welches scheinbar "zu viel" löscht und zu dem Fehler führt. -.-

Aktuell scheint die Lösung zu sein, Excel direkt noch zu speichern:
Delphi-Quellcode:
function StringGridToXLS(AXLApp : OleVariant; AGrid : TStringGrid; Sheetname : string):Boolean;
const
  xlCellTypeLastCell = $0000000B;
var
  Sheet: OLEVariant;
  MaxCol : Integer;
  MaxRow : Integer;
  Range : OleVariant;
  Data : OleVariant;

  Col : Integer;
  Row : Integer;
  R1,R2 : string;
begin
  Result := False;
  try
      //Worksheet auswählen
      if (Sheetname <> '') and HaveSheet(AXLApp, Sheetname) then
        begin
          Sheet := AXLApp.WorkSheets[sheetname];
        end else
          Sheet := AXLApp.WorkSheets[1];
      Sheet.select;

      // Der vorhandenen Daten im Grid, nicht der möglichen in Excel...
      MaxCol := AGrid.ColCount;
      MaxRow := AGrid.RowCount;

      if (MaxRow > 0) and (MaxCol > 0) then
      begin
        //Bereich auswählen
        R1 := RefToCell(1, 1);
        R2 := RefToCell(MaxCol, MaxRow);
        Range := Sheet.Range[R1, R2];
        if not VarIsNull(Range) then
          begin
            //Daten aus Grid holen
            Data := VarArrayCreate([1, MaxRow, 1, MaxCol], varVariant);
            for Row := 0 to Pred(MaxRow) do
            begin
              for Col := 0 to Pred(MaxCol) do
              begin
                Data[Succ(Row), Succ(Col)] := AGrid.Cells[Col, Row];
              end;
            end;
            //Daten dem Excelsheet übergeben
            Range.Value := Data;
            Range.Columns.AutoFit;
            Result := True;
          end;
      end;
  finally
    SaveExcel(AXLApp);
    Range := UnAssigned;
    Sheet := Unassigned;
    Data := Unassigned;
  end;
end;

Geändert von Moombas (19. Apr 2018 um 10:28 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Moombas
Moombas

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

AW: Excel Stringgrid in (vorhandene) Excel abspeichern

  Alt 20. Apr 2018, 12:15
So, ich arbeite nun mit dem Programm und seit der letzten Änderung (zwischendurch das Speichern) trat kein Namenskonflikt und auch sonst kein Problem mehr mit Excel auf

Danke für eure Hilfe und Unterstützung Evtl. hilft der Thread auch anderen weiter, es war ja doch ein recht spezielles Problem.
  Mit Zitat antworten Zitat
Benutzerbild von Chemiker
Chemiker

Registriert seit: 14. Aug 2005
1.858 Beiträge
 
Delphi 11 Alexandria
 
#25

AW: Excel Stringgrid in (vorhandene) Excel abspeichern

  Alt 21. Apr 2018, 11:38
Hallo Moombas,

ich will mal grundsätzlich die Frage stellen, ob Dein Vorgehen Zielführend ist.

Ich habe das so verstanden:
1. Excel-Datei wird in einem Stringgrid eingelesen
2. In dem Stringgrid werden einigen Daten verändert
3. Das Stringgrid mit den veränderten Daten wird zurück in die Excel-Datei geschrieben

Da die Synchronisierung zwischen Deinen Programm und Excel zu Problemen führen kann, stelle ich mal 2 Alternativen vor.

Was spricht dagegen, die Daten die verändert werden sollen direkt in Excel mit Hilfe Deines Programms zu ändern, ohne den Umweg über das Stringgrid.

Die andere Möglichkeit ist, die Daten aus der Excel-Datei in einem Stringgrid einzulesen, die Daten im Stringgrid zu verändern und anschließend in einer XLS-Datei ohne Excel zu speichern.

Bis bald Chemiker
wer gesund ist hat 1000 wünsche wer krank ist nur einen.
  Mit Zitat antworten Zitat
Benutzerbild von Moombas
Moombas

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

AW: Excel Stringgrid in (vorhandene) Excel abspeichern

  Alt 2. Mai 2018, 13:54
@Chemiker:

Der Umweg über das Stringgrid ist kein Umweg Die Daten der Exceldatei sollen über das Stringgrid geändert werden können und zusätzlich werden diese teilweise automatisiert geändert.

Und wie gesagt seit der letzten Änderung ist nur einmal ein Problem aufgetreten, welches aber wohl an einer anderen Stelle lag.
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 11:27 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