我正在编写C#库来读取Excel文件,而不需要像OLDEB(AccessDatabaseEngine)库那样的任何其他依赖项。
因此,我选择了ExcelDataReader库来读取.XLS和.XLSX文件。
在我的本地和部署服务器环境中,ExcelDataReader可以完美地处理这两种文件格式。
我面临的问题是,如何从给定的Excel文件中获取所有列的名称?
发布于 2020-02-24 18:17:48
@Kevin的答案相同,但需要将ExcelDataReader设置为使用标题行作为列标题。代码将如下所示:
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()
});发布于 2017-01-12 17:24:56
要做到这一点,最简单的方法是同时转换DataTableCollection和DataColumnCollection,这样您就可以对它们使用普通的Linq查询。
例如:
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()
});之所以需要强制转换,是因为DataTableCollection和DataColumnCollection都只实现IEnumerable,而不实现IEnumerable<T>,因为它们可以追溯到泛型出现之前的日子。
要让这段代码工作,您的电子表格必须实际包含已定义的表,而不仅仅是其中包含数据。
https://stackoverflow.com/questions/41590896
复制相似问题