Excel lesen
Moderator: wriedmann
Excel lesen
Hallo
Ich habe eine kleine Dll gefunden mit der man Excel auslesen kann und ich wollte damit mal rumprobieren..
https://www.codeproject.com/Tips/801032 ... h-Lines-of
Nun versuche ich das C# Beispiel in X# umzuschreiben und ggrrrrr ich kriegs nicht hin.
foreach (var worksheet in Workbook.Worksheets(@"C:ExcelFile.xlsx")
foreach (var row in worksheet.Rows)
foreach (var cell in row.Cells)
// if (cell != null) // Do something with the cells
Mein erfolgloser Versuch ist im Anhang
Wie übersetzt man das ?
Gruss Horst
Ich habe eine kleine Dll gefunden mit der man Excel auslesen kann und ich wollte damit mal rumprobieren..
https://www.codeproject.com/Tips/801032 ... h-Lines-of
Nun versuche ich das C# Beispiel in X# umzuschreiben und ggrrrrr ich kriegs nicht hin.
foreach (var worksheet in Workbook.Worksheets(@"C:ExcelFile.xlsx")
foreach (var row in worksheet.Rows)
foreach (var cell in row.Cells)
// if (cell != null) // Do something with the cells
Mein erfolgloser Versuch ist im Anhang
Wie übersetzt man das ?
Gruss Horst
- Attachments
-
- Start.TXT
- (833 Bytes) Downloaded 65 times
Excel lesen
Horst
Remove the local declarations for worksheet, row and cell and try this:
Explanation:
FOREACH wants either:
- VAR before the variable name
- AS <type> after the variable name
Robert
Remove the local declarations for worksheet, row and cell and try this:
Code: Select all
FOREACH VAR worksheet IN Workbook.Worksheets("C:xideExcelTest.xlsx")
AAdd (aExcelDaten, "neues Sheet")
FOREACH VAR row IN worksheet.Rows
cDataString := ""
FOREACH VAR cell IN row.Cells
cDataString := cDataString + cell+";"
NEXT
AAdd (aExcelDaten, cDataString)
NEXT
NEXT
Explanation:
FOREACH wants either:
- VAR before the variable name
- AS <type> after the variable name
Robert
XSharp Development Team
The Netherlands
robert@xsharp.eu
The Netherlands
robert@xsharp.eu
Excel lesen
Hi Robert
Then it comes
error xs0120: an object reference is requiered for the non-static field. method. or property 'worksheet.Rows'
Horst
Then it comes
error xs0120: an object reference is requiered for the non-static field. method. or property 'worksheet.Rows'
Horst
Excel lesen
Wolfgang Riedmann
Meran, South Tyrol, Italy
wolfgang@riedmann.it
https://www.riedmann.it - https://docs.xsharp.it
Meran, South Tyrol, Italy
wolfgang@riedmann.it
https://www.riedmann.it - https://docs.xsharp.it
Excel lesen
Hallo Wolfgang
LOL fast peinlich, daran bin ich schon mal gescheitert.
Aber warum gibt es bei der Zeile
FOREACH VAR worksheet IN Workbook.Worksheets("C:xideExcelTest.xlsx") keinen Error ?
Und nun habe ich noch das Problem, dass cell kein string ist sondern eine Klasse und ich den Wert in der Zelle haben muss.
Versucht habe ich: cell:value dann crashed die Exe mit der Fehlermeldung: Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt.
Ich habe mal das cell.txt (cs) angehängt, wie komme ich auf den Inhalt einer Zelle ? Value ist doch darin als Variable definiert ??
Gruss
Horst
LOL fast peinlich, daran bin ich schon mal gescheitert.
Aber warum gibt es bei der Zeile
FOREACH VAR worksheet IN Workbook.Worksheets("C:xideExcelTest.xlsx") keinen Error ?
Und nun habe ich noch das Problem, dass cell kein string ist sondern eine Klasse und ich den Wert in der Zelle haben muss.
Versucht habe ich: cell:value dann crashed die Exe mit der Fehlermeldung: Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt.
Ich habe mal das cell.txt (cs) angehängt, wie komme ich auf den Inhalt einer Zelle ? Value ist doch darin als Variable definiert ??
Gruss
Horst
- Attachments
-
- Cell.txt
- (2.99 KiB) Downloaded 58 times
Excel lesen
Hallo Horst,
C# unterscheidet nicht zwischen statischen Methoden (also Methoden, die sich auf die Klasse beziehen) und "normalen" Methoden, also solchen, die sich auf ein Objekt der Klasse beziehen - es wird immer der Punkt verwendet.
X# unterscheidet hier sehr wohl: ein Punkt für statische Methoden und ein Doppelpunkt für normale Methoden.
WorkSheets ist eine statische Methode der Klasse Workbook, daher der Punkt.
Rows ist ein Zugriff auf ein Objekt der Klasse Worksheet, daher der Doppelpunkt.
Um Dein Problem mit dem Value zu lösen, würde ich mal den Debugger drauf ansetzen.
Mache ich ggf später noch und zeige es Dir hier.
Wolfgang
C# unterscheidet nicht zwischen statischen Methoden (also Methoden, die sich auf die Klasse beziehen) und "normalen" Methoden, also solchen, die sich auf ein Objekt der Klasse beziehen - es wird immer der Punkt verwendet.
X# unterscheidet hier sehr wohl: ein Punkt für statische Methoden und ein Doppelpunkt für normale Methoden.
WorkSheets ist eine statische Methode der Klasse Workbook, daher der Punkt.
Rows ist ein Zugriff auf ein Objekt der Klasse Worksheet, daher der Doppelpunkt.
Um Dein Problem mit dem Value zu lösen, würde ich mal den Debugger drauf ansetzen.
Mache ich ggf später noch und zeige es Dir hier.
Wolfgang
Wolfgang Riedmann
Meran, South Tyrol, Italy
wolfgang@riedmann.it
https://www.riedmann.it - https://docs.xsharp.it
Meran, South Tyrol, Italy
wolfgang@riedmann.it
https://www.riedmann.it - https://docs.xsharp.it
Excel lesen
Hallo Horst,
ich habe jetzt wie versprochen den Debugger auf das Cell-Objekt angesetzt: Die Variable "Amount" ist ein Double, also numerisch, während die Variable "Text" den Wert als String gibt.
Und das ist Dein etwas angepasster Code:
Wolfgang
ich habe jetzt wie versprochen den Debugger auf das Cell-Objekt angesetzt: Die Variable "Amount" ist ein Double, also numerisch, während die Variable "Text" den Wert als String gibt.
Und das ist Dein etwas angepasster Code:
Code: Select all
using excel
function Start( ) as void
System.Console.WriteLine("Hello x#!")
local aExcelDaten:= {} as array
local cDataString as string
local nCnt as dword
foreach worksheet as worksheet in Workbook.Worksheets("C:devnettempsample.xlsx")
AAdd (aExcelDaten, "neues Sheet")
foreach row as Row in worksheet:Rows
cDataString := ""
foreach cell as Cell in row:Cells
altd()
cDataString := cDataString + cell:Text +";"
next
AAdd (aExcelDaten, cDataString)
next
next
for nCnt := 1 upto ALen(aExcelDaten)
System.Console.WriteLine( AsString( aExcelDaten[nCnt] ) )
next nCnt
return
Wolfgang Riedmann
Meran, South Tyrol, Italy
wolfgang@riedmann.it
https://www.riedmann.it - https://docs.xsharp.it
Meran, South Tyrol, Italy
wolfgang@riedmann.it
https://www.riedmann.it - https://docs.xsharp.it
Excel lesen
Horst,
C# allows to add a non string to a string. It will silently call ToString().
So change the code to:
cDataString := cDataString + cell:ToString()+";"
Robert
C# allows to add a non string to a string. It will silently call ToString().
So change the code to:
cDataString := cDataString + cell:ToString()+";"
Robert
XSharp Development Team
The Netherlands
robert@xsharp.eu
The Netherlands
robert@xsharp.eu
Excel lesen
Hallo Wolfgang
Danke !
Mein grober Fehler war 'cell != null' nicht reinzuschreiben , weil das Prg dann sofort abstürzt wen eine Zelle leer ist.
Den Debugger habe ich mal gestartet aber er lief einfach durch. Nicht wie bei VO wo er bei der ersten Prg Zeile stoppt. Altd() reinzuhängen kam mir nicht in den Sinn, da ich schon lange den Debugger nicht mehr benutzte. (CGI)
Ich habe mir dann noch den Array aExceldaten angeschaut und erschrack was alles abgelegt ist. Wusste gar nicht das Arrays so kompliziert sind.
Habe die funktionierende Version noch anghängt, kann ja vieleicht nocht ein anderer brauchen.
Gruss
Horst
Danke !
Mein grober Fehler war 'cell != null' nicht reinzuschreiben , weil das Prg dann sofort abstürzt wen eine Zelle leer ist.
Den Debugger habe ich mal gestartet aber er lief einfach durch. Nicht wie bei VO wo er bei der ersten Prg Zeile stoppt. Altd() reinzuhängen kam mir nicht in den Sinn, da ich schon lange den Debugger nicht mehr benutzte. (CGI)
Ich habe mir dann noch den Array aExceldaten angeschaut und erschrack was alles abgelegt ist. Wusste gar nicht das Arrays so kompliziert sind.
Habe die funktionierende Version noch anghängt, kann ja vieleicht nocht ein anderer brauchen.
Gruss
Horst
- Attachments
-
- Start.TXT
- (915 Bytes) Downloaded 63 times
Excel lesen
Horst,
Part of the problem of "." versus ":" is caused by the fact that you are using variable names in your code that are identical to type names.
If you write
then the compiler does not know if the word before the dot refers to the local variable or the type.
If you use different names
then you should be able to use both
and
Robert
Part of the problem of "." versus ":" is caused by the fact that you are using variable names in your code that are identical to type names.
Code: Select all
FOREACH worksheet AS worksheet IN Workbook.Worksheets("C:xideExcelTest.xlsx")
Code: Select all
worksheet.Rows
If you use different names
Code: Select all
FOREACH oWorksheet AS worksheet IN Workbook.Worksheets("C:xideExcelTest.xlsx")
Code: Select all
oWorksheet.Rows
Code: Select all
oWorksheet:Rows
Robert
XSharp Development Team
The Netherlands
robert@xsharp.eu
The Netherlands
robert@xsharp.eu