Hallo Zusammen,

meine Verwirrung ist wiedermal ziemlich groß. Folgendes Problem:

Ich möchte aus einer Excel- Datei Daten importieren ohne Excel selbst zu öffnen. Dazu habe ich die Ausgangsdaten als *.xml Dateien gespeichert, um dann mithilfe des Excel-XML-Schemas wieder auf den Inhalt zugreifen zu können. Soweit so gut, dazu habe ich zwei Funktionen gesschrieben:

Code:
''' <summary> 
''' Öffnet eine Excel *.xml Datei und gibt den Inhalt als Dataset zurck. 
''' </summary> 
''' <param name="p_Filepath">Der Pfad in dem die Datei gespeichert ist.</param> 
''' <param name="p_Filename">Der Name der Datei.</param> 
''' <returns>Ein Dataset das den Inhalt der Excel- Datei darstellt.</returns> 
''' <remarks></remarks> 
Public Function OpenExcelXmlFile(ByVal p_Filepath As String, ByVal p_Filename As String) As Data.DataSet 
  Dim t_XDoc As XDocument = XDocument.Load(p_Filepath & p_Filename)Dim t_DataSet As New Data.DataSet() 
  t_DataSet.DataSetName = p_Filename & "_DataSet" 
  For Each worksheet In t_XDoc.<ss:Workbook>.<ss:Worksheet> 
    Dim t_Table = CreateDataTableFrom_XMLspreadsheet(worksheet) 
    t_DataSet.Tables.Add(t_Table) 
  Next worksheet 
  Return t_DataSet 
End Function 

''' <summary> 
''' Erstellt ein Datatable aus einem ExcelXML- Worksheet. 
''' </summary> 
''' <param name="p_XMLspreadsheet">Ein ExcelXML- Worksheet als XElement.</param> 
''' <returns>Ein Datatable das den ExcelXML- Worksheet darstellt.</returns> 
''' <remarks></remarks> 
Public Function CreateDataTableFrom_XMLspreadsheet(ByVal p_XMLspreadsheet As XElement) As DataTable 
  Dim t_Datatable As New DataTable(p_XMLspreadsheet.@ss:Name.ToString) 
  Dim t_ColumnCount As Integer = 0 
  t_Datatable.Columns.Clear() 
  For i = 0 To 255 
    Dim t_nCol As New DataColumn("F" & t_ColumnCount, GetType(String)) 
    t_Datatable.Columns.Add(t_nCol) 
    t_ColumnCount += 1 
  Next i 
  For Each row As XElement In p_XMLspreadsheet.<ss:Table>.<ss:Row> 
    Dim t_nRow As DataRow = t_Datatable.NewRow() 
    t_ColumnCount = 0 
    For Each cell As XElement In row.<ss:Cell> 
      t_nRow.Item("F" & t_ColumnCount) = cell.Value.ToString 
      t_ColumnCount += 1 
    Next cell 
    t_Datatable.Rows.Add(t_nRow) 
  Next row 
  Return t_Datatable 
End Function
Wie man erkennen kann werden alle Werte von mir als String behandelt. Das hat den Hintergrund das die Werte in den Spalten der Ausgangsdaten unterschiedliche Datentypen haben.

Das Problem taucht nun auf wenn ich versuche auf die Reihen eines der Datasets das aus der 'OpenExcelXmlFile'- Funktion zurückgegeben wird einen Filter anzuwenden:

Code:
t_VacFile = OpenExcelXmlFile(My.Resources.VacFilePath, t_VacFilesNames(0)) 
Dim query = From table As DataTable In t_VacFile.Tables Where table.TableName Like "*-*" 
Dim s_RowFilter As String = t_Table.Columns(189).ColumnName & "= " & p_PersonNo & "" 
t_Rows = t_Table.Select(s_RowFilter)
Ich erhalte dann die überaus informative und vielsagende Fehlermeldung: 'Die Operation '=' kann nicht an System.String und System.Int32 durchgeführt werden.'

Wie gesagt habe ich absichtlich alle Werte als String behandelt um solche Fehler vorzubeugen. Kann mir einer Von Euch helfen und findet den Denkfehler?

Ich hab's schon mit diversen Anführungszeichenkombinationen versucht: F189='1400600' oder F189="1400600" oder "F189=1400600" oder "F189='1400600'" .

Zu erwähnen ist vielleicht noch das wenn ich im Direktfenster den Wert manuell ändere und einfache oder doppelte Anführungszeichen vor und hinter dem Wert einsetze dann klappst!

Wenn ich das Programmgesteuert mache kommt wieder die Fehlermeldung. Auch interessant ist, in der Datei sind zwei Arbeitsblätter die abgefragt werden, bei Nummer eins klappst, bei Nummer zwei dann nicht mehr. Beide werden aber über die selbe Funktion importiert.
Achtung: Dies ist ein alter Thread im HTML und Webmaster Forum
Diese Diskussion ist älter als 90 Tage. Die darin enthaltenen Informationen sind möglicherweise nicht mehr aktuell. Erstelle bitte zu deiner Frage ein neues Thema im Forum !!!!!