ExcelDataReader更改列名称

ExcelDataReader更改列名称,excel,vb.net,exceldatareader,Excel,Vb.net,Exceldatareader,我正在使用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

我正在使用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等


如何获取真实名称,或者如何防止更改它们?

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

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


[1]

谢谢您的帮助。它起作用了。