上篇文章向大家介绍了用DocumentFormat.OpenXml.dll读取excel的方法,这里再向大家介绍一种轻量级简便的方法,用的是Excel.dll,及ICSharpCode.SharpZipLib.dll, 很简单,只需要在vs2013中通过add reference->Manage NuGet Packages->找到ExcelDataReader->点击Install。

Code:

public class ExcelDataReader
{
private string path;
public string Path
{
get { return path; }
set { path = value; }
}
private bool isFirstRowAsColumnNames;
public bool IsFirstRowAsColumnNames
{
get { return IsFirstRowAsColumnNames; }
set { isFirstRowAsColumnNames = value; }
}
public ExcelDataReader(string path, bool isFirstRowAsColumnNames)
{
this.path = path;
this.isFirstRowAsColumnNames = isFirstRowAsColumnNames;
}
private IExcelDataReader GetExcelDataReader()
{
using (FileStream fileStream = File.Open(path, FileMode.Open, FileAccess.Read))
{
IExcelDataReader dataReader;
if (path.EndsWith(".xls"))
{
dataReader = ExcelReaderFactory.CreateBinaryReader(fileStream);
}
else if (path.EndsWith(".xlsx"))
{
dataReader = ExcelReaderFactory.CreateOpenXmlReader(fileStream);
}
else
{
throw new Exception("The file to be process is not an excel file.");
}
dataReader.IsFirstRowAsColumnNames = isFirstRowAsColumnNames;
return dataReader;
}
}
private DataSet GetExcelDataAsDataSet()
{
return GetExcelDataReader().AsDataSet();
}
private DataTable GetExcelWorkSheet(string workSheetName)
{
DataSet dataSet = GetExcelDataAsDataSet();
var sheets = from DataTable sheet in dataSet.Tables
select sheet.TableName;
DataTable workSheet = dataSet.Tables[workSheetName];
if (workSheet == null)
{
throw new Exception(string.Format("The worksheet {0} does not exist, has an incorrect name, or does not have any data in the worksheet", workSheetName));
}
return workSheet;
}
private IEnumerable<string> GetWorkSheetNames()
{
DataSet dataSet = GetExcelDataAsDataSet();
var sheets = from DataTable sheet in dataSet.Tables
select sheet.TableName;
return sheets;
}
public List<List<DataRow>> GetData()
{
List<List<DataRow>> dataRows = new List<List<DataRow>>();
IEnumerable<string> workSheets = GetWorkSheetNames();
logger.Debug("Worksheets count :{0}.", workSheets.Count());
foreach (string sheet in workSheets)
{
try
{
DataTable workSheet = GetExcelWorkSheet(sheet);
List<DataRow> rows = (from DataRow row in workSheet.Rows
where !string.IsNullOrEmpty(row[].ToString())
select row).ToList();
if (rows.Count > )
{
dataRows.Add(rows); }
}
catch (Exception ex)
{ }
}
return dataRows;
}
}
}

最新文章

  1. 【WPF】WPF中调用Winform
  2. ember.js:使用笔记5 使用view
  3. Codeforce Round #216 Div2
  4. 三、freemarker数据、模版指令
  5. The 7th Zhejiang Provincial Collegiate Programming Contest-&gt;Problem G:G - Wu Xing
  6. 简单dp-poj-2231-Moo Volume
  7. Tomcat教程
  8. python的reduce()函数
  9. [LeetCode]题解(python):075-Sort Colors
  10. java的property
  11. 【tmos】SpringBoot项目IDEA不识别依赖,但是能够运行时什么鬼?
  12. const 和 const_cast
  13. 记录:EM 算法估计混合高斯模型参数
  14. ubuntu安装nodejs,npm live-server
  15. Android百度地图2.0运行定位到当前位置时“服务没有启动”
  16. Docker的Mysql数据库:把数据存储在本地目录
  17. BI使用者的角色
  18. 数据库主键ID生成策略
  19. 【Learn】CSS定义
  20. 再次理解HTTP GET协议

热门文章

  1. Spring框架入门之AOP
  2. Leetcode之深度优先搜索(DFS)专题-329. 矩阵中的最长递增路径(Longest Increasing Path in a Matrix)
  3. 记一次CentOS7-MySQL排坑历程
  4. Django 项目创建到启动(最全最详细的第一个项目)
  5. STL中set和multiset小结
  6. Educational Codeforces Round 42 D. Merge Equals (set + pll)
  7. CodeForces - 445B - DZY Loves Chemistry-转化问题
  8. Prim &amp;&amp; Kruskal
  9. 1014 装箱问题 CODE[VS]
  10. Springboot源码分析之Spring循环依赖揭秘