当前位置:   article > 正文

C#读取大数据Excel文件的几种方法_c# 大量excel文件读取内容

c# 大量excel文件读取内容

一、利用第三方库dll读取Excel文件
1.优点:利用第三方库ClosedXML、Npoi、OpenXML、EPPlus等dll读取Excel文件,程序编写简单,与excel文件直观读取差不多。
2.缺点:读取小数据量比较快,上100万单元格数据就比较慢,需要7000毫秒以上。

二、利用OLEDB读取Excel文件

1.优点:读取速度快。100万单元格数据3000毫秒左右。

2.缺点:数据读取单元格的属性单一。

/// <summary>
/// OLEDB读取EXCEL文件到DATATABLE中
/// </summary>
/// <param name="path">文件名</param>
/// <param name="sheetName">Sheet名</param>
/// <returns>返回DataTable</returns>
private DataTable ReadExcelToDataSet(string path, string sheetName, bool HDR = true)
{
    string connstring = string.Empty;
    if (HDR) { connstring = Program.oledbcon + path + Program.constr; }  //链接字符串

   //string oledbcon = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=";        //链接字符
   //string constr = ";Extended Properties=\"Excel 12.0; HDR=YES; IMEX=1;\"";
   

else { connstring = Program.oledbcon + path + ";Extended Properties=\"Excel 12.0; HDR=NO; IMEX=1;\""; }
    using (OleDbConnection conn = new OleDbConnection(connstring))
    {
        conn.Open();
        DataTable set = new DataTable();
        string sql = string.Format("SELECT * FROM[{0}$]", sheetName);
        OleDbDataAdapter ada = new OleDbDataAdapter(sql, connstring);
        ada.Fill(set);
        conn.Close();
        return set;
    }
}

三、利用LINQToEXCEL读取EXCEL 文件

1.优点:与OLEDB读取速度相当

2.缺点:数据读取单元格的属性单一。表格数据较规整。

#region    LinqToExcel操作
/// <summary>
/// LinqToExcel方式将Excel文件读入到DataTable中
/// </summary>
/// <param name="excelfilename">Excel电子表格的完整路径</param>
/// <param name="sheetname">工作表名称</param>       
/// <returns>DataTable sdt 返回DataTable数据</returns>
private static DataTable ReadExcelToDataTable(string excelfilename, string sheetname)  //,bool MeterHead=true
{
    DataTable sdt = new DataTable();
    try
    {
        var excel = new ExcelQueryFactory(excelfilename);  //建立链接                
        List<string> list = GetColumnNames(excel, sheetname);  //获取工作表列名
        foreach (string s in list) { sdt.Columns.Add(s); }  //写入sdt列名
        int colCount = sdt.Columns.Count;                          //列数
        var indianaCompanies = from c in excel.Worksheet(sheetname)
                               select c;                
        foreach (var cell in indianaCompanies)  // 一行数据
        {
            DataRow dr = sdt.NewRow();
            for (int i = 0; i < colCount; i++)
            {
                dr[i] = cell[i].Value.ToString().Trim();  //第一列数据
            }
            sdt.Rows.Add(dr);
        }
    }
    catch (Exception)
    {
        throw;
    }
    return sdt;
}
/// <summary>
/// LinqToExcel方式将Excel文件读入到DataTable中
/// </summary>
/// <param name="excelfilename"></param>
/// <param name="sheetname"></param>
/// <returns></returns>
private static DataTable ReadExcelToDataTable(ExcelQueryFactory excelfilename, string sheetname)  //,bool MeterHead=true
{
    DataTable sdt = new DataTable();
    //var excel = new ExcelQueryFactory(excelfilename);  //建立链接 
    try
    {
        if (excelfilename != null)
        {
            List<string> list = GetColumnNames(excelfilename, sheetname);  //获取工作表列名
            foreach (string s in list) { sdt.Columns.Add(s); }  //写入sdt列名
            int colCount = sdt.Columns.Count;                          //列数
            var indianaCompanies = from c in excelfilename.Worksheet(sheetname)
                                   select c;
            //int col = indianaCompanies.Count();    //总行数
            //int col = excelfilename.GetColumnNames(sheetname).Count();  //总列数
            foreach (var cell in indianaCompanies)  // 一行数据
            {
                DataRow dr = sdt.NewRow();
                for (int i = 0; i < colCount; i++)
                {
                    dr[i] = cell[i].Value.ToString().Trim();  //第一列数据
                }
                sdt.Rows.Add(dr);
            }
        }
    }
    catch (Exception)
    {
        throw;
    }
    return sdt;
}
/// <summary>
/// 获取工作簿中工作表名称
/// </summary>
/// <param name="excelfilename"></param>
/// <returns></returns>
private static List<string> GetWorkSheetNames(ExcelQueryFactory excelfilename)
{
    List<string> list = new List<string>();
    try
    {
        if (excelfilename != null)
        {
            foreach (string s in excelfilename.GetWorksheetNames())
            { list.Add(s); }
        }
    }
    catch (Exception)
    {
        throw;
    }
    return list;
}
/// <summary>
/// 获得excelfilename文件工作表sheetname的列名
/// </summary>
/// <param name="excelfilename"></param>
/// <param name="sheetname"></param>
/// <returns></returns>
private static List<string> GetColumnNames(ExcelQueryFactory excelfilename, string sheetname)
{
    List<string> names = new List<string>();
    //var excel = new ExcelQueryFactory(excelfilename);  //建立链接
    try
    {
        if (excelfilename != null)
        {
            foreach (string columnname in excelfilename.GetColumnNames(sheetname))
            {
                names.Add(columnname);
            }
        }
    }
    catch (Exception)
    {
        throw;
    }
    return names;
}

 

 

 

 

 

 

 

 

 

 

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/代码探险家/article/detail/923588
推荐阅读
相关标签
  

闽ICP备14008679号