首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用exceldatareader获取excel工作表列名

使用exceldatareader获取excel工作表列名
EN

Stack Overflow用户
提问于 2017-01-11 20:24:01
回答 2查看 9.2K关注 0票数 6

我正在编写C#库来读取Excel文件,而不需要像OLDEB(AccessDatabaseEngine)库那样的任何其他依赖项。

因此,我选择了ExcelDataReader库来读取.XLS和.XLSX文件。

在我的本地和部署服务器环境中,ExcelDataReader可以完美地处理这两种文件格式。

我面临的问题是,如何从给定的Excel文件中获取所有列的名称?

EN

回答 2

Stack Overflow用户

发布于 2020-02-24 18:17:48

@Kevin的答案相同,但需要将ExcelDataReader设置为使用标题行作为列标题。代码将如下所示:

代码语言:javascript
复制
var stream = File.Open(@"C:\temp\Book1.xlsx", FileMode.Open, FileAccess.Read);

var excelReader = ExcelReaderFactory.CreateOpenXmlReader(stream);

var result = reader.AsDataSet(new ExcelDataSetConfiguration() {
ConfigureDataTable = (_) => new ExcelDataTableConfiguration() {
    UseHeaderRow = true
}
});

var tables = result.Tables
                   .Cast<DataTable>()
                   .Select(t => new {
                                     TableName = t.TableName,
                                     Columns = t.Columns
                                                .Cast<DataColumn>()
                                                .Select(x => x.ColumnName)
                                                .ToList()
                          });
票数 2
EN

Stack Overflow用户

发布于 2017-01-12 17:24:56

要做到这一点,最简单的方法是同时转换DataTableCollectionDataColumnCollection,这样您就可以对它们使用普通的Linq查询。

例如:

代码语言:javascript
复制
var stream = File.Open(@"C:\temp\Book1.xlsx", FileMode.Open, FileAccess.Read);

var excelReader = ExcelReaderFactory.CreateOpenXmlReader(stream);

var result = excelReader.AsDataSet();

var tables = result.Tables
                   .Cast<DataTable>()
                   .Select(t => new {
                                     TableName = t.TableName,
                                     Columns = t.Columns
                                                .Cast<DataColumn>()
                                                .Select(x => x.ColumnName)
                                                .ToList()
                          });

之所以需要强制转换,是因为DataTableCollectionDataColumnCollection都只实现IEnumerable,而不实现IEnumerable<T>,因为它们可以追溯到泛型出现之前的日子。

要让这段代码工作,您的电子表格必须实际包含已定义的表,而不仅仅是其中包含数据。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41590896

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档