1.目的和思路
我们想做的是把Sql的数据库的表导出到Excel。。。
那么想一想应该怎么做?
首先我们要连接数据库,读取数据库的表,把每个表的每行和每列依次读取出来,然后写入到文件,文件为Excel格式的。。。
2.步骤和过程
第一,我们要连接数据库。。
数据库添加到工程里面,参见前面的文章。。然后
我们要创建一个类,我们命名为SqlToExcel.cs

public class sqlconn { public sqlconn() { // // TODO: 在此处添加构造函数逻辑 // } public SqlConnection ConnStr; public string SqlConnStr()//设置数据库文件连接字符串 { string ConnectString = @"Data Source=.SQLEXPRESS;AttachDbFilename=|DataDirectory|DataBaseStudent.mdf;Integrated Security=True;User Instance=True"; //@"Data Source=.SQLEXPRESS2008;AttachDBFilename=|DataDirectory|10xinguan-DB.mdf;Integrated Security=True;User Instance=True"; //"server=.;database=Student-DB;uid=sa;pwd=sa"; //这里没有打开数据库的原因是遵循晚打开、早关闭的原则 return ConnectString; } public void open() //打开数据库 { string constr; constr = SqlConnStr(); ConnStr = new SqlConnection(constr); ConnStr.Open(); } public void close() //关闭数据库 { ConnStr.Dispose(); ConnStr.Close(); } public int execsql(string sql) //执行sql语句 { open(); SqlCommand cmd = new SqlCommand(sql, ConnStr); int count = cmd.ExecuteNonQuery(); close(); return count; } public DataSet dataset(string sql, string tablename) //返回DataSet对象 { open(); SqlDataAdapter da = new SqlDataAdapter(sql, ConnStr); DataSet ds = new DataSet(); da.Fill(ds, tablename); return ds; } public DataView dataview(string sql, string tablename) //返回DataView对象 { DataSet ds = new DataSet(); ds = dataset(sql, tablename); DataView dv = new DataView(ds.Tables[0]); return dv; } public SqlDataReader datareader(string sql) //返回DataReader对象 { open(); SqlCommand cmd = new SqlCommand(sql, ConnStr); SqlDataReader dr = cmd.ExecuteReader(); return dr; } public DataTable datatb(string sql) //返回DataSet对象 { open(); SqlDataAdapter da = new SqlDataAdapter(sql, ConnStr); DataTable dt = new DataTable(); da.Fill(dt); return dt; } }
这个类的作用就是配置下数据库,方便读取数据库的表方便。。
数据库配置完成了我们要操作EXCEL了。。首先我们要引用一个.net类库Microsoft.Office.Interop.Excel

public int DataToExcel1() { Microsoft.Office.Interop.Excel.Application excelApp = new Microsoft.Office.Interop.Excel.Application();//出错原因是没安装OFFICE的Excel,wps的不行 Microsoft.Office.Interop.Excel.Workbook excelWB; excelWB = excelApp.Workbooks.Add(System.Reflection.Missing.Value); //创建工作簿(WorkBook:即Excel文件主体本身) Worksheet excelWS = (Worksheet)excelWB.Worksheets[1]; //创建工作表(即Excel里的子表sheet) 1表示在子表sheet1里进行数据导出 excelWS.Cells.NumberFormat = "@"; // 如果数据中存在数字类型 可以让它变文本格式显示 sqlconn con = new sqlconn(); con.open(); System.Data.DataTable dt = con.datatb("SELECT * FROM 部门列表"); //int count = dt.Columns.Count; for (int i = 0; i < dt.Rows.Count; i++) { for (int j = 0; j < dt.Columns.Count; j++) { excelWS.Cells[i + 1, j + 1] = dt.Rows[i][j].ToString(); //Excel单元格第一个从索引1开始 } } excelWB.SaveAs("D:\部门列表.xlsx"); //将其进行保存到指定的路径 excelWB.Close(); excelApp.Quit(); //释放可能还没释放的进程 con.close(); return dt.Rows.Count; }
我们定义一个自定义方法,用来创建,读取,写入EXCEL..
然后我们前台可以放一个按钮
<Button Content="导出到EXCEL" Height="23" HorizontalAlignment="Left" Margin="0,25,0,0" Name="button1" VerticalAlignment="Top" Width="82" Click="button1_Click" />
相应的后台代码是
private void button1_Click(object sender, RoutedEventArgs e) { DataToExcel1(); MessageBox.Show("导出EXCEL文件成功!"); }
调用自定的方法,然后显示消息框。。
恩。。然后就结束了。。