gpt4 book ai didi

excel - 使用 Excel 数据阅读器 (.Net) 读取 XLSX 时出现意外的空成员

转载 作者:行者123 更新时间:2023-12-04 22:10:38 24 4
gpt4 key购买 nike

我正在使用 http://exceldatareader.codeplex.com/ 中的 Excel 数据阅读器读取 XLSX(Microsoft Excel XML 文件)并且我遇到了丢失数据的问题。库返回的数据集中缺少源 Excel 电子表格中的数据。

以下是我正在做的更多细节:

  • 在 Excel 中创建了一个简单的测试电子表格,其中包含一个工作表、一个标题行和两个数据行。保存并关闭 Excel。
  • 打开文件并将流传递到 CreateOpenXmlReader() 方法并取回 IExcelDataReader。
  • 在 IExcelDataReader 上调用 AsDataSet() 方法并返回一个 DataSet。
  • 从表 0 的第 1 行获取 ItemArray。
  • 循环遍历 ItemArray。发现缺少数据(即在我期望 System.string 成员的地方有 System.DBNull 成员)。

  • 这里还有一点分析...

    我调试了代码并查看了 ExcelDataReader 对象模型的内部。找到一个名为“SST”的非公共(public)字符串数组,它似乎包含电子表格中的数据作为单个线性(一维)数组。

    经过仔细检查,我发现我正在寻找的数据也从这个数组中丢失了。在这个原始数据中,该成员根本不存在。

    我的猜测是,由于某种原因,解析器没有从 OOXML 中提取数据并得出单元格为空的结论。查看 OOXML 本身,数据似乎被拆分为 sharedStrings.xml 和 sheet1.xml 文件,因此解析器可能很难将所有这些放在一起。

    将文件保存为二进制格式(Excel 97 到 2003)并读取它可以解决问题,所以表面上似乎证实了我的怀疑是读取 OOXML 格式。

    建议?

    作为权宜之计,我正在将所有文件转换为二进制格式,但这似乎是一个难题。有什么方法可以让我的 OOXML 格式的 Excel 文件使用 Excel 数据阅读器正确读取?

    最佳答案

    要检索 Excel 电子表格 (.xlsx) 并将其加载到数据集中,您无需使用 XML 阅读器或 Excel 数据阅读器等单独的库。在 .NET 中使用普通的 OleDb 函数时,将整个电子表格读入 DataSet 的代码非常简单:

    Sub readInMyExcelFile

    Dim xlsFile as string = "myexcelfile"
    Dim conStr As String = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & xlsFile & ";Extended Properties=""Excel 12.0 Xml;HDR=YES"""

    Dim dtSheets As New DataTable
    Dim tmp As String
    Dim sqlText as Sting

    Using cn As New OleDbConnection(conStr)
    cn.Open()
    dtSheets = cn.GetSchema("Tables")
    End Using

    //Dataset for the spreadsheet
    Dim ds as New DataSet

    /Loop through the names of all the worksheets in the file.
    For Each rw as DataRow in dtSheets.Rows
    tmp = rw("TABLE_NAME")
    tmp = "[" & tmp & "]"

    Dim dt as New DataTable

    Using cn as New OleDbConnection(conStr)
    cn.Open
    /Retrieve all the records from the worksheet.
    sqlText = "SELECT * FROM " & tblName

    Dim adp As New OleDbDataAdapter(sqlText, cn)

    /Fill the data table with the all the data.
    adp.Fill(dt)
    End Using

    ds.Tables.Add(dt)
    Next

    End Sub

    关于excel - 使用 Excel 数据阅读器 (.Net) 读取 XLSX 时出现意外的空成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5986354/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com