AGB  ·  Datenschutz  ·  Impressum  







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

In Excel via Delphi reinschreiben

Ein Thema von r3v0 · begonnen am 26. Mär 2007 · letzter Beitrag vom 3. Apr 2007
Antwort Antwort
r3v0

Registriert seit: 26. Mär 2007
Ort: Wegberg
45 Beiträge
 
Delphi 7 Enterprise
 
#1

In Excel via Delphi reinschreiben

  Alt 26. Mär 2007, 15:36
Guten Tag zusammen,

Seid kurzem bin ich in Rahmen meiner Ausbildung als "Delphi Programmierer" unterwegs... Bzw man will es noch werden

Nun Zum Lernen hab ich mir folgendes Ausgedacht. Ein Zeiterfassungssystem Tausend mal schon in Excel erstellt. Aber man will ja selber was machen.

Nunja kommen wir zum Programm: ich habe 4 Buttons
Arbeits Anfang
Pausen Anfang
Pausen Ende
Arbeits Ende

Bis jetzt geben die Einfach eine MessageBox aus mit der Aktuellen Zeit... Nun Will ich das aber alles In Excel haben...

In Excel habe ich folgende Spalten ...
Datum Anfangszeit Pausenanfang Pausenende Endzeit Soll Zeit PlusStunden


SollZeit wird Errechnet aus Anfangzeit plus 7Stunden 48 plus 30 Minuten Pause...
PlusStunden wird die Gearbeitete Stunden -7:48 und sowas
Das ist jetzt nicht das Problem das Problem besteht dadrin wie ich jetzt auf die Excel Datei zugreife in sie Reinschreibe... Und Falls ein neuer Monat ist das Er Mir ne Neue Tabelle mit einen anderen Namen erstellt.

Mein BIsheriger Quell code:
Delphi-Quellcode:
unit Zeiterfassung_pas;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls;

type
  TfrmZeiterfassung = class(TForm)
    lbldate: TLabel;
    lblTime: TLabel;
    UhrzeitTimer: TTimer;
    Exit: TButton;
    AnfangArbeit: TButton;
    AnfangPause: TButton;
    EndePause: TButton;
    EndeArbeit: TButton;
    procedure FormCreate(Sender: TObject);
    procedure UhrzeitTimerTimer(Sender: TObject);
    procedure ExitClick(Sender: TObject);
    procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
    procedure AnfangArbeitClick(Sender: TObject);
    procedure EndeArbeitClick(Sender: TObject);
    procedure AnfangPauseClick(Sender: TObject);
    procedure EndePauseClick(Sender: TObject);
  private
    { Private-Deklarationen }
    AnfangsZeitArbeit: TTime;
    EndeZeitArbeit: TTime;
    AnfangsZeitPause: TTime;
    EndeZeitPause: TTime;
    AmArbeiten: boolean;
    InderPause: boolean;
  public
    { Public-Deklarationen }
  end;

var
  frmZeiterfassung: TfrmZeiterfassung;

implementation

{$R *.dfm}


procedure TfrmZeiterfassung.FormCreate(Sender: TObject);
begin
  lbldate.Caption:= DateToStr(Date);
  lbltime.Caption:= TimeToStr(Time);
  frmZeiterfassung.Caption:= 'Programm gestartet am: ' + DateToStr(Date) +
                              ' um: ' + TimeToStr(Time);
  AmArbeiten:= false;
  InderPause:= false;
end;

procedure TfrmZeiterfassung.UhrzeitTimerTimer(Sender: TObject);
begin
  lbltime.Caption:= TimeToStr(Time);
end;

procedure TfrmZeiterfassung.ExitClick(Sender: TObject);
begin
  close;
end;

procedure TfrmZeiterfassung.FormCloseQuery(Sender: TObject;
  var CanClose: Boolean);
begin
CanClose:= true;
end;



