• C#读写 Excel文件类


    最近整理了下前段时间做的东西,关于Excel的读写,在网上也看到不少关于这方面的代码,还是觉得不是很完善,就自己整理了一个Excel文件读写的类。代码如下:

        /// <summary>
        /// 标题:Excel文件助手类
        /// 描述:1.读取指定条件的Excel信息到内存中
        ///       2.将内存中的信息导出到Excel文件中
        /// </summary>
    
    
        class Excel
        {
            //类成员
            private string m_filepath;//文件路径
            public OleDbConnection pOleDbconnection; //文件链接
            string strConnection;
    
            /// <summary>
            /// 构造函数
            /// </summary>
            /// <param name="filepath">excel文件路径</param>
            public Excel (string filepath)
            {
                m_filepath = filepath;
    
            }
            public Excel ()
            {
            }
            /// <summary>
            /// 获取数据源
            /// </summary>
            /// <param name="filepath_">Excel文件路径</param>
            /// <returns>Excel表格数据集</returns>
            /// <example>
            /// Provider代表连接驱动4.0版本
            /// Data Source代表Excel的路径
            /// Extended Properties代表连接Excel的版本,对于Excel 97以上版本都用Excel 8.0
            /// HDR代表默认Excel第一行是否列名,Yse代表是可以直接读取,No反之1
            /// </example>
    
            public DataSet Excel2DataSet (string filepath_)
            {
                
                    //获取文件扩展名
                    string fileType = System.IO.Path.GetExtension(filepath_);
                    if(fileType==".xls")
                    {
                        strConnection = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + m_filepath + ";Extended Properties=Excel 8.0";    
                    }
                    else if(fileType == ".xlsx")
                    {
                        strConnection = @"Provider=Microsoft.Jet.OLEDB.12.0;Data Source=" + m_filepath + ";Extended Properties=Excel 12.0";
                    }
                    else if(string.IsNullOrEmpty(fileType))
                    {
                        return null;
                    }
                    DataSet dataSet = new DataSet();
                    System.Data.DataTable dtSheetName = new System.Data.DataTable();
                    OleDbDataAdapter dataAdapter;//数据适配器
                    try
                    {   //初始化链接并打开
                        pOleDbconnection = new OleDbConnection(strConnection);
                        pOleDbconnection.Open();
     
                        //获取数据源的表定义元数据
                        string SheetName = "";
                        dtSheetName = pOleDbconnection.GetOleDbSchemaTable(OleDbSchemaGuid.Tables,new object[] {null,null,null,"TABLE" });
                       
                        //初始化适配器
                        dataAdapter = new OleDbDataAdapter();
                        for(int i = 0;i < dtSheetName.Rows.Count;i++)
                        {
                            SheetName = (string)dtSheetName.Rows[i]["TABLE_NAME"];
                            string sql_F = @"Select * FROM [" + SheetName + "]";//SQL
                            //筛选有效表
                            if(SheetName.Contains("$") || SheetName.Replace("'","").EndsWith("$"))
                            {
                                dataAdapter.SelectCommand = new OleDbCommand(sql_F,pOleDbconnection);
                                DataSet dsItem = new DataSet();
                                dataAdapter.Fill(dsItem,"[" + SheetName + "]");
                                dataSet.Tables.Add(dsItem.Tables[0].Copy());
                            }
                         
                        }
    
                    }
                    catch(Exception ex)
                    {
    
                        System.Windows.Forms.MessageBox.Show("链接Excel出错!"+ex.Message);
                    }
    
                return dataSet;
            }
             /// <summary>
             /// 将DataTable导出到Excel
             /// </summary>
             /// <param name="excelTable">DataTable</param>
             /// <param name="strFilepath">文件路径</param>
            public void DataTable2Excel (System.Data.DataTable excelTable,string strFilepath)
            {
                Microsoft.Office.Interop.Excel.Application app = new Microsoft.Office.Interop.Excel.ApplicationClass();
    
                try
                {
                    app.Visible = false;
                    Microsoft.Office.Interop.Excel.Workbook wBook = app.Workbooks.Add(true);
                    Microsoft.Office.Interop.Excel.Worksheet wSheet = wBook.Worksheets[1] as Microsoft.Office.Interop.Excel.Worksheet;
                    if(excelTable.Rows.Count > 0)
                    {
                        int row = 0;
                        row = excelTable.Rows.Count;
                        int col = excelTable.Columns.Count;
                        for(int i = 0;i < row;i++)
                        {
                            for(int j = 0;j < col;j++)
                            {
                                string str = excelTable.Rows[i][j].ToString();
                                wSheet.Cells[i + 2,j + 1] = str;
                            }
                        }
                    }
    
                    int size = excelTable.Columns.Count;
                    for(int i = 0;i < size;i++)
                    {
                        wSheet.Cells[1,1 + i] = excelTable.Columns[i].ColumnName;
                    }
                    //设置禁止弹出保存和覆盖的询问提示框   
                    app.DisplayAlerts = false;
                    app.AlertBeforeOverwriting = false;
                    //保存工作簿   
                    wBook.Save();
                    //保存excel文件   
                    app.Save(strFilepath);
                    app.SaveWorkspace(strFilepath);
                    app.Quit();
                    app = null;
                  
                }
                catch(Exception err)
                {
                   System.Windows.Forms.MessageBox.Show("导出Excel出错!错误原因:" + err.Message,"提示信息",
                        System.Windows.Forms.MessageBoxButtons.OK,System.Windows.Forms.MessageBoxIcon.Information);
                   
                }
                finally
                {
                }  
            }
           
        }


  • 相关阅读:
    读写csv文件
    安卓跳转
    求时间精确到秒的数
    航空公司客户价值分析
    利用LM神经网络和决策树去分类
    拉格朗日插值法
    ID3
    K最近邻
    贝叶斯分类
    FilterDispatcher已被标注为过时解决办法
  • 原文地址:https://www.cnblogs.com/giser-whu/p/3707047.html
Copyright © 2020-2023  润新知