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