AGB  ·  Datenschutz  ·  Impressum  







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

Problem beim Verwenden von Excel

Ein Thema von diavy · begonnen am 12. Dez 2012 · letzter Beitrag vom 17. Dez 2012
Antwort Antwort
Seite 2 von 3     12 3      
diavy

Registriert seit: 11. Apr 2012
54 Beiträge
 
#11

AW: Problem beim Verwenden von Excel

  Alt 14. Dez 2012, 13:46
@ GHorn: Der Link behandelt doch nur Strings, und es scheint mir als ob gerade die Abwesenheit eines Strings mein Problem wäre. Oder irre ich?

@ nahpets: Mit EmptyParam anstelle von '' bekomme ich ebenfalls die Fehlermeldung 'Invalid variant operation', und zusàtzlich funktionniert die Prozedur nicht nach einem weiteren Exekutieren, anders als mit ''.

Ich habe auch versucht mit hilfe von copy(Excel.Cells...,1,1) aus dem Variant-Problem einen String zu machen, das funktionniert ebenfalls nicht.

Ich bin echt am Verzweifeln.
  Mit Zitat antworten Zitat
Blup

Registriert seit: 7. Aug 2008
Ort: Brandenburg
1.464 Beiträge
 
Delphi 12 Athens
 
#12

AW: Problem beim Verwenden von Excel

  Alt 14. Dez 2012, 14:37
Dein Programm bekommt Daten immer als Typ OLE-Variant.
Die meisten Datentypen lassen sich automatisch zu einem String konvertieren, manche aber auch nicht.
Insbesondere für Zellen ohne Inhalt wird kein leerer String sondern "Unassigned" zurückgegeben.
Da wird auch mit Copy kein String draus, Copy verlangt als Parameter bereits einen String.

Versuchs doch mal in der Art:
Delphi-Quellcode:
var
  vName, vVorname: Variant;
  sNameVorname: string;
begin
{...}
  i := index7[j];
  while True do
  begin
    Inc(i);
    vName := Excel.Cells[i, 2].Value;
    vVorname := Excel.Cells[i, 3].Value;
    if VarIsEmpty(vName) or (vName = '') then
      Break;

    if VarIsEmpty(vVorname) or (vVorname = '') then
      sNameVorname := vName
    else
      sNameVorname := vName + ' ' + vVorname;

    ComboBox4.Items.Add(sNameVorname);
  end;
  Dec(i);
{...}
end;
  Mit Zitat antworten Zitat
diavy

Registriert seit: 11. Apr 2012
54 Beiträge
 
#13

AW: Problem beim Verwenden von Excel

  Alt 14. Dez 2012, 15:44
Erstmal Danke für deine Mühe!

Nun frage ich mich doch gleich ob es selbstverständliche wäre, dass ich verstehen würde was in der Funktion "VarIsEmpty" zu stehen hat, oder ist das eine Funktion in der Unit?

Wenn sie in der Unit ist, was genau tut sie dann? Bei delphibasics habe ich nämlich nichts dazu gefunden.

Und wieso VarIsEmpty(vName) or (vName = '') ? - wäre es nicht die Aufgabe der ersten Bedingung, die zweite überflüssig zu machen?
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.197 Beiträge
 
Delphi 10.4 Sydney
 
#14

AW: Problem beim Verwenden von Excel

  Alt 14. Dez 2012, 15:48
Nun frage ich mich doch gleich ob es selbstverständliche wäre, dass ich verstehen würde was in der Funktion "VarIsEmpty" zu stehen hat, oder ist das eine Funktion in der Unit?

Wenn sie in der Unit ist, was genau tut sie dann? Bei delphibasics habe ich nämlich nichts dazu gefunden.
Die Hilfe-Referenz von DelphiBasic wird halt nicht so vollständig sein wie die der Delphi-Hilfe

Und wieso VarIsEmpty(vName) or (vName = '') ? - wäre es nicht die Aufgabe der ersten Bedingung, die zweite überflüssig zu machen?
Ein leeres Variant ist nicht gleichbedeutent mit einem leeren String.
Das erst beudeutet: "Du hast gar nix"
das zweite: Du hast zwar einen String in deinem Variant, dieser ist aber leer.

ist wie bei einem DBMS der unterschied zwischen nil/null und ''
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
diavy

Registriert seit: 11. Apr 2012
54 Beiträge
 
#15

AW: Problem beim Verwenden von Excel

  Alt 14. Dez 2012, 15:55
Danke für den Link!

Ich verfüge leider nicht über die Delphi-Hilfe, da ich eine sehr alte Delphi-Version besitze und deren Hilfe nur bis Win XP geladen/benutzt werden kann. Und bisher war ich ganz zufrieden mit dem delphibasics-Angebot.

Alles klar, verstehe.


Sobald ich zu Hause bin, werde ich es dann mit VarIsEmpty(vName) versuchen!
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.197 Beiträge
 
Delphi 10.4 Sydney
 
#16

AW: Problem beim Verwenden von Excel

  Alt 14. Dez 2012, 16:00
Ich verfüge leider nicht über die Delphi-Hilfe, da ich eine sehr alte Delphi-Version besitze und deren Hilfe nur bis Win XP geladen/benutzt werden kann.
Für Vista/Win7/Win8 gibts bei MS ein Update das das alte HLP-Format wieder aktiviert. Einzig bei Server 2012 ist mit HLP entgültig schlüss.

