C#操作excel(多种方法比较)
我们在做excel资料的时候,通常有以下方法。 一.导入导出excel常用方法:
1.用查询表的方式查询并show在数据集控件上。
代码
public static string strCon = \EDB.4.0 ; Data Source =C:\\\\08.xls;Extended Properties=Excel 8.0\;
public static DataSet ds;
protected void Page_Load(object sender, EventArgs e) {
OleDbConnection conn = new OleDbConnection(strCon); string sql = \; conn.Open();
OleDbDataAdapter myCommand = new OleDbDataAdapter(sql, strCon);
ds = new DataSet();
myCommand.Fill(ds, \); conn.Close();
datagrid1.DataMember = \; datagrid1.DataSource = ds; datagrid1.DataBind();
//Excel.Application excel = new Excel.Application(); //excel.Application.Workbooks.Add(true); //excel.Visible = true; }
2.一个一个单元格的进行插入
代码
1 string str = @\RESS;Initial Catalog=TestBase;Integrated Security=True\; 2 SqlConnection conn = new SqlConnection(str); 3 conn.Open(); 4 int n = 0;
5 for (int i = 1; i < 20; i++) 6 {
7 if (n > 3) 8 break;
9 else
10 if (msheet.Cells.get_Range(\ + i, Type.Missing).Text.ToString() == \ && n <= 3) 11 { n++; } 12 else 13 {
14 //循环获取excel单元格的值一次一次的插入,excuteSql为执行的存储过程
15 excuteSql(msheet.Cells.get_Range(\ + i, Type.Missing).Text.ToString(),
16 msheet.Cells.get_Range(\ + (i + 1), Type.Missing).Text.ToString(),
17 msheet.Cells.get_Range(\ + (i + 2), Type.Missing).Text.ToString(), 18 conn); 19 i = i + 3; 20
21 } 22 } 23
24 conn.Close();
二快速导入导出
1.我们都知道当向db里批量插入数据的时候我们会选择SqlBulkCopy if (dataTable!=null && dataTable.Rows.Count!=0) {
sqlBulkCopy.WriteToServer(dataTable); }
这个可以看 深山老林新发的一篇SQLServer中批量插入数据方式的性能对比下面是
SqlBulkCopy的方法,这个方法有一个弊端就是当excel某一列即有文字,还有日期的时候,会出现null值,我在网上查了一些资料说连接字串加上;HDR=YES;IMEX=1'的时候会都当做字符处理,但是还是会出现一些bug,所以建议最好先把excel数据分析到datatable里然后再用SqlBulkCopy倒入数据库
代码
2.快速导出db的数据到excel 这种方法就是利用 Excel.QueryTables Excel.QueryTable
Querytable把数据快速导入excel里。我们在做复杂报表的时候,这个用的是比较多了,但是单单会这个没有用,它只是快速的把db里的数据放放到excel里,
在做大量数据而且需要设定excel样式的时候我们会选择先用这种方法把数据导入excel一个临时sheet,再利sheet复制,sheet移动,和一些excel样式设定,以及
excel一个强大的自动填充的功能,那么这些就可以让我们快速的做出花样多试的excel报表,当然这个要求我们比较熟练office的操作,包括宏的操作。
代码
com操作excel的一些特性操作:
range.NumberFormatLocal = \; //设置单元格格式为文本 range = (Range)worksheet.get_Range(\, \); //获取Excel多个单元格区域:本例做为Excel表头 range.Merge(0); //单元格合并动作
worksheet.Cells[1, 1] = \单元格赋值\; //Excel单元格赋值
range.Font.Size = 15; //设置字体大小
range.Font.Underline=true; //设置字体是否有下划线 range.Font.Name=\黑体\; 设置字体的种类
range.HorizontalAlignment=XlHAlign.xlHAlignCenter; //设置字体在单元格内的对其方式
range.ColumnWidth=15; //设置单元格的宽度
range.Cells.Interior.Color=System.Drawing.Color.FromArgb(255,204,153).ToArgb(); //设置单元格的背景色 range.Borders.LineStyle=1; //设置单元格边框的粗细 range.BorderAround(XlLineStyle.xlContinuous,XlBorderWeight.xlThick,XlColorIndex.xlColorIndexAutomatic,System.Drawing.Color.Black.ToArgb()); //给单元格加边框 range.EntireColumn.AutoFit(); //自动调整列宽
Range.HorizontalAlignment= xlCenter; // 文本水平居中方式 Range.VerticalAlignment= xlCenter //文本垂直居中方式