[Gelöst] Excel Buffer Problem

23. April 2009 15:56

Hi Leute,

ich habe ein Problem beim Einlesen einer Excel Datei über den Excel Buffer.
Beim Aufruf von der Funktion

ExcelBuffer.ReadSheet;

stürzt das ganze mit der Fehlermeldung

"Überlauf bei der Typenkonvertierung von Text to Text"

Kann man den Fehler beim Einlesen verhindern, ohne etwas an der Excel Quelle zu verändern ???

MfG
Zuletzt geändert von DeDeMarco am 23. April 2009 17:33, insgesamt 1-mal geändert.

Re: Excel Buffer Problem

23. April 2009 15:59

Ich habe eben erst mit dem ExcelBuffer in NAV 2009 gearbeitet, ohne Fehler ...
Habt ihr in dieser Datenbank die Tabelle Excel Buffer vielleicht geändert? Oder ist NAV 2009 nicht installiert?
Oder ist das Ganze ein Standardreport, sodass man es in der CRONUS-DB reproduzieren kann?

Re: Excel Buffer Problem

23. April 2009 16:02

HI Natalie,

das Problem liegt meiner Ansicht nach nicht am Excel Buffer selber.

Das Problem liegt an der Excel Datei, wo eine Spalte einen enorm grossen Wert enthält.
Wenn ich diesen Wert lösche, läuft das ganze normal durch.

EDIT: Ich lese das ganze über eine CU ein.

MfG

Re: Excel Buffer Problem

23. April 2009 16:09

DeDeMarco hat geschrieben:das Problem liegt meiner Ansicht nach nicht am Excel Buffer selber.

Ich glaube schon :-)
Der Excelbuffer hat ein Feld namens "Cell Value as Text", welches beim Einlesen den Feldinhalt aufnimmt. Dieses Feld ist aber nur max. 250 Zeichen lang - könnte es sein, dass deine Zelle darüber hinaus geht?
Oder meintest du, da ist eine besonders lange Formel drin? Ähnliches Spiel: Diese kann 4x250 Zeichen lang sein.

Jetzt bin ich gespannt, was in deinem Feld drin steht :-)

Re: Excel Buffer Problem

23. April 2009 16:13

Hi Natalie,

das Feld ist größer als 250 Zeichen.

Aber ich benutze dieses Feld bis dahin noch garnicht.

Code:
ExcelBuffer.OpenBook('c:\\test\test.xls','test');

ExcelBuffer.ReadSheet; <<< hier passiert es schon

IF ExcelBuffer.FIND('+') THEN
  CountRows:=ExcelBuffer."Row No.";



usw...

Re: Excel Buffer Problem

23. April 2009 16:18

DeDeMarco hat geschrieben:ExcelBuffer.ReadSheet; <<< hier passiert es schon

Aber diese Funktion macht doch nichts anderes, als in die Tabelle Excel Buffer zu schreiben (und damit das von mir genannte Feld zu füllen) :-)
Dabei kann es natürlich zu einem Überlauf kommen ...

Oder meinst du die ganze Zeit, dass der Fehler schon bei ExcelBuffer.OpenBook auftritt?

Re: Excel Buffer Problem

23. April 2009 16:21

Nein...das war schon korrekt, dass es beim .ReadSheet auftritt.

Gibt es eine Möglichkeit da etwas zu tun ?

Re: Excel Buffer Problem

23. April 2009 16:26

DeDeMarco hat geschrieben:Gibt es eine Möglichkeit da etwas zu tun ?

Wie viele Zeichen stehen denn in deinem schuldigen Excel-Feld? Das Excelbuffer-Feld muss entsprechend verlängert werden. Ich weiß allerdings nicht, welche Seiteneffekte das hat.

Kann man deinen Wert in Excel nicht vielleicht kürzen, runden ...?

Re: Excel Buffer Problem

23. April 2009 16:32

Natalie hat geschrieben:
DeDeMarco hat geschrieben:Gibt es eine Möglichkeit da etwas zu tun ?

