AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Vorhandene Excelliste bearbeiten

Ein Thema von Lill Jens · begonnen am 20. Mai 2008 · letzter Beitrag vom 1. Jun 2008
Antwort Antwort
Seite 2 von 3     12 3      
Benutzerbild von Reinhardtinho
Reinhardtinho

Registriert seit: 26. Feb 2007
411 Beiträge
 
Delphi 5 Enterprise
 
#11

Re: Vorhandene Excelliste bearbeiten

  Alt 21. Mai 2008, 14:23
Wie greifst du aktuell denn drauf zu?

Und zeig mal bitte die aktuelle Zeile.
Ich habe viel von meinem Geld für Alkohol, Weiber und schnelle Autos ausgegeben ... Den Rest habe ich einfach verpraßt.

George Best - 22.05.1946 - 25.11.2005 - nordirischer Fußballspieler
  Mit Zitat antworten Zitat
Lill Jens

Registriert seit: 12. Dez 2006
Ort: Nbg
121 Beiträge
 
Delphi 2007 Architect
 
#12

Re: Vorhandene Excelliste bearbeiten

  Alt 21. Mai 2008, 14:28
Delphi-Quellcode:
procedure TFMain.Excellfuellen(Sender: TObject);
var Workbook, Worksheet, Filename, Excel: OleVariant;
    OpenDialog:TOpenDialog;
begin
  OpenDialog:=TOpenDialog.Create(Self);
  try
    OpenDialog.InitialDir:=ExtractFilePath(Application.ExeName);
    OpenDialog.Filter:='xls|*.xls';
    if OpenDialog.Execute then begin
      try
        Excel := CreateOleObject('Excel.Application');
        Excel.Visible := true; { für die testphase sinnvoll }

        Filename:=OpenDialog.FileName;
        Workbook:=Excel.Workbooks.Open(filename,
                                       emptyParam, emptyParam, emptyParam,
                                       emptyParam, emptyParam, emptyParam,
                                       emptyParam, emptyParam, emptyParam,
                                       emptyParam, emptyParam, emptyParam);
        // Excel.Workbooks.Add;
        Excel.ActiveWorkBook.Saved := True; // ... verhindert unliebsame Dialoge
        //Workbook.Worksheet.UsedRange[LCID].Rows.Count;


      except
        ShowMessage('Excel konnte nicht gestartet werden !');
      end;
    end
  finally
    OpenDialog.free;
  end;
end;

Steig noch nicht so ganz durch hab mein excel sonst immer anders angesprochen:

Delphi-Quellcode:
procedure TFMain.DBGridToExcel(DBGrid:TDBGrid; StartSpalte, StartZeile:integer);
type TSpalten = array[1..256] of string;
// Funktion für das exportieren der Datensätze in Excel
  function CreateSpalten:TSpalten;
  var i, j, x:integer;
      abbruch:boolean;
  begin
    x:=1;
    abbruch:=false;
    j:=0;
    while (j <= 26) and not abbruch do begin
      i:=1;
      while (i <= 26) and not abbruch do begin
        if j = 0 then
          Result[x]:=chr(i+64)
        else
          Result[x]:=chr(j+64)+chr(i+64);
        inc(i);
        inc(x);
        abbruch:=(x > 256);
      end;
      inc(j);
    end;
  end;

var Excel:TExcelApplication;
    i, Zeile, lcid:integer;
    Workbook:_Workbook;
    Sheet, Zelle, Inhalt:Variant;
    Spalten:TSpalten;
