【问题标题】:ExcelDataReader changing columns nameExcelDataReader 更改列名
【发布时间】:2021-02-22 21:47:04
【问题描述】:

我正在使用 ExcelDataReader 读取 Excel 文件

Dim entireExcel As DataTableCollection

Using ofd As OpenFileDialog = New OpenFileDialog() With {.Filter = "Excel Workbook|*.xlsx|Excel 97-2003 Workbook|*.xls"}
    If ofd.ShowDialog() = DialogResult.OK Then
    txtFileName.Text = ofd.FileName

        Using stream = File.OpenRead(ofd.FileName)
            System.Text.Encoding.RegisterProvider(System.Text.CodePagesEncodingProvider.Instance)
            Dim reader As IExcelDataReader = ExcelReaderFactory.CreateReader(stream)
            entireExcel = reader.AsDataSet(New ExcelDataSetConfiguration() With {
                             .ConfigureDataTable = Function(__) New ExcelDataTableConfiguration() With {
                             .UseHeaderRow = True}}).Tables
        End Using
    End If
End Using

一切正常,除了一个例外:工作表中的列名不是 Excel 中的真实列名。如果该列是左侧列的副本,则会在名称中添加 _1、_2 等。如果缺少列名,则创建名称 Column0、Column1、Column2 等。

如何获取真实姓名,或者如何防止更改?

【问题讨论】:

    标签: excel vb.net exceldatareader


    【解决方案1】:

    这种行为的原因是,如果您尝试设置重复的列名 [1],DataSet 的实现会抛出 DuplicateNameException。 ExcelDataReader 通过为您生成唯一名称来解决此问题。

    您需要根据自己的情况找到解决方法。 F.ex 将 UseHeaderRow 设置为 false 并从数据中手动读取列名。或者根本不使用AsDataSet(),而是依赖读者的Read()/GetValue()/GetXXX()方法。

    [1]https://docs.microsoft.com/en-us/dotnet/api/system.data.datacolumn.columnname

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-12-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多