Wie viele Zeichen stehen denn in deinem schuldigen Excel-Feld? Das Excelbuffer-Feld muss entsprechend verlängert werden. Ich weiß allerdings nicht, welche Seiteneffekte das hat.

Kann man deinen Wert in Excel nicht vielleicht kürzen, runden ...?


Es handelt sich hier um ein Textfeld mit mind. 500 Zeichen.
Kürzen ist leider nicht möglich.

Ich hätte mir vorgestellt, das er das betreffende Feld einfach erstmal ignoriert beim einlesen, dass der Rest wenigstens vernünftig durch geht.

Re: Excel Buffer Problem

23. April 2009 17:10

DeDeMarco hat geschrieben:Ich hätte mir vorgestellt, das er das betreffende Feld einfach erstmal ignoriert beim einlesen, dass der Rest wenigstens vernünftig durch geht.


Kannst ja mal folgendes ausprobieren:
Tabelle Excel Buffer, Funktion ReadSheet

Code:
..
IF STRLEN(DELCHR(FORMAT(XlWrkSht.Range(xlColID + xlRowID).Value),'<',' ')) > MAXSTRLEN("Cell Value as Text") THEN // neu
  "Cell Value as Text" := COPYSTR(DELCHR(FORMAT(XlWrkSht.Range(xlColID + xlRowID).Value),'<',' ')1, MAXSTRLEN("Cell Value as Text")) // neu
ELSE // neu
  "Cell Value as Text" := DELCHR(FORMAT(XlWrkSht.Range(xlColID + xlRowID).Value),'<',' '); // alt
..


Nicht getestet, also ohne Garantie und Gewähr ;-)

Re: Excel Buffer Problem

23. April 2009 17:33

Funktioniert Super...

Vielen DANK !!!

Re: Excel Buffer Problem

18. Oktober 2010 13:01

Natalie hat geschrieben:
DeDeMarco hat geschrieben:Ich hätte mir vorgestellt, das er das betreffende Feld einfach erstmal ignoriert beim einlesen, dass der Rest wenigstens vernünftig durch geht.


Kannst ja mal folgendes ausprobieren:
Tabelle Excel Buffer, Funktion ReadSheet

Code:
..
IF STRLEN(DELCHR(FORMAT(XlWrkSht.Range(xlColID + xlRowID).Value),'<',' ')) > MAXSTRLEN("Cell Value as Text") THEN // neu
  "Cell Value as Text" := COPYSTR(DELCHR(FORMAT(XlWrkSht.Range(xlColID + xlRowID).Value),'<',' ')1, MAXSTRLEN("Cell Value as Text")) // neu
ELSE // neu
  "Cell Value as Text" := DELCHR(FORMAT(XlWrkSht.Range(xlColID + xlRowID).Value),'<',' '); // alt
..


Nicht getestet, also ohne Garantie und Gewähr ;-)


Sorry, dass ich nen alten Thread pushe,aber ich stehe vor dem selben Problem.
Der Quellcode von Natalie sieht super aus, der Compiler sagt mir, dass vor der 1 eine ) fehlt. Füge ich sie ein, sagt er "Funktion blah... Mindestanzahl von Parametern..."

Irgendwas übersehe ich, obwohl ich den Code 1:1 übernommen hab :(

EDIT: nachdem ich das zweite MAXSTRLEN("Cell Value as Text") substituiert habe durch 250, funktioniert es, wird ohne Murren compiliert (WARUM NUR?)
Code:
IF STRLEN(DELCHR(FORMAT(XlWrkSht.Range(xlColID + xlRowID).Value),'<',' ')) > MAXSTRLEN("Cell Value as Text") THEN
"Cell Value as Text" := COPYSTR(
          DELCHR(FORMAT(XlWrkSht.Range(xlColID + xlRowID).Value) ,'<',' '),1, 250) //
ELSE // neu
  "Cell Value as Text" := DELCHR(FORMAT(XlWrkSht.Range(xlColID + xlRowID).Value),'<',' ');

Re: [Gelöst] Excel Buffer Problem

18. Oktober 2010 13:10

Mir schwant, dass du hauptsächlich das fehlende Komma vor der "1" ergänzt hast.