begin
  if assigned(DBGrid)
     and assigned(DBGrid.DataSource)
     and assigned(DBGrid.DataSource.DataSet) then
  begin
    if DBGrid.DataSource.DataSet.Active then begin
      Excel:=TExcelApplication.Create(nil);
      try
        lcid:=GetUserDefaultLCID;
        Excel.Connect;
        Excel.Visible[lcid]:=true;
        Excel.UserControl:=true;

        Workbook:=Excel.Workbooks.Add(EmptyParam, lcid);

        Spalten:=CreateSpalten;
        Zeile:=StartZeile;
        for i:=43 to DBGrid.FieldCount do begin
          Inhalt:=DBGrid.Fields[i-1].DisplayName;
          Zelle:=Excel.Cells.Range[
            Spalten[i+StartSpalte-1]+inttostr(Zeile),
            Spalten[i+StartSpalte-1]+inttostr(Zeile)
          ];
          Zelle.Value:=Inhalt;
          Zelle.Font.Bold:=true;
        end;

        DBGrid.DataSource.DataSet.First;
        while not DBGrid.DataSource.DataSet.Eof do begin
          inc(Zeile);
          for i:=1 to DBGrid.FieldCount do begin
            Inhalt:=DBGrid.DataSource.DataSet.FieldByName(
              DBGrid.Fields[i-1].FieldName
            ).AsString;
            Zelle:=Excel.Cells.Range[
              Spalten[i+StartSpalte-1]+inttostr(Zeile),
              Spalten[i+StartSpalte-1]+inttostr(Zeile)
            ];
            Zelle.Value:=Inhalt;
          end;
          DBGrid.DataSource.DataSet.Next;
        end;

        Sheet:=Workbook.ActiveSheet;
        Sheet.Columns[
          Spalten[StartSpalte]+':'+Spalten[StartSpalte+DBGrid.FieldCount]
        ].EntireColumn.AutoFit;

      finally
        Excel.Disconnect;
        Excel.free;
      end;
    end;
  end;
end;
  Mit Zitat antworten Zitat
Benutzerbild von Reinhardtinho
Reinhardtinho

Registriert seit: 26. Feb 2007
411 Beiträge
 
Delphi 5 Enterprise
 
#13

Re: Vorhandene Excelliste bearbeiten

  Alt 21. Mai 2008, 15:09
Dann füge nochmal folgendes hinzu, dass du auf ein Worksheet zugreifen kannst.

Delphi-Quellcode:
        
var
  WS : _WorkSheet;
  ...
begin
  ...

  WS := Workbook.ActiveSheet as _Worksheet;
  WS.UsedRange[LCID].Rows.Count;

end;
Ich habe viel von meinem Geld für Alkohol, Weiber und schnelle Autos ausgegeben ... Den Rest habe ich einfach verpraßt.

George Best - 22.05.1946 - 25.11.2005 - nordirischer Fußballspieler
  Mit Zitat antworten Zitat
Lill Jens

Registriert seit: 12. Dez 2006
Ort: Nbg
121 Beiträge
 
Delphi 2007 Architect
 
#14

Re: Vorhandene Excelliste bearbeiten

  Alt 21. Mai 2008, 15:44
Das der Code fehlt macht Sinn aber es kommt leider die Gleiche Fehlermeldung wie zuvor
  Mit Zitat antworten Zitat
Benutzerbild von Chemiker
Chemiker

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

Re: Vorhandene Excelliste bearbeiten

  Alt 22. Mai 2008, 09:42
Hallo Reinhardtinho,

mit Rows.Count ermittelt man die letzte Zeile von Excel, das ist 65536. Ich Denke das Lill Jens die letzte belegte Zelle in einer Zeile meint.

Beispiel in VBA:

Sub LetztebelegteZelle()
strAntwort = MsgBox(Rows.Count)
End Sub

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

Registriert seit: 31. Dez 2004
Ort: Stuttgart
4.408 Beiträge
 
Delphi XE8 Enterprise
 
#16

Re: Vorhandene Excelliste bearbeiten

  Alt 22. Mai 2008, 10:10
