Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Einfachere Methode für Excel Steuerung? (https://www.delphipraxis.net/164127-einfachere-methode-fuer-excel-steuerung.html)

ByTheTime 29. Okt 2011 17:23

Einfachere Methode für Excel Steuerung?
 
Hallo,
ich arbeite an einem Programm, das in Excelzellen schreibt (via OLE). Allerdings bin ich der Meinung, das der Vorgang etwas zu lange dauert. Ich habe das ganze erst für die ersten 100 Zellen vorgenommen (ich brauche noch ca. 900 :-D):
Delphi-Quellcode:
if (Edit1.Text <> '') then
    Excel.Cells[x, x].Value := Edit1.Text;

if (Edit2.Text <> '') then
    Excel.Cells[x, x].Value := Edit2.Text;

//[...]
Da es etwas aufwendig ist, diesen Code für 1000 Excelzellen zu deklarieren, wäre es hilfreich, wenn das etwas schhneller gehen würde (gibt es kostenlose Komponenten, oder ähnliches?).

MfG

Lukas

mkinzler 29. Okt 2011 17:34

AW: Einfachere Methode für Excel Steuerung?
 
Warum bettest du nicht das Exceldokumenr direkt ein und lässt den Benutzer direkt in Excel editieren?

WM_CLOSE 29. Okt 2011 17:46

AW: Einfachere Methode für Excel Steuerung?
 
Du könntest im Tag jedes Edit die Zeile und spalte reinschreiben, in der der Text nachher stehen soll. und dann mit einer Schleife alle Komponenten eintragen.
Code:
Für Jedes TEdit Edit in Form1.GetComponents
  Trage Edit.Text in Zelle [HiWordVonTag, LoWordVonTag] ein
Das ist natürlich nur dann sinnvoll, wenn es sich um ungleichmäßige Daten handelt.
Für jewils gleich aufgebaute Datensätze gibt es ein TControlGrid oser so.
EDIT: Das Tag unterteilt man in Hi und LoWord:
Delphi-Quellcode:
procedure GetHiWordLoWord(Input:Integer; var OutputLow:Word; var OutputHi:Word)
begin
  OutputLow=Word(Input AND $0000FFFF);
  OutputHi=Word((Input AND $FFFF0000) shr 16);
end;
Ohne Gewähr

ByTheTime 29. Okt 2011 18:14

AW: Einfachere Methode für Excel Steuerung?
 
@mkinzler: Das ist nicht Sinn und Zweck der Anwendung. Das ExcelSheet ist sozusagen etwas "dumm". Meine Anwendung hingegen ist schlau :-D. Sie berechnet aus dem Werten von EditX1 und EditX2 einen Wert für Edit1, diese 3 Werte übernimmt es dann in die Excel Tabelle, würde ich die Exceltabelle in die Anwendung einbetten, müsste ich Wert 3 erst mit dem Taschenrechner ausrechnen. Natürlich ist das noch das einfachste Beispiel: In meinem Programm kann man noch einstellen, welche Werte es aus EditX1, EditX2, EditX3, EditX4 für Edit1 bis Edit 10 ausrechnen soll. Mit dem einbetten müsste ich dann das ExcelSheet "intelligent" machen (allerdings kann ich dann nicht mehr speziellen Einstellungen vornehmen, die meine Anwendung ermöglicht).

@WM_Close: Leider handelt es sich um ungleichmäßige Daten :(

An was ich noch gedacht hätte: Eine eigene Komponente entwickeln! Sozusagen eine Excelkomponente, in der ich angebe aus welchem EditFeld, in welche Zelle und bedingungen (Wenn das Feld nicht leer ist, dann). Allerdings habe ich garkeine Idee wie das funktioniert.

zeras 29. Okt 2011 18:51

AW: Einfachere Methode für Excel Steuerung?
 
Warum kannst du nicht eine Funktion deklarieren, wo du das Editfeld und die Koordinaten mit übergibst?
Dann vielleicht noch ein Array, wo die Editfelder drinstehen, damit die mit einer Schleife darauf zugreifen kannst?

Furtbichler 29. Okt 2011 19:50

AW: Einfachere Methode für Excel Steuerung?
 
Hast Du wirklich 900 einzelne Editfelder? Oder von mir aus 600?
Und die sind so individuell, das man die nicht irgendwie in ein Grid o.ä. packen kann?
Keine Gemeinsamkeiten? Keine Wiederholungen?

WM_CLOSE 29. Okt 2011 21:02

AW: Einfachere Methode für Excel Steuerung?
 
Zitat:

@WM_Close: Leider handelt es sich um ungleichmäßige Daten
Sorry, wenn ich mich mal selbst zitieren muss:
Zitat:

Das ist natürlich nur dann sinnvoll, wenn es sich um ungleichmäßige Daten handelt.
Es geht doch darum, dass jedes Edit-Feld weiß zu welcher Zelle es gehört.

Bummi 29. Okt 2011 22:06

AW: Einfachere Methode für Excel Steuerung?
 
Wenn ich das so lese habe ich den Eindruck dass es entweder sehr komplex ist, oder nicht vorher zu Ende gedacht.
Bergeweise Edits (wenn es so ist) sind in jedem Fall eine Katastrophe. Wie sieht es aus wenn Du eine Memorytable oder eine Clientdataset ausetzt, mit diversen unsichtbaren benötigten Feldern und einigen berechneten Feldern, könntest Du es damit hinbekommen?
Diese Tabelle lässt sich dann "ratzfatz" generisch nach Excel kopieren ...

ByTheTime 29. Okt 2011 22:44

AW: Einfachere Methode für Excel Steuerung?
 
Sorry,
ich habe mich wohl etwas undeutlich ausgedrückt. Meine Anwendung ist eine Art Protokoll: Es gibt 7 Tage mit je 4 Unterzonen (4 Zeitzonen: 0-6, 6-12, 12-18, 18-24). Jede Zeitsone besitzt 25 Felder (Edit's und ComboBoxen). 25 Felder x 4 Zeitzonen x 7 Tage --> 700 Felder (dazu kommen noch ca. 250 andere Felder, das ist aber eine andere Sache, die erstmal nebensächlich ist). Da habe ich mir gedacht: 'Cool, legst einfach 2 TabbedNotebooks an, eins für die Wochentage, das andere für die 4 Zeitzonen.'. Im Endeffekt ist mir dann aufgefallen: Das ist ja etwas umständlich, also hab ich TabControlls genommen. Jetzt starte ich eine if-Abfrage in der ich Abfrage, welcher Tag angewählt ist und dannach welche Zone:
Delphi-Quellcode:
// Mög. 1

if TabControlDays.TabIndex = 0 then //Monatg
 begin
   if TabControlZones.TabIndex = 3 then //12-18 Uhr
    begin
      if EditX.Text <> '' then
      Excel.Cells[1, 3].Value := EditX.Text
      // [...]
    end;
 end;

// Mög. 2

if ((TabControlDays.TabIndex = 0) and (TabControlZones.TabIndex = 0)) then // Montag, Zeitzone 1
 begin
   if EditX.Text <> '' then
   Excel.Cells[1, 3].Value := EditX.Text
   // [...]
 end;
Und zu den Fragen von oben: War wohl etwas neben der Mütze, natürlich gibt es Gemeinsamkeiten, es gibt 28 Edit Felder (Für jeden Tag mit wiederum jeder Zeitzone) nur für 'X', weiter 28 für 'Y'. Ich hoffe ihr habt meine Erklärung so einigermaßen verstanden.

Bummi 29. Okt 2011 22:53

AW: Einfachere Methode für Excel Steuerung?
 
Vom Denkansatz, hier denke ich datenbanktechnisch, benötige ich nach Deiner Definition 27 Felder
Wochentag,ZeitZone,Feld1,Feld2.....
1-7 1-4 was auch immer
Die Tabelle, das Array was auch immer Du verwenden möchtest hat dann 7*4 Zeilen zu 27 Feldern.
Die Eingabe erfolgt in die Felder 3-27, die Auswahl über die Felder 1 und 2.


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:43 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