Benutzer mit den meisten Antworten
Excel Datei auslesen

Frage
-
Hallo zusammen.
Ich stelle meine Frage etwas unbedarft, das liegt leider daran das ich in dem Thema nicht sonderlich bewandert bin.
Ich kann in eine Excel Tabelle z.B. in die Zelle B4 einen Wert schreiben.
Diesen Wert kann ich auch oben über der Tabelle bei "fx" schreiben. Im Feld Links daneben steht B4.
In dieses Feld kann ich auch einen Namen schreiben, z.B. BetriebNr.
Wie ist es möglich aus der Zelle, wenn ich über Zeile und Spalte iteriere, diesen Namen (BetriebNr) auszulesen?Gruss Peter
Antworten
-
Hallo,
grundsätzlich kannst du natürlich immer mit den Zelladressen arbeiten. Wenn du ggf. den Namen wissen willst, kannst du das in einem try-catch-Block prüfen:For r = 1 To 5 Dim exRange As Excel.Range = CType(xlWorksheet.Cells(r, 1), Range) Dim name As String = "" Try name = CType(exRange.Name, Name).Name.ToString() Catch ex As COMException If ex.HResult = &H800A03EC Then name = exRange.Address Else Throw ex End If End Try Console.WriteLine(name) Next
Tom Lambert - C# MVP
Wozu Antworten markieren und für Beiträge abstimmen? Klicke hier.
Nützliche Links: .NET Quellcode | C# ↔ VB.NET Konverter | Account bestätigen (Verify Your Account)
Ich: Webseite | Code Beispiele | Facebook | Twitter | Snippets- Als Antwort markiert peter haus Donnerstag, 18. Dezember 2014 09:29
Alle Antworten
-
Excel bietet von Haus an eine eigene API für das .NET Framework an (wenn Excel installiert ist).
Siehe dazu auch: https://support.microsoft.com/kb/302084/de
Wenn du unabhängig von Excel sein möchtest, dann bedenke, dass das neue Excel-Format (*.xlsx) einfach nur eine .ZIP-Datei ist, die das .NET Framework bediehen kann.
Wegen ZIP und .NET: http://msdn.microsoft.com/de-de/library/system.io.packaging.zippackage%28v=vs.110%29.aspx
Dann kannst du die inneren Datein, die einfach nur normales XML sind manipulieren.
.NET und Xml: http://msdn.microsoft.com/de-de/library/system.xml.xmldocument%28v=vs.110%29.aspx
Ich hoffe ich konnte Helfen und freue mich auf eine Rückmeldung.
(C) 2014 Thomas Roskop
-
Hallo,
mit was und wie iterierst du denn über die Zellen? Machst du das aus VBA (also direkt in Excel) oder über .NET? Welche Technik verwendest du unter .NET?Grundsätzlich ist es so, dass die Name-Eigenschaft die Zellenadresse zurück gibt. Der Name dieser Adresse ist dann der benutzerdefinierte Zellenname. In VBA also so:
customName = Range("B2").Name.Name MsgBox customName
Diese Eigenschaft müsste sich auch über Excel InterOp auslesen lassen.
Tom Lambert - C# MVP
Wozu Antworten markieren und für Beiträge abstimmen? Klicke hier.
Nützliche Links: .NET Quellcode | C# ↔ VB.NET Konverter | Account bestätigen (Verify Your Account)
Ich: Webseite | Code Beispiele | Facebook | Twitter | Snippets -
Hallo Tom,
Dank für deine Antwort.
Mit iterieren meine ich.
Dim pos As Integer
Dim o as Object
For r = 7 To xlRange.Rows.Count
exRange = xlWorksheet.Cells(r, pos + 1)
sH = exRange.Text
o=exRange.Name 'gibt eine Exception, wenn kein Name vorhanden ist
o = exRange.Name.namelocal 'hier kann ich den Namen finden, falls vorhanden
End If
NextAber wie geht's wenn kein Name angegeben ist?
Gruss Peter
-
Hallo,
grundsätzlich kannst du natürlich immer mit den Zelladressen arbeiten. Wenn du ggf. den Namen wissen willst, kannst du das in einem try-catch-Block prüfen:For r = 1 To 5 Dim exRange As Excel.Range = CType(xlWorksheet.Cells(r, 1), Range) Dim name As String = "" Try name = CType(exRange.Name, Name).Name.ToString() Catch ex As COMException If ex.HResult = &H800A03EC Then name = exRange.Address Else Throw ex End If End Try Console.WriteLine(name) Next
Tom Lambert - C# MVP
Wozu Antworten markieren und für Beiträge abstimmen? Klicke hier.
Nützliche Links: .NET Quellcode | C# ↔ VB.NET Konverter | Account bestätigen (Verify Your Account)
Ich: Webseite | Code Beispiele | Facebook | Twitter | Snippets- Als Antwort markiert peter haus Donnerstag, 18. Dezember 2014 09:29
-
Hallo Peter,
grundsätzlich kannst Du auch per JET (immer vorhanden, allerdings nur als 32 Bit) bzw. ACE (gibts für 32 und 64 Bit, muss aber grundsätzlich nachinstalliert werden und dann auch noch mit einer ggfs. vorhandenen Officeinstallation zusammenpassen) auf Exceldateien zugreifen.
Wenn es Dateien im alten Excelformat sind, geht das bspw. so:
Dim ConnectionString As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=X:\Datei.xls;Extended Properties=Excel 8.0;" Dim Connection As New OleDbConnection( ConnectionString ) Dim DataAdapter As New OleDbDataAdapter( "SELECT * FROM [Tabelle1$A:C]", Connection ) Dim DataTable As New DataTable( "Tabelle1" ) DataAdapter.Fill( DataTable ) ExcelData.DataSource = DataTable ExcelData.DataBind() DataTable.Dispose() DataAdapter.Dispose() Connection.Close() Connection.Dispose()
Du kannst auch mit einer WHERE Klausel arbeiten, nur bestimmte Spalten auslesen, ... Ggfs. ist das zielführender.
Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET
http://www.asp-solutions.de/ - Consulting, Development
http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community -
Hallo Stefan,
vielen Dank für deinen Hinweis, ich muss mal überlegen was ich verwenden möchte.
Ich überlege auch gerade bezüglich XmlDocument. Falls du einen Link kennst, wie auf Excel Ranges mit Namen zugegriffen wird, könntest du in mir gerne senden.Gruss Peter
-
Hallo Tom,
das wäre eine Möglichkeit.
Ich habe ´den Code so verwendet, da HResult nicht geht?? Ist Protected!
Try
Name = CType(exRange.Name, Excel.Name).Name.ToString()
Catch ex As Runtime.InteropServices.COMException
'If ex.HResult = &H800A03EC Then'End If
If ex.ErrorCode = -2146827284 Then
Name = exRange.Address
Else
Throw ex
End IfEnd Try
Geht HResult bei dir?
Gruss Peter
- Bearbeitet peter haus Donnerstag, 18. Dezember 2014 09:46