Ich habe ein VB-Makro, welches mir aus einer Exceltabelle mit Daten ein SQL-Skript erstellt. Das ist die Schleife, die die komplette Tabelle durcharbeitet.
Code:
    For iWks = 1 To ActiveWorkbook.Worksheets.Count
      Open sPath & "Inhalt-Kostenstellen.sql" For Output As #1
      Set rng = ActiveWorkbook.Worksheets(iWks).Range("A1").CurrentRegion
      Print #1, "delete from kostenstellen where mandant > 0;"
      For iRow = 2 To rng.Rows.Count
         sTxt = sTxt & "INSERT INTO Kostenstellen(Mandant,Abteilung,Kostenstelle,Bezeichnung,CompanyID,Gesellschaft,Title) VALUES ("
         For iCol = 1 To rng.Columns.Count - 1
            If iCol = rng.Columns.Count - 1 Then
              sTxt = sTxt & "'" & ActiveWorkbook.Worksheets(iWks).Cells(iRow, iCol).Value & "'); "
            Else
              If iCol = 1 Then
                sTxt = sTxt & ActiveWorkbook.Worksheets(iWks).Cells(iRow, iCol).Value & ", "
              Else
                sTxt = sTxt & "'" & ActiveWorkbook.Worksheets(iWks).Cells(iRow, iCol).Value & "', "
              End If
            End If
         Next iCol
         Print #1, Left(sTxt, Len(sTxt) - 1)
         sTxt = ""
      Next iRow
      Close #1
    Next iWks
Dieser Teil geht jede Zeile und Spalte durch.
Rolf Warnecke
App4Mission
  Mit Zitat antworten Zitat
Benutzerbild von Reinhardtinho
Reinhardtinho

Registriert seit: 26. Feb 2007
411 Beiträge
 
Delphi 5 Enterprise
 
#17

Re: Vorhandene Excelliste bearbeiten

  Alt 22. Mai 2008, 18:21
@Chemiker:

Also bei mir erhalte ich die letzte gefüllte Zeile (mit UsedRange[LCID].Rows.Count).

Delphi 5 und die Komponente TExcelApplication.


MFG
Lorenz
Ich habe viel von meinem Geld für Alkohol, Weiber und schnelle Autos ausgegeben ... Den Rest habe ich einfach verpraßt.

George Best - 22.05.1946 - 25.11.2005 - nordirischer Fußballspieler
  Mit Zitat antworten Zitat
Benutzerbild von Chemiker
Chemiker

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

Re: Vorhandene Excelliste bearbeiten

  Alt 22. Mai 2008, 21:24
Hallo Reinhardtinho,

habe leider UsedRange überlesen.

Wenn man so, den benutzten Bereich anspricht, sollte man nur wissen, dass nicht die letzte mit Daten gefüllte Zeile angesprochen wird. Das Bedeutet das es reicht eine Zelle zu formatieren sagen wir einmal auf eine Uhrzeit, oder man Zellen einfärbt und schon wird diese Zelle zur letzten Zelle.

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

Registriert seit: 24. Nov 2004
Ort: Röbel/Müritz
112 Beiträge
 
Delphi XE5 Professional
 
#19

Re: Vorhandene Excelliste bearbeiten

  Alt 31. Mai 2008, 12:23
Hallo,

mein Vorschlag ist zwar recht einfach gestrickt, funktionier jedoch. Mein PC hat bis Zeile 10.000 ca. 6 Sekunden benötigt.

Grüße Simmi

[delphi]
uses ...., ComObj;

var excel: Variant;

function EXCELStarten (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;

Function TForm1.Zeile_Nr: Longword; //Excel 2007 hat mehr als 65535 Zeilen
var i : Longword;
s : string;
begin
excel.workbooks.open(OpenDialog1.FileName);
excel.sheets['Tabelle1'].activate;
i:=1;
repeat
s:=excel.cells[i,Spalte]; //Spalte mit Daten wählen
if s<>'' then inc(i);
until s='';
Zeile_Nr:=i;
end;


procedure TForm1.Button1Click(Sender: TObject);
begin
if not OpenDialog1.Execute then exit;
if not EXCELStarten (Excel) then exit;
showmessage('Nächste freie Zeile ist '+IntToStr(Zeile_nr));
end;
Uwe
  Mit Zitat antworten Zitat
Benutzerbild von Chemiker
Chemiker

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

Re: Vorhandene Excelliste bearbeiten

  Alt 31. Mai 2008, 17:53
Hallo simmi,

was passiert, wenn Du innerhalb der Spalte eine Leere Zelle hast, dann hört die Funktion auf zu zählen und gibt ein falsches Ergebnis zurück.

Bis bald Chemiker
wer gesund ist hat 1000 wünsche wer krank ist nur einen.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


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 16:25 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