procedure TfrmZeiterfassung.AnfangArbeitClick(Sender: TObject);
begin
  if AmArbeiten= true then
    Messagedlg('Sie Sind schon am Arbeiten',mtError,[mbok],0)
  else
  begin
    AmArbeiten:= true;
    AnfangsZeitArbeit:= Time;
    ShowMessage(TimeToStr(AnfangsZeitArbeit));
  end;
end;


procedure TfrmZeiterfassung.EndeArbeitClick(Sender: TObject);
begin
  if AmArbeiten= false then
    Messagedlg('Sie Sind nicht am Arbeiten',mtError,[mbok],0)
  else
  begin
    AmArbeiten:= false;
    EndeZeitArbeit:= Time;
    ShowMessage(TimeToStr(EndeZeitArbeit));
  end;
end;


procedure TfrmZeiterfassung.AnfangPauseClick(Sender: TObject);
begin
  if AmArbeiten= false then
    Messagedlg('Sie können nicht in die Pause gehen da sie noch nicht am Arbeiten sind.',mtError,[mbok],0)
  else
  begin
    if InderPause= true then
      Messagedlg('Sie Sind schon in der Pause.',mtError,[mbok],0)
    else
    begin
      InderPause:= true;
      AnfangsZeitPause:= Time;
      ShowMessage(TimeToStr(AnfangsZeitPause));
    end;
  end;
end;

procedure TfrmZeiterfassung.EndePauseClick(Sender: TObject);
begin
  if AmArbeiten= false then
    Messagedlg('Sie können nicht in die Pause gehen da sie noch nicht am Arbeiten sind.',mtError,[mbok],0)
  else
  begin
    if InderPause= false then
      Messagedlg('Sie Sind nicht in der Pause.',mtError,[mbok],0)
    else
    begin
      InderPause:= false;
      EndeZeitPause:= Time;
      ShowMessage(TimeToStr(EndeZeitPause));
    end;
  end;
end;

end.
Mitz freundlichen Grüßen

r3v0
Blub ich bin die Sig.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

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

Re: In Excel via Delphi reinschreiben

  Alt 26. Mär 2007, 15:43
Lies mal das Tut von Lemmy
Markus Kinzler
  Mit Zitat antworten Zitat
r3v0

Registriert seit: 26. Mär 2007
Ort: Wegberg
45 Beiträge
 
Delphi 7 Enterprise
 
#3

Re: In Excel via Delphi reinschreiben

  Alt 26. Mär 2007, 16:07
Oh Okay Danke
Werde mich heute / Morgen mal drum kümmern!
Blub ich bin die Sig.
  Mit Zitat antworten Zitat
r3v0

Registriert seit: 26. Mär 2007
Ort: Wegberg
45 Beiträge
 
Delphi 7 Enterprise
 
#4

Re: In Excel via Delphi reinschreiben

  Alt 2. Apr 2007, 11:09
Sodale Kapiert!

Immoment erstelle ich mir noch per Button meine Excel Datei mit 12 Unter Tabellen.

Delphi-Quellcode:
procedure TfrmZeiterfassung.Button1Click(Sender: TObject);

var
  Excel: Variant;
begin
  Excel:= CreateOleObject('Excel.Application');
  excel.Application.SheetsInNewWorkBook:= 12;
  Excel.Workbooks.Add;
  Excel.Sheets[1].Name:= 'Januar';
  Excel.Sheets[2].Name:= 'Februar';
  Excel.Sheets[3].Name:= 'Maerz';
  Excel.Sheets[4].Name:= 'April';
  Excel.Sheets[5].Name:= 'Mai';
  Excel.Sheets[6].Name:= 'Juni';
  Excel.Sheets[7].Name:= 'Juli';
  Excel.Sheets[8].Name:= 'August';
  Excel.Sheets[9].Name:= 'September';
  Excel.Sheets[10].Name:= 'Oktober';
  Excel.Sheets[11].Name:= 'November';
  Excel.Sheets[12].Name:= 'Dezember';