Und bisher war ich ganz zufrieden mit dem delphibasics-Angebot.
Ab D2010 ist Hilfe im Web für alle Verfügbar:

http://docwiki.embarcadero.com/RADSt...0/de/Main_Page
http://docwiki.embarcadero.com/RADSt...E/de/Main_Page
http://docwiki.embarcadero.com/RADSt...2/de/Main_Page
http://docwiki.embarcadero.com/RADSt...3/de/Main_Page
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
diavy

Registriert seit: 11. Apr 2012
54 Beiträge
 
#17

AW: Problem beim Verwenden von Excel

  Alt 14. Dez 2012, 21:01
Ein Mal habe ich es mit:
Delphi-Quellcode:
7: begin
                i:=0;
                Excel.ActiveWorkbook.Sheets['7eme'].Select;
                index:=index7[j];
                while (NOT VarIsEmpty(Excel.Cells[(index+i),2].Value)) and (Excel.Cells[(index+i),2].Value<>'') do
                        begin
                        ComboBox4.Items.Add(Excel.Cells[(index+i),2].Value+' '+Excel.Cells[(index+i),3].Value);
                        inc(i);
                        end;
                end;
versucht, und ein Mal mit:
Delphi-Quellcode:
7: begin
                i:=0;
                Excel.ActiveWorkbook.Sheets['7eme'].Select;
                index:=index7[j];
                while NOT VarIsEmpty(Excel.Cells[(index+i),2].Value) do
                        begin
                        ComboBox4.Items.Add(Excel.Cells[(index+i),2].Value+' '+Excel.Cells[(index+i),3].Value);
                        inc(i);
                        end;
                end;
Beide Male habe ich die übliche Fehlermeldung bekommen.
Was nun wiederum neu war, ist, dass nach der Fehlermeldung folgende Zeile blau gefärbt wurde:

ComboBox4.Items.Add(Excel.Cells[(index+i),2].Value+' '+Excel.Cells[(index+i),3].Value); Nichtsdestotrotz wurden die richtigen Items in die ComboBox eingefügt...

Was ist hier los?

Geändert von diavy (14. Dez 2012 um 21:19 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

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

AW: Problem beim Verwenden von Excel

  Alt 14. Dez 2012, 22:19
Wenn du es mit
Delphi-Quellcode:
type
  dummy1,
  dummy2 : string;

....

 while NOT(VarIsEmpty(Excel.Cells[(index+i),2].Value)) do
 begin
   dummy1:='';
   dummy2:='';
   dummy1:=Excel.Cells[(index+i),2].Value;
   dummy2:=Excel.Cells[(index+i),3].Value;
   ComboBox4.Items.Add(dummy1+' '+dummy2);
   inc(i);
 end;
versuchst, was ändert sich?

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

Registriert seit: 11. Apr 2012
54 Beiträge
 
#19

AW: Problem beim Verwenden von Excel

  Alt 14. Dez 2012, 22:24
ES GEHT!

Ich kann es nicht glauben, wie kann das sein? Das kommt doch eigentlich genau auf das raus, was ich mit copy versucht hatte?

Du kannst dir nicht vorstellen wie dankbar ich dir bin!
  Mit Zitat antworten Zitat
diavy

Registriert seit: 11. Apr 2012
54 Beiträge
 
#20

AW: Problem beim Verwenden von Excel

  Alt 15. Dez 2012, 16:16
Ich habe nun ein weiteres Problem.

Und zwar wollte ich zum Sortieren von Resultaten quicksort benutzen.

Diebezüglich mein Code:

Delphi-Quellcode:
procedure switch(var a,b:integer);
var aux:integer;
begin
aux:=a;
a:=b;
b:=aux;
end;

function seperate(var a:array of integer;l,r:integer):integer;
var i,j,pivot:integer;
begin
pivot:=a[r];
i:=l; j:=r-1;
while i<=j do
        if a[i]<pivot then inc(i)
        else if a[j]>pivot then j:=j-1
        else begin
                switch(a[i],a[j]);
                inc(i);
                j:=j-1;
                end;
switch(a[i],a[r]);
result:=i;
end;

procedure quicksort(var a:array of integer;l,r:integer);
var i:integer;
begin
if l<r then begin
        i:=seperate(a,l,r);
        quicksort(a,l,i-1);
        quicksort(a,i+1,r);
        end;
end;

procedure TForm1.Button3Click(Sender: TObject);
var test:array[1..20] of integer;I:integer;
begin
test[1]:=21;test[2]:=7;test[3]:=12;test[4]:=99;test[5]:=72;test[6]:=3;test[7]:=50;test[8]:=59;test[9]:=17;test[10]:=190;
test[11]:=8;test[12]:=19;test[13]:=44;test[14]:=87;test[15]:=6;test[16]:=0;test[17]:=55;test[18]:=59;test[19]:=16;test[20]:=29;
quicksort(test,1,20);
for i:=20 downto 1 do
ShowMessage(IntToStr(test[i]));
end;
Dies klappt soweit auch, bis auf die Stelle 1 im Array, die bleibt nämlich unverändert. Mit den Beispielwerten die ich zum Test eingefügt habe, wird so mit der for downto Schleife als letzte MessageBox 21 angezeigt.

Ich bin den Code mehrmals durchgegangen und kann den Fehler nicht finden...
  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 07:14 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