zoukankan      html  css  js  c++  java
  • 一个的Excel文件操作类ExcelHelper

    一个的Excel文件操作类--ExcelHelper

     

      1 using System;
      2 using System.Data;
      3 using System.Data.OleDb;
      4 using System.IO;
      5  
      6 namespace DAL
      7 {
      8     /// <summary>
      9     /// Peng制作
     10     /// <para>QQ:378781081</para>
     11     /// </summary>
     12     /// <see cref="http://www.cnblogs.com/VAllen"/>
     13     public class ExcelHelper
     14     {
     15         /// <summary>
     16         /// 初始化一个Excel操作实例
     17         /// <para>请注意,本连接字符串不支持office2010,如需支持,请自行更改连接字符串格式</para>
     18         /// </summary>
     19         /// <param name="pathString">请提供一个Excel文件路径,无论是已创建的或者是未创建的</param>
     20         public ExcelHelper(string pathString)
     21         {
     22             this.ConnectionString = "provider=Microsoft.Jet.OLEDB.4.0;data source=" + 
     23                 pathString + 
     24                     ";Extended Properties=Excel 8.0;Persist Security Info=False";
     25             odc = new OleDbConnection(ConnectionString);
     26         }
     27  
     28         private readonly string ConnectionString;//连接字符串
     29         public OleDbConnection odc;//连接对象
     30  
     31         /// <summary>
     32         /// 返回一个Excel文档中的所有数据
     33         /// </summary>
     34         /// <param name="sql">SQL语句</param>
     35         /// <returns></returns>
     36         public DataSet ReadExcel(string sql)
     37         {
     38             DataSet ds = new DataSet();
     39             odc.Open();
     40             OleDbDataAdapter oda = new OleDbDataAdapter(sql, odc);
     41             oda.Fill(ds);
     42             odc.Close();
     43             return ds;
     44         }
     45  
     46         /// <summary>
     47         /// 返回一个Excel文档中第一个Sheet档的Sheet数据
     48         /// </summary>
     49         /// <returns></returns>
     50         public DataTable ReadExcel()
     51         {
     52             odc.Open();
     53             DataTable dt = odc.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, 
     54                 new object[] { null, null, null, "TABLE" });
     55             odc.Close();
     56             return dt;
     57         }
     58  
     59         /// <summary>
     60         /// 打开一个已存在的Excel文档,并写入数据集
     61         /// <para>请注意,Excel文档内的多个Sheet有可能被覆盖</para>
     62         /// <para>原因:Sheet名相同</para>
     63         /// </summary>
     64         /// <param name="ds">数据集,至少包含一个或多个表(Sheet)</param>
     65         /// <param name="pathString">请提供一个Excel文件路径,如果不存在则自动创建</param>
     66         /// <returns></returns>
     67         public bool WriteExcel(DataSet ds, string pathString)
     68         {
     69             if (!File.Exists(pathString))
     70             {
     71                 FileStream fs = File.Create(pathString);
     72                 fs.Dispose();
     73                 fs.Close();
     74             }
     75             bool result = true;
     76             Microsoft.Office.Interop.Excel.Application excel = 
     77                 new Microsoft.Office.Interop.Excel.Application();//创建Excel操作对象
     78             excel.Workbooks.Open(pathString);
     79             try
     80             {
     81                 excel.SheetsInNewWorkbook = ds.Tables.Count;//创建sheet的数量
     82                 excel.Workbooks.Add();//添加sheet
     83                 for (int number = 0; number < ds.Tables.Count; number++)
     84                 {
     85                     Microsoft.Office.Interop.Excel.Worksheet sheet = 
     86                         excel.ActiveWorkbook.Worksheets[number + 1] as 
     87                             Microsoft.Office.Interop.Excel.Worksheet;//获取sheet;
     88                     DataTable dt = ds.Tables[number];//获取表
     89                     sheet.Name = dt.TableName;//设置sheet名
     90                     int i = 0;
     91                     for (; i < dt.Columns.Count; i++)//动态添加
     92                     {
     93                         sheet.Cells[1, i + 1] = dt.Columns[i].ColumnName;//添加表头
     94                     }
     95                     Microsoft.Office.Interop.Excel.Range range = 
     96                         excel.get_Range(excel.Cells[1, 1], excel.Cells[1, i]);//编辑区域
     97                     range.Font.Bold = true;//字体加粗
     98                     range.Font.Color = 0;//字体颜色
     99                     range.Interior.ColorIndex = 15;
    100                     range.ColumnWidth = 15;//列宽
    101                     range.Borders.LineStyle = 
    102                         Microsoft.Office.Interop.Excel.XlLineStyle.xlContinuous;//边框样式
    103                     for (int y = 0; y < dt.Rows.Count; y++)//动态添加行数据
    104                     {
    105                         for (int x = 0; x < dt.Rows[y].Table.Columns.Count; x++)//动态添加列数据
    106                         {
    107                             sheet.Cells[y + 2, x + 1] = dt.Rows[y][x];//赋值
    108                         }
    109                     }
    110                 }
    111                 excel.Visible = true;//显示预览
    112                 System.Threading.Thread.Sleep(5000);
    113                 excel.ActiveWorkbook.Save();
    114             }
    115             catch (Exception ex)
    116             {
    117                 ex.Message.ToString();
    118                 result = false;
    119             }
    120             finally
    121             {
    122                 excel.ActiveWorkbook.Close();//关闭Excel对象
    123                 excel.Quit();//退出
    124             }
    125             return result;
    126         }
    127  
    128         /// <summary>
    129         /// 创建一个新的Excel文件,并写入数据集
    130         /// <para>请注意,Excel文件可能创建失败</para>
    131         /// <para>原因:指定Excel文件已存在</para>
    132         /// </summary>
    133         /// <param name="ds">数据集,至少包含一个或多个表(Sheet)</param>
    134         /// <param name="pathString">请提供一个Excel文件路径,如果不存在则自动创建</param>
    135         /// <returns></returns>
    136         public bool CreateExcel(DataSet ds, string pathString)
    137         {
    138             bool result = true;
    139             Microsoft.Office.Interop.Excel.Application excel = 
    140                 new Microsoft.Office.Interop.Excel.Application();//create Excel manipulate objects
    141             try
    142             {
    143                 excel.SheetsInNewWorkbook = ds.Tables.Count;//获取Sheet档数量
    144                 excel.Workbooks.Add();
    145                 for (int number = 0; number < ds.Tables.Count; number++)//循环添加Sheet档
    146                 {
    147                     Microsoft.Office.Interop.Excel.Worksheet sheet = 
    148                         excel.ActiveWorkbook.Worksheets[number + 1] as 
    149                             Microsoft.Office.Interop.Excel.Worksheet;//获取sheet;
    150                     DataTable dt = ds.Tables[number];//获取表
    151                     sheet.Name = dt.TableName;//设置Sheet档名
    152                     int i = 0;
    153                     for (; i < dt.Columns.Count; i++)//循环添加列头
    154                     {
    155                         sheet.Cells[1, i + 1] = dt.Columns[i].ColumnName;//设置列头名
    156                     }
    157                     Microsoft.Office.Interop.Excel.Range range = 
    158                         excel.get_Range(excel.Cells[1, 1], excel.Cells[1, i]);//设置编辑区域
    159                     range.Font.Bold = true;//字体加粗
    160                     range.Font.ColorIndex = 0;//字体颜色
    161                     range.Interior.ColorIndex = 15;//背景颜色
    162                     range.ColumnWidth = 15;//列宽
    163                     range.Borders.LineStyle = 
    164                         Microsoft.Office.Interop.Excel.XlLineStyle.xlContinuous;//边框样式
    165                     range.HorizontalAlignment = 
    166                         Microsoft.Office.Interop.Excel.XlHAlign.xlHAlignCenter;//字体居中
    167                     for (int y = 0; y < dt.Rows.Count; y++)//循环添加行
    168                     {
    169                         for (int x = 0; x < dt.Rows[y].Table.Columns.Count; x++)//循环添加列
    170                         {
    171                             sheet.Cells[y + 2, x + 1] = dt.Rows[y][x];//设置列值
    172                         }
    173                     }
    174                 }
    175                 excel.Visible = true;//设置为预览
    176                 System.Threading.Thread.Sleep(5000);//线程延迟5秒再预览
    177                 excel.ActiveWorkbook.SaveAs(pathString, 
    178                     Microsoft.Office.Interop.Excel.XlFileFormat.xlWorkbookNormal);//另存为
    179             }
    180             catch (Exception ex)
    181             {
    182                 ex.Message.ToString();
    183                 result = false;
    184             }
    185             finally
    186             {
    187                 excel.ActiveWorkbook.Close();//关闭Excel对象
    188                 excel.Quit();//退出
    189             }
    190             return result;
    191         }
    192     }
    193 }

    应用示例:

     

      1 using System.Collections.Generic;
      2 using System.Data;
      3 using Model;
      4 
      5 namespace DAL
      6 {
      7     public class StudentExcelServices
      8     {
      9         public StudentExcelServices(string pathString)
     10         {
     11             this.pathString = pathString;
     12             eh = new ExcelHelper(pathString);
     13         }
     14 
     15         private ExcelHelper eh;
     16         private string pathString;
     17 
     18         //填充一个数据集
     19         public void ReadExcel(string sheetName,out DataSet ds)
     20         {
     21             string sql = string.Format(
     22               "select * from [{0}] where [编号] is not null",
     23                   sheetName);
     24             ds = eh.ReadExcel(sql);
     25             return ds;
     26         }
     27 
     28         //读取所有学生信息
     29         public List<Student> ReadExcel()
     30         {
     31             List<Student> studentList = new List<Student>();
     32             Microsoft.Office.Interop.Excel.Application excel = 
     33                 new Microsoft.Office.Interop.Excel.Application();
     34             excel.Workbooks.Open(pathString);
     35             Microsoft.Office.Interop.Excel.Workbook work = 
     36                 excel.Workbooks[1] as Microsoft.Office.Interop.Excel.Workbook;
     37             //省略封装的代码
     38             return studentList;
     39         }
     40 
     41         //打开Excel并且写入数据判断是否成功
     42         public bool WriteExcel(DataSet ds)
     43         {
     44             bool result = eh.WriteExcel(ds, pathString);
     45             return result;
     46         }
     47 
     48         //创建Excel并且写入数据判断是否成功
     49         public bool CreateExcel(DataSet ds)
     50         {
     51             bool result = eh.CreateExcel(ds, pathString);
     52             return result;
     53         }
     54 
     55         //读取所有班级名称
     56         public List<string> ReadGradeList(string sheetName)
     57         {
     58             List<string> gradeList = new List<string>();
     59             string sql = string.Format(
     60               "select [班级] from [{0}] where [班级] is not null group by [班级]",
     61                   sheetName);
     62             DataSet ds = eh.ReadExcel(sql);
     63             foreach (DataTable item in ds.Tables)
     64             {
     65                 foreach (DataRow row in item.Rows)
     66                 {
     67                     gradeList.Add(row[0].ToString());
     68                 }
     69             }
     70             return gradeList;
     71         }
     72 
     73         //读取所有Sheet档名称
     74         public List<string> ReadSheetNameList()
     75         {
     76             List<string> sheetNameList = new List<string>();
     77             DataTable dt = eh.ReadExcel();
     78             foreach (DataRow item in dt.Rows)
     79             {
     80                 sheetNameList.Add(item["TABLE_NAME"].ToString());
     81             }
     82             return sheetNameList;
     83         }
     84     }
     85 }
     86 
     87 //这是实体类
     88 using System;
     89 
     90 namespace Model
     91 {
     92     //学生类
     93     [Serializable]
     94     public class Student
     95     {
     96         public int StudentNo { get; set; }//编号/帐号
     97         public string LoginPwd { get; set; }//密码
     98         public string StudentName { get; set; }//姓名
     99         public string Gender{get;set;}//性别
    100         public Grade GradeName { get; set; }//班级
    101         public string Phone { get; set; }//联系电话
    102         public string Address { get; set; }//地址
    103         public DateTime BornDate { get; set; }//生日
    104         public string Email { get; set; }//邮箱
    105         public string IdentityCard { get; set; }//身份证号码
    106     }
    107 }

    转载的朋友,请不要删除以下行,对此,表示感谢!!!

    原文链接:http://www.cnblogs.com/VAllen/articles/ExcelHelper_Peng.html

  • 相关阅读:
    LOJ#551 Matrix
    洛谷P5163 WD与地图
    洛谷P4831 Scarlet loves WenHuaKe
    LOJ#6118 鬼牌
    支配树
    线性插值
    PropertiesConfiguration
    ThreadLocal
    Thread
    FastJson
  • 原文地址:https://www.cnblogs.com/VAllen/p/ExcelHelper_Peng.html
Copyright © 2011-2022 走看看