// Excel.Sheets['Januar'].Cells[1,1].value:= 'Test';
// Excel.Visible:= true;
  Excel.ActiveWorkbook.SaveAs('C:\Project\Test\Lernen\Zeiterfassung\Zeiterfassung 2007.xls');
  Excel.Quit;
  Excel:=Unassigned;
end;
Jetzt soll mir ja das Programm das Automatisch erstellen beim sozusagen ersten Start. Beim Zweiten Start soll es Prüfen Ob die Datei schon vorhanden ist.

Wenn sie vorhanden ist soll sie automatisch nach dem Monat aussuchen Und dort gucken was der letzte Eintrag ist. Usw ...
Da jemand evtl nütliche Befehle!? oder hat einer schon mal so mit Excel gearbeitet wo ich mir das mal angucken könnte!?

MfG
r3v0
Blub ich bin die Sig.
  Mit Zitat antworten Zitat
r3v0

Registriert seit: 26. Mär 2007
Ort: Wegberg
45 Beiträge
 
Delphi 7 Enterprise
 
#5

Re: In Excel via Delphi reinschreiben

  Alt 3. Apr 2007, 09:33
Okay die Prüfung ob die Datei vorhanden ist habe ich auch schon abgehackt!

 If FileExists(ExtractFilePath(Application.ExeName) + 'Zeiterfassung2007.xls') = false then Jetzt kommt das mit dem Excel rauslesen
Blub ich bin die Sig.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

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

Re: In Excel via Delphi reinschreiben

  Alt 3. Apr 2007, 09:35
Da du ja weißt, wo was steht, sollte es doch kein Problem sein.
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von toms
toms
(CodeLib-Manager)

Registriert seit: 10. Jun 2002
4.648 Beiträge
 
Delphi XE Professional
 
#7

Re: In Excel via Delphi reinschreiben

  Alt 3. Apr 2007, 09:37
Hallo

Zugreifen kannst du genau gleich so wie du reinschreibst:
z.B
Label1.Caption := Excel.Sheets['Januar'].Cells[1,1].Value;
Zitat:
Wenn sie vorhanden ist soll sie automatisch nach dem Monat aussuchen
Meinst du den aktuellen Monat?

Zitat:
Und dort gucken was der letzte Eintrag ist. Usw ...
Meinst du die letzte beschriebene Zelle einer Spalte?
Thomas
  Mit Zitat antworten Zitat
r3v0

Registriert seit: 26. Mär 2007
Ort: Wegberg
45 Beiträge
 
Delphi 7 Enterprise
 
#8

Re: In Excel via Delphi reinschreiben

  Alt 3. Apr 2007, 11:28
Also ich habe folgende Excel Datei erstmals:
Datum Anfangszeit Pause anfang Pause ende Arbeitsende Arbeitsende SOLL Plusstunden

Sowie für jeden Monat eine eigene "Unter Tabelle"
Als erstes soll er jetzt rausfinden was für ein Monat ist und dort hinspringen.
Danach soll er das Datum auslesen um zu gucken welches Datum heute ist und wann das Letzte Datum von der Excel Tabelle ist. Danach soll er halt in die erste unbeschreibene Zeile reinspringen und da das neue Datum hinschreiben.

Auch muss man noch auslesen können wo ich immoment bin. Also Ob ich Anfangszeit und Pausenanfang drin stehen habe und dann das Programm geschlossen habe und neu gestartet ist!

Am besten wäre es doch dann mit dem:

Label1.Caption := Excel.Sheets['Januar'].Cells[1,1].Value;

Zu prüfen ob in der Zeile was drin steht also:

if Label1.Caption := Excel.Sheets['Januar'].Cells[1,1].Value = '' then
usw

Danach in dieser Zeile zu testen wo ich da bin. Und mir das danach zurück geben.
Bin noch ein bischen am ausprobieren.
Blub ich bin die Sig.
  Mit Zitat antworten Zitat
Antwort Antwort


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 23:31 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