xsharp.eu • Excel lesen - Page 4
Page 4 of 4

Excel lesen

Posted: Tue Dec 15, 2020 3:09 pm
by Horst
Hallo Wolfgang
Habe es aufgegeben die C# dll in X# umzuschreiben.
Habe hier nun noch mein kleines X# Prg und die neueste C# dll inkl. Source hochgeladen, liesst nun Xlsx Files über alle Sheets, kann sicher noch ein anderer gebrauchen. Hoffe alles ist dabei.

Gruss
Horst

Excel lesen

Posted: Wed Dec 16, 2020 4:23 pm
by wriedmann
Hallo Horst,
ich bin mir nicht sicher, dass hier nicht ein Problem im X# Compiler mit den Attributen vorliegt.
Ich habe leider aktuell nicht die Zeit, der Sache nachzugehen - vielleicht über die Weihnachtsfeiertage... (Italien erwägt, das ganze Land über die Feiertage zur roten Zone zu erklären, mit Ausgangssperren und Verbot, die eigene Gemeinde zu verlassen),
Wolfgang

Excel lesen

Posted: Wed Dec 16, 2020 4:46 pm
by Horst
Hallo Wolfgang
Ich habe auch das Gefühl X# macht da was nicht richtig. Aber irgendwie hast du schon recht, man kann das in einer eigenen DLL lassen und wen es schon unter c# läuft kann mans auch lassen.
Ich habe noch kurz ne Frage zu foreach und dem:
FOREACH oworksheet AS worksheet IN Workbook.Worksheets(SELF:aFile [1] [4])
Ich brauche meistens nur gerade das erste Sheet eines Excelfiles. Jetzt springe ich einfach mit EXIT raus.
Einen Array würde ich mit aLen abfragen. Wie kann ich das erste oWorksheet von Workbook ansprechen ?
Gruss
Horst

Excel lesen

Posted: Wed Dec 16, 2020 4:59 pm
by wriedmann
Hallo Horst,
eine Collection beginnt immer mit 0 (nicht mit 1!).
Also würde ich das so machen:

Code: Select all

oWorkSheet := WorkBook.WorkSheets( self:aFile[1][4] )[0]
nachdem Du abgefragt hast, ob die Instanzvariable :Count > 0 ist.
Idealerweise

Code: Select all

oSheets := Workbook.Worksheets( self:aFile[1][4] )
if oSheets:Count > 0
  oSheet := oSheets[0]
endif
Wolfgang

Excel lesen

Posted: Wed Dec 16, 2020 5:06 pm
by Horst
Danke

Wieder was gelernt :-)
Gruss
Horst

Excel lesen

Posted: Thu Dec 17, 2020 3:08 pm
by Horst
Habe jetzt aber ein Problem mit der Declaration.

// FOREACH oworksheet AS worksheet IN Workbook.Worksheets(SELF:aFile [1] [4])

LOCAL oworksheet AS workbook.worksheet
oder LOCAL oworksheet AS worksheet
oWorksheet := Workbook.Worksheets(SELF:aFile [1] [4]) [0]
IF oWorksheet != NULL

Beim komplieren kennt er worksheet nicht
Was mache ich da falsch?
Gruss
Horst

Excel lesen

Posted: Thu Dec 17, 2020 3:25 pm
by robert
Horst,

The type is named Excel.worksheet, not Workbook.worksheet.

Robert

Excel lesen

Posted: Thu Dec 17, 2020 3:42 pm
by Horst
Hi Robert

Ja it works with excel.worksheet, but i thought when i use
#using Excel - then
Local oworksheet as worksheet
shoud be enough? Confused.
And now it stopt at
oWorksheet := Workbook.Worksheets(SELF:aFile [1] [4])[0]
error XS0021: Cannot apply indexing with [] to an expression of type 'System.Collections.Generic.IEnumerable<Excel.worksheet>'
is Wolfgang's example wrong ?
And :-) Starts collection allways with 0 or like Array when VO Dialekt with 1 ??

Horst

Excel lesen

Posted: Thu Dec 17, 2020 3:56 pm
by robert
Horst,

using Excel should work indeed.

W.r.t. error xs0021: apparently the Worksheets property is an IEnumarable<Excel.worksheet> which means that you can use a FOREACH on it but not an index operator.
As an alternative (if you include using System.Linq) you can use the FirstOrDefault() extension method to get the first
element in the collection or NULL when the collection is empty.

And to answer your questions about [0] or [1] based collections:
The indexer of a collection is written in code. It depends on who wrote that code if the collection starts with a 0 or 1.
You can also have indexers that accept a string (like in a dictionary) so there are no "fixed" rules for collections.
So you will have to rely on the documentation, or use a FOREACH or FirstOrDefault() to make sure it always works.
For arrays things are different: normally they start with 1 in X# and with 0 in C#.
I know this is confusing, since both the indexer and the array use the [nPos] notation.

Robert