• C# 操作 Excel 文件(.xls 或 .xlsx)


    在.net中,常用的操作excel文件的方式,有三种: OLE DB的形式, 第三方框架NPOI, Office组件。

    总结: 通过对比,在读取大数据量的excel文件,建议用OLE DB的形式,把excel文件当作数据源,效率比较高。

    1.  用OLE DB 方法

    public static DataTable CreateDataTable(string excelFileName, string sheetName)
            {
                DataTable dt = new DataTable();
                try
                {
                    //For ".xlsx" excel file.
                    //oleDbConnection = new OleDbConnection("provider=Microsoft.ACE.OLEDB.12.0; Data Source='" + files[0] + "'" + "; Extended Properties='Excel 8.0;HDR=No;IMEX=1;'");
    
                    using (OleDbConnection oleDbConnection = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0; Data Source='" + excelFileName + "'" + "; Extended Properties= 'Excel 8.0;HDR=No;IMEX=1;'"))
                    {
                        OleDbDataAdapter oleDbAdapter = new OleDbDataAdapter("select * from [" + sheetName + "]", oleDbConnection);
                        oleDbAdapter.Fill(dt);
                    }
    
                    return dt;
                }
                catch (Exception ex)
                {
                    throw new Exception(string.Format("CreateDataTable Function error for : {0}", ex.Message));
                }
            }
    

    2. 用NPOI 方法

    public static DataTable CreateDataTableByNPOI(string excelFileName, string sheetName)
            {
                DataTable dt = new DataTable();
                IWorkbook workbook = null;
                ISheet sheet = null;
                try
                {
                    string prefix = excelFileName.Substring(excelFileName.IndexOf('.')).ToLower();
    
                    using (FileStream fs = new FileStream(excelFileName, FileMode.Open, FileAccess.Read))
                    {
                        if (prefix == ".xls")
                        {
                            workbook = new HSSFWorkbook(fs);
                        }
                        else if (prefix == ".xlsx")
                        {
                            workbook = new XSSFWorkbook(fs);
                        }
                    }
    
                    sheet = workbook.GetSheet(sheetName);
    
                    if (sheet != null)
                    {
                        IRow firstRow = sheet.GetRow(0);
                        int cellCount = firstRow.LastCellNum;
    
                        for (int i = firstRow.FirstCellNum; i < cellCount; i++)
                        {
                            ICell cell = firstRow.GetCell(i);
                            if (cell != null)
                            {
                                string cellValue = cell.StringCellValue;
    
                                if (cellValue != null)
                                {
                                    DataColumn column = new DataColumn(cellValue);
                                    dt.Columns.Add(column);
                                }
                            }
                        }
    
                        for (int i = sheet.FirstRowNum + 1; i <= sheet.LastRowNum; i++)
                        {
                            IRow row = sheet.GetRow(i);
                            if (row == null)
                            {
                                continue;
                            }
    
                            DataRow dataRow = dt.NewRow();
                            for (int j = row.FirstCellNum; j < cellCount; ++j)
                            {
                                if (row.GetCell(j) != null)
                                {
                                    dataRow[j] = row.GetCell(j).ToString();
                                }
                            }
                            dt.Rows.Add(dataRow);
                        }
                    }
    
                    return dt;
                }
                catch (Exception ex)
                {
                    throw new Exception(string.Format("CreateDataTableByNPOI Function error for : {0}", ex.Message));
                }
                finally
                {
                    workbook.Close();
                }
            }
    

      注意: 要引入NPOI 相关的DLL文件。

      

  • 相关阅读:
    ES6笔记(二):对象简写
    python通过protobuf实现rpc
    Python之mmap内存映射模块(大文本处理)说明
    python 基于Avro实现RPC
    python 使用 thrift 教程
    软光栅(BlinnPhong 模型,无贴图)(Python)
    递归绘制贝塞尔曲线
    计算机网络核心概览
    BlinnPhong 光照模型 Demo (Python)
    博客园图片批量自动上传
  • 原文地址:https://www.cnblogs.com/FocusIN/p/5566098.html
Copyright © 2020-2023  润新知