AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi via OLE Excel auslesen - Feld ist double und nicht Variant?
Thema durchsuchen
Ansicht
Themen-Optionen

via OLE Excel auslesen - Feld ist double und nicht Variant?

Ein Thema von hronny · begonnen am 5. Mai 2007 · letzter Beitrag vom 6. Mai 2007
Antwort Antwort
hronny

Registriert seit: 4. Mai 2006
Ort: Thüringen
97 Beiträge
 
Delphi 2007 Professional
 
#1

via OLE Excel auslesen - Feld ist double und nicht Variant?

  Alt 5. Mai 2007, 22:32
Hi, ich will via OLE eine ExcelDatei auslesen. Öffnen Schließen usw geht auch tadellos. Nun will ich verschiedene Exceldateien einlesen wo die Spalten bzw Felder unterschiedlich sein können. Dazu versuche ich über die erste Zeile zu prüfen wann ein Feld leer ist (bei Listen ist das meist so).
Delphi-Quellcode:
j:=1;
repeat
  if (Excel.Cells[1, j].Value<>'') then begin
    s_tmp:=Excel.Cells[1, j].Value;
    Memo1.Lines.Add('Line: '+IntToStr(j)+' - '+s_tmp);
  end;
  Inc(j);
until (Excel.Cells[1, j].Value='');
Geht tatellos. In der Länge würde ich dann prüfen ob alle Felder leer sind, wenn ja dann ist die Exceldatei am Ende. Nun ist es aber so das meine Variable s_tmp vom Typ Variant ist, da ich dachte es nimmt alles auf. Leider muckt er bei Zahlenfeldern rum:
Zitat:
Variante des Typs (String) konnte nicht in Typ (Double) konvertiert werden.
Ja aber wie soll ich denn beim einlesen wissen was das für ein Feld ist? Ich dachte er liest immer String aus. Wie kann man das denn wieder anstellen?
grep -ri shit /usr/src/linux/*
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#2

Re: via OLE Excel auslesen - Feld ist double und nicht Varia

  Alt 6. Mai 2007, 12:03
Hallo,

bist du sicher, dass der Fehler im gezeigten Code auftritt? Bei welcher Zeile?

Dein Code geht durch die Zellen der ersten Zeile eines WorkSheets, überspringt einzelne Leerzellen und stoppt, wenn zwei aufeinander folgende leere Zellen gefunden werden. Willst du das wirklich?

Wenn eine einzelne Leerzelle das Abbruchkriterium darstellt, dann ist eine kopfgesteuerte Schleife (while) passender:

Delphi-Quellcode:
const
  FMT = 'Line %d: %s';
var
  iCol: Integer;
  s: string;
begin
  iCol := 1;
  while Sheet.Cells.Item[1, iCol].Value <> Null do
  begin
    s := Sheet.Cells.Item[1, iCol].Value;
    Memo.Lines.Add(Format(FMT, [iCol, s]));
    Inc(iCol);
  end;
end;
Getippt und nicht getestet. Insbesondere den Test zum Abbruch der Schleife kann ich nicht überprüfen, da ich kein Excel installiert habe.

Ansonsten gibt es da noch Cells.SpecialCells(xlCellTypeLastCell, EmptyParam). Damit kannst du die letzte verwendete Zeile und Spalte feststellen.

Grüße vom marabu
  Mit Zitat antworten Zitat
hronny

Registriert seit: 4. Mai 2006
Ort: Thüringen
97 Beiträge
 
Delphi 2007 Professional
 
#3

Re: via OLE Excel auslesen - Feld ist double und nicht Varia

  Alt 6. Mai 2007, 12:50
Zitat von marabu:
Dein Code geht durch die Zellen der ersten Zeile eines WorkSheets, überspringt einzelne Leerzellen und stoppt, wenn zwei aufeinander folgende leere Zellen gefunden werden. Willst du das wirklich?
Jein. Also der Code den ich gepostet habe ist ja der den ich für die erste Zeile verwende. Die Repeatschleife wird sich nur beenden, wenn er eine Zelle hat die leer ist. Bei den Preislisten die ich bekomme ist das immer so, 1. Zeile immer Kopf, Rest sind die Daten. Das klappt auch. Probleme bereitet ja nur das auslesen der Daten. Sobald eine Zahl in der Zelle vorkommt, ist die OLE Schnittstelle der Meinung das ist ein Double-Feld und kann das logischerweise nicht direkt nach String kopieren. Dabei spielt es keine Rolle ob das Feld mit Excel als Zahlenfeld definiert ist, oder nicht.
Nach langer Suche hier im Forum hab ich die Lösung gefunden mits_tmp:=VarToStr( Excel.Cells[1, j].Value ); Die Funktion konvertiert den Wert einer Variante in einen String, egal ob Zahl oder nicht. Damit klappt es jetzt super! Aber wie ich feststellen muss ist diese "Export" Funktion nicht gerade die schnellste. Werd mir wohl dochne Komponente kaufen die das schneller und ohne installierten Excel kann. Kennt jemand die SMImportSuite von Scalabium?
http://www.scalabium.com/smi/index.htmWenn jemand eine andere Idee hat, kann er die gerne posten. Danke für die Hilfe!
grep -ri shit /usr/src/linux/*
  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 10:38 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