最近一直在搞关于Excel的东西,包括数据导入Excel和从Excel导入数据库。自己在公司没人教,学的好费劲,不过还好总算这方面学的能应用,具体深入的就不行了。经常看园里大神的帖子,收获不少,有技术的,有勉励的,挺好。
准备工作
确定机子上安装了Excel
首先要引用程序集,分别添加在.net里面Microsoft.Office.Interop.Excel 12.0.0.0和COM里面Microsoft Excel 11.0 Object Library 1.5
然后就是命名空间:
using System.IO;
using Microsoft.Office.Interop.Excel;
using System.Reflection;
using System.Data.OleDb;
将数据导入Excel
一、连接数据库
定义:SqlConnection sql = new SqlConnection()
数据库信息:sql.ConnectionString="Data Source="数据库地址(本地localhost)" ;Initial Catalog = "数据库名";User ID=“登录名”;Password=“密码”;"
连接数据库:sql.Open();
查询语句: SqlDataAdapter sda = new SqlDataAdapter ("查询语句 select * from table1;",sql);
建立缓存,存储数据:DataSet sd = new DataSet(); //sd就是一个表,从0行,0列开始,与数据库查询的表一致
将数据存储到sd中:sql.Fill(sd);
二、建立Excel表
定义:Excel.Application excelApp = new Excel.Application();
建立工作簿:Excel.Workbook wBook = excelApp.Application.Workbooks.Add(Missing.Value);
建立工作表:Worksheet wsheet0 = wBook.Worksheets[1]; wsheet.Name = "First";
(如果不太理解这三个关系,可以看http://www.cnblogs.com/yangecnu/p/Excel-Object-Model.html这个比较详细)
三、导入数据
得到sd表的行数: int rows = sd.Table[0].Rows.Count; 列数 : int cols = sd.Table[0].Columns.Count;
循环: for(i=0;i<rows;i++)
{
for(j=0;j<cols;j++)//Cells[i,j]表示Excel表的First工作薄的第i行,第j列,后面的GetValue是得到sd表的第i行的第j个数据
{ wsheet0.Cells[i,j] = sd.Tables[0].Rows[i].IntemArray.GetValue(j) ; }
}
四、保存
保存对话框: SaveFileDialog sfd= new SaveFileDialog();sfd.Title = “对话框左上的提示”;sfd.FileName =“保存文件的初始名”;sfd.Filter=“Excel文档(*.xls|*.xls)”//文件的格式。
if(sfd.ShowDialog() == DialogResult.OK)//如果选择保存
{ MessageBox.Show("导出成功");wBook.SaveAs(sfd.FileName);}
五、释放
wBook.Close();excelApp.Application.Workbooks.Close();excelApp.Application.Quit();excelApp.Quit();
这就结束了,好少,感觉自己写的程序好多行...原来就这点东西,自己还搞了好长时间才明白个皮毛。囧。