目前有个项目,客户需求是要把数据倒成Excel,找了点资料整理了一番。决定写一片这样的文章,第一给自己也是一种巩固,第二给需要的人也是一种帮助。
(1)首先:添加一个为程序添加一个引用
(2)在程序中using一下
using Excel = Microsoft.Office.Interop.Excel;
using System.Reflection;
(3)给你的程序中添加一个模板Excle(一个空的Excle文件就行)
这里就起一个名字:temp.xls
(4)按照三层架构的思想,以下有2个方法写在中间层。
第一个方法SCexcle()有2个参数,①把你需要导入 Excle的数据集 定义到一个DataTable中,②指向你程序里面前面定义的 temp.xls 模板excel的路径
1 Excel.Application app; 2 Excel._Workbook wbook; 3 Excel._Worksheet oSheet; 4 5 public string SCexcel(DataTable dt, string pathLong) 6 { 7 string wordPath = pathDownLoad + “temp.xls”; //定义模板的路径 8 //打开excel文档 9 app = new Excel.Application();//添加一个 Excle应用对象 10 11 //打开工作簿,可见很多参数,第一个就是我们模板的路径。 12 wbook = app.Workbooks.Open(wordPath, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value); 13 14 15 oSheet = (Excel._Worksheet)wbook.Worksheets[1];//创建一张sheet表 16 17 //定义文件保存路径 18 string filename1 = "report" + System.DateTime.Now.Year + System.DateTime.Now.Month + savechinese + ".xls";//因为保存的不平凡,所以之精确到年和月 。否则就保存到毫秒 19 string filename2 = pathLong + "UpLoadFiles\\" + filename1;//保存在服务器的路径 20 21 addExecl(filename2.ToString(), dt);//内部的一个方法,把服务器路径与之前的数据放入addExcle()中,目的是在把数据放入Excel中 22 23 //打开后就要关闭。O(∩_∩)O~ 24 25 app.Workbooks.Close(); 26 //同样不要忘记结束进程 27 System.Runtime.InteropServices.Marshal.ReleaseComObject(oSheet); 28 System.Runtime.InteropServices.Marshal.ReleaseComObject(app); 29 30 GC.Collect();//强制对所有代进行即时垃圾回收 31 32 }
第二个方法addExecl();我们来看看他是如何处理数据的,并且使用你自己想要的格式来定义Excel
1 private void addExecl(string xlsPath, DataTable dt) 2 { 3 4 5 Excel.Range oRng; 6 Excel.Range range; 7 8 9 //标题 10 int excel_cur = 1; 11 oSheet.Cells[excel_cur, 1] = "大标题"; 12 excel_cur++; 13 14 //字段名 15 oSheet.Cells[excel_cur, 1] = "序号"; 16 oSheet.Cells[excel_cur, 2] = "字段1"; 17 oSheet.Cells[excel_cur, 3] = "字段2"; 18 oSheet.Cells[excel_cur, 4] = "字段3"; 19 oSheet.Cells[excel_cur, 5] = "字段4"; 20 oSheet.Cells[excel_cur, 6] = "字段5"; 21 oSheet.Cells[excel_cur, 7] = "字段6"; 22 oSheet.Cells[excel_cur, 8] = "字段7"; 23 oSheet.Cells[excel_cur, 9] = "字段8"; 24 oSheet.Cells[excel_cur, 10] = "字段9"; 25 excel_cur++; 26 27 //行数据绑定 28 if (dt.Rows.Count > 0) 29 { 30 for (int i = 0; i < dt.Rows.Count; i++) 31 { 32 oSheet.Cells[excel_cur, 1] = dt.Rows[i][0].ToString(); 33 oSheet.Cells[excel_cur, 2] = dt.Rows[i][1].ToString(); 34 oSheet.Cells[excel_cur, 3] = dt.Rows[i][2].ToString(); 35 oSheet.Cells[excel_cur, 4] = dt.Rows[i][3].ToString(); 36 oSheet.Cells[excel_cur, 5] = dt.Rows[i][4].ToString(); 37 oSheet.Cells[excel_cur, 6] = dt.Rows[i][5].ToString(); 38 oSheet.Cells[excel_cur, 7] = dt.Rows[i][6].ToString(); 39 oSheet.Cells[excel_cur, 8] = dt.Rows[i][7].ToString(); 40 oSheet.Cells[excel_cur, 9] = dt.Rows[i][8].ToString(); 41 oSheet.Cells[excel_cur, 10] = dt.Rows[i][9].ToString(); 42 excel_cur++; 43 44 } 45 } 46 //格式定义 47 range = (Excel.Range)oSheet.get_Range("A1", "J1");//选中 A1:J1 单元格 48 range.Merge(0);//合并单元格 49 range.VerticalAlignment = Excel.XlVAlign.xlVAlignCenter;//纵向居中 50 range.HorizontalAlignment = Excel.XlVAlign.xlVAlignCenter;//横向居中 51 range.Font.Size = 18; 52 range.Font.Name = "黑体"; 53 range.RowHeight = 24; 54 55 oRng = oSheet.get_Range("A2", "J" + Convert.ToString(dt.Rows.Count + 2)); 56 oRng.Borders.LineStyle = 1; 57 oRng.VerticalAlignment = Excel.XlVAlign.xlVAlignCenter;//居中 58 oRng.HorizontalAlignment = Excel.XlVAlign.xlVAlignCenter; 59 oRng.EntireColumn.AutoFit();//列宽自动 60 61 app.Application.DisplayAlerts = false; 62 oSheet.SaveAs(xlsPath, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value);//文件保存 63 }
其实还有很多对Excel进行的样式设置,见下面这个表:
Excel.Application eole = new Excel.Application();
效果 | 具体代码 |
添加新工作簿 |
eole.Workbooks.add |
激活指定的工作簿 |
eole.WorkSheets("工作簿名").Activate |
设置第3个工作表为激活工作表 |
eole.Worksheets("sheet1").Activate |
打开指定工作簿 |
eole.Workbooks.add("E:/E_temp/ABC.xls") |
更改Excel标题栏 |
eole.Caption="Microsoft Excel" |
给单元格赋值 |
eole.cells(行,列).value=XM(XM为数据库字段名) eole.cells(1,4).value='ASDFASDFASDFASDFADSF' |
设置指定列的宽度(单位:字符个数) |
eole.ActiveSheet.Columns(1).ColumnWidth=5 |
设置指定行的高度(单位:磅) |
eole.ActiveSheet.Rows(1).RowHeight=1/0.035 //设定行高为1厘米,1磅=0.035厘米 |
在第7行之前插入分页符 |
eole.Worksheets("Sheet1").Rows(7).PageBreak=1 |
在第7列之前删除分页符 |
eole.ActiveSheet.Columns(7).PageBreak=0 |
指定边框线宽度(Borders参数如下) |
eole.ActiveSheet.Range("b3:d3").Borders(2).Weight=3 |
设置四个边框线条的类型 |
eole.ActiveSheet.Range("b3:d3").Borders(1).LineStyle=1 (其中Borders参数:1-左、2-右、3-顶、4-底、5-斜、6-斜/;LineStyle |
设置页眉 |
eole.ActiveSheet.PageSetup.CenterHeader="报表1" |
设置页脚 |
eole.ActiveSheet.PageSetup.CenterFooter="第&P页" |
设置页眉到顶端边距为2厘米 |
eole.ActiveSheet.PageSetup.HeaderMargin=2/0.035 |
设置页脚到底边距为3厘米 |
eole.ActiveSheet.PageSetup.FooterMargin=3/0.035 |
设置顶边距为2厘米 |
eole.ActiveSheet.PageSetup.TopMargin=2/0.035 |
设置底边距为4厘米 |
eole.ActiveSheet.PageSetup.BottomMargin=4/0.035 |
设置左边距为2厘米 |
eole.ActiveSheet.PageSetup.LeftMargin=2/0.035 |
设置右边距为2厘米 |
eole.ActiveSheet.PageSetup.RightMargin=2/0.035 |
设置页面水平居中 |
eole.ActiveSheet.PageSetup.CenterHorizontally=.t. |
设置页面垂直居中 |
eole.ActiveSheet.PageSetup.CenterVertically=.t. |
设置页面纸张大小(1-窄行8?5?11 39-宽行14?11) |
eole.ActiveSheet.PageSetup.PaperSize=1 可为下列 XlPaperSize 常量之一(某些打印机可能不支持所有的这些纸张大小); |
打印单元格网线 |
eole.ActiveSheet.PageSetup.PrintGridlines=.t. |
拷贝整个工作簿 |
eole.ActiveSheet.UsedRange.Copy |
拷贝指定区域 |
eole.ActiveSheet.Range("A1:E2").Copy |
粘贴 |
eole.Worksheets("sheet2").Activate eole.ActiveSheet.Range("F1").PasteSpecial |
在第2行之前插入一行 |
eole.ActiveSheet.Rows(2).Insert |
在第2列之前插入一列 |
eole.ActiveSheet.Columns(2).Insert |
设置字体 |
eole.ActiveSheet.Cells(2,1).Font.Name="黑体" |
设置字体大小 |
eole.ActiveSheet.Cells(1,1).Font.Size=25 |
设置字体为斜体 |
eole.ActiveSheet.Cells(1,1).Font.Italic=.t. |
设置整列字体为粗体 |
eole.ActiveSheet.Columns(1).Font.Bold=.t. |
合并单元格 |
eole.ActiveSheet.Range("A1:B4").merge |
撤销合并单元格,上述操作的逆操作 |
eole.ActiveSheet.Range("A1:B4").unmerge |
在单元格中设置公式(一般可以用来实现计算汇总、求平均等很多功能)
|
eole.cells(1,4).value = "=公式" ** 可以使用所有VBA内部函数,如sum()等。注意:不能使用VFP的函数啊! |
清除单元格公式 |
eole.ActiveSheet.Cells(1,4).ClearContents |
打印预览工作表 |
eole.ActiveSheet.PrintPreview |
打印输出工作表 |
eole.ActiveSheet.PrintOut |
工作表另为 |
eole.ActiveWorkbook.SaveAs("c:/temp/22.xls") |
放弃存盘 |
eole.ActiveWorkbook.saved=.t. |
关闭工作簿 |
eole.Workbooks.close |
退出Excel |
eole.quit |
以上就是本人对Excel一些微不足道的见解。写的不周到的地方 也请给位多多担待。