excel怎么导出数据将DataTable的数据导出到Excel中

西西软件下载最安全的下载网站、值得信赖的软件下载站!
→ C# 中把DataTable中数据导出Excel编程实例
目前有个项目,客户需求是要把数据倒成Excel,找了点资料整理了一番。决定写一片这样的文章,第一给自己也是一种巩固,第二给需要的人也是一种帮助。(1)首先:添加一个为程序添加一个引用(2)在程序中using一下using Excel = Microsoft.Office.Interop.Eusing System.R (3)给你的程序中添加一个模板Excle(一个空的Excle文件就行)这里就起一个名字:temp.xls(4)按照三层架构的思想,以下有2个方法写在中间层。第一个方法SCexcle()有2个参数,①把你需要导入 Excle的数据集 定义到一个DataTable中,②指向你程序里面前面定义的 temp.xls 模板excel的路径1 Excel.A2 Excel._W3 Excel._Worksheet oS4 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();我们来看看他是如何处理数据的,并且使用你自己想要的格式来定义Excel1&&&&&&& private void addExecl(string xlsPath, DataTable dt)2&&&&&&&& {3&&&&&&&&&&&&& 4&&&&&&&&&&& 5&&&&&&&&&&&& Excel.Range oR6&&&&&&&&&&&& Excel.R7 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.C 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.xlVAlignC//纵向居中 50&&&&&&&&&&&& range.HorizontalAlignment = Excel.XlVAlign.xlVAlignC//横向居中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.xlVAlignC//居中58&&&&&&&&&&&& oRng.HorizontalAlignment = Excel.XlVAlign.xlVAlignC59&&&&&&&&&&&& oRng.EntireColumn.AutoFit();//列宽自动& 60 61&&&&&&&&&&&& app.Application.DisplayAlerts =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值:1与7-细实、2-细虚、4-点虚、9-双细实线)设置页眉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 常量之一(某些打印机可能不支持所有的这些纸张大小);常量 数值 意义;xlPaperLetter 1 Letter (8-1/2 in. x 11 in.)&xlPaperA3 8 A3 (297 mm x 420 mm)&xlPaperA4 9 A4 (210 mm x 297 mm)&xlPaperA4Small 10 A4 Small (210 mm x 297 mm)&xlPaperA5 11 A5 (148 mm x 210 mm)&xlPaperB4 12 B4 (250 mm x 354 mm)&xlPaperB5 13 B5 (182 mm x 257 mm)&xlPaperFanfoldUS 39 U.S. Standard Fanfold (14-7/8 in. x 11 in.)&xlPaperUser 用户自定义打印单元格网线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&退出Exceleole.quit&以上就是本人对Excel一些微不足道的见解。写的不周到的地方 也请给位多多担待。
12-2312-1711-1711-1509-3009-3008-3107-2106-0103-10
阅读本文后您有什么感想? 已有23人给出评价!
名称大小下载西西游戏网是玩家首选的游戏下载网站!
您的位置: &>&&>&&>&
C# 中把DataTable中数据导出Excel编程实例
目前有个项目,客户需求是要把数据倒成Excel,找了点资料整理了一番。决定写一片这样的文章,第一给自己也是一种巩固,第二给需要的人也是一种帮助。(1)首先:添加一个为程序添加一个引用(2)在程序中using一下using Excel = Microsoft.Office.Interop.Eusing System.R (3)给你的程序中添加一个模板Excle(一个空的Excle文件就行)这里就起一个名字:temp.xls(4)按照三层架构的思想,以下有2个方法写在中间层。第一个方法SCexcle()有2个参数,①把你需要导入 Excle的数据集 定义到一个DataTable中,②指向你程序里面前面定义的 temp.xls 模板excel的路径1 Excel.A2 Excel._W3 Excel._Worksheet oS4 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();我们来看看他是如何处理数据的,并且使用你自己想要的格式来定义Excel1&&&&&&& private void addExecl(string xlsPath, DataTable dt)2&&&&&&&& {3&&&&&&&&&&&&& 4&&&&&&&&&&& 5&&&&&&&&&&&& Excel.Range oR6&&&&&&&&&&&& Excel.R7 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.C 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.xlVAlignC//纵向居中 50&&&&&&&&&&&& range.HorizontalAlignment = Excel.XlVAlign.xlVAlignC//横向居中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.xlVAlignC//居中58&&&&&&&&&&&& oRng.HorizontalAlignment = Excel.XlVAlign.xlVAlignC59&&&&&&&&&&&& oRng.EntireColumn.AutoFit();//列宽自动& 60 61&&&&&&&&&&&& app.Application.DisplayAlerts =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值:1与7-细实、2-细虚、4-点虚、9-双细实线)设置页眉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 常量之一(某些打印机可能不支持所有的这些纸张大小);常量 数值 意义;xlPaperLetter 1 Letter (8-1/2 in. x 11 in.)&xlPaperA3 8 A3 (297 mm x 420 mm)&xlPaperA4 9 A4 (210 mm x 297 mm)&xlPaperA4Small 10 A4 Small (210 mm x 297 mm)&xlPaperA5 11 A5 (148 mm x 210 mm)&xlPaperB4 12 B4 (250 mm x 354 mm)&xlPaperB5 13 B5 (182 mm x 257 mm)&xlPaperFanfoldUS 39 U.S. Standard Fanfold (14-7/8 in. x 11 in.)&xlPaperUser 用户自定义打印单元格网线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&退出Exceleole.quit&以上就是本人对Excel一些微不足道的见解。写的不周到的地方 也请给位多多担待。
本次是用WPF实现的是一款基于BT协议的P2P 播放器。内核是用vlc来实现。结果辛辛苦苦做了半天结果发现用wpf不能满足公司一些需求。所以搁浅,专用winform去开发,主要2个原因:1、界面美观时发现渲染视频的时候会有问题,这个问题等会会讲。2、主要原因,西西软件园-最安全的下载资讯站。
从正式工作以来一直做的都是基于B/S的Web开发,已经很长时间不研究C/S的东西了,但是受朋友的委托,帮他做一下拍照的这么个小功能。其实类似的代码网上有很多,但是真的能够拿来运行的估计也没几个。本来是说周末给做的,但是这两天脑子一直很乱,也没静下来,西西软件园-最安全的下载资讯站。
本文主要通过彩色图象灰度化来介绍C#处理数字图像的3种方法,Bitmap类、BitmapData类和Graphics类是C#处理图像的的3个重要的类。Bitmap只要用于处理由像素数据定义的图像的对象,主要方法和属性如下: Ge,西西软件园-最安全的下载资讯站。
说起.NET反编译,这里提起一下Visual Studio的垄断。Visual Studio占据了.NET开发工具系列的绝对垄断地位。在.NET 1.x时代,还有C# Builder,Delphi.NET来使用和体验,一争高低。可是到后来,.NET Framwork更新频繁,动辙在编译器级别,和语言层面做更新,这令第三方,西西软件园-最安全的下载资讯站。
Reflexil 它是Reflector的一个插件,结合Reflector,可以进行DLL代码注入等工作,实践证明完全可用,方便开发人员对.NET程序进行修改;可以作为一个Reflector插件修改程序集的IL并保存到磁盘文件,也可以在自己的.NET程序中调用进行更为灵活的.NET程序集修改。,西西软件园-最安全的下载资讯站。
Copyright (C)
.All rights reserved.
蜀ICP备号-3在平时的项目中,将数据导出到Excel的需求是很常见的,在此对一些常见的方法做以总结,并提供一种大数据量导出的实现。
使用OLEDB导出Excel
public&static&void&Export(DataTable&dt,&string&filepath,&string&tablename)
&&&&//excel&2003格式
&&&&string&connString&=&"Provider=Microsoft.Jet.OLEDB.4.0;Data&Source="&+&filepath&+&";Extended&Properties=Excel&8.0;";
&&&&//Excel&2007格式
&&&&//string&connString&=&"Provider=Microsoft.ACE.OLEDB.12.0;Data&Source="&+&filepath&+&";Extended&Properties=Excel&12.0&X";
&&&&&&&&using&(OleDbConnection&con&=&new&OleDbConnection(connString))
&&&&&&&&&&&&con.Open();
&&&&&&&&&&&&StringBuilder&strSQL&=&new&StringBuilder();
&&&&&&&&&&&&strSQL.Append("CREATE&TABLE&").Append("["&+&tablename&+&"]");
&&&&&&&&&&&&strSQL.Append("(");
&&&&&&&&&&&&for&(int&i&=&0;&i&&&dt.Columns.C&i++)
&&&&&&&&&&&&{
&&&&&&&&&&&&&&&&strSQL.Append("["&+&dt.Columns[i].ColumnName&+&"]&text,");
&&&&&&&&&&&&}
&&&&&&&&&&&&strSQL&=&strSQL.Remove(strSQL.Length&-&1,&1);
&&&&&&&&&&&&strSQL.Append(")");
&&&&&&&&&&&&OleDbCommand&cmd&=&new&OleDbCommand(strSQL.ToString(),&con);
&&&&&&&&&&&&cmd.ExecuteNonQuery();
&&&&&&&&&&&&for&(int&i&=&0;&i&&&dt.Rows.C&i++)
&&&&&&&&&&&&{
&&&&&&&&&&&&&&&&strSQL.Clear();
&&&&&&&&&&&&&&&&StringBuilder&strfield&=&new&StringBuilder();
&&&&&&&&&&&&&&&&StringBuilder&strvalue&=&new&StringBuilder();
&&&&&&&&&&&&&&&&for&(int&j&=&0;&j&&&dt.Columns.C&j++)
&&&&&&&&&&&&&&&&{
&&&&&&&&&&&&&&&&&&&&strfield.Append("["&+&dt.Columns[j].ColumnName&+&"]");
&&&&&&&&&&&&&&&&&&&&strvalue.Append("'"&+&dt.Rows[i][j].ToString()&+&"'");
&&&&&&&&&&&&&&&&&&&&if&(j&!=&dt.Columns.Count&-&1)
&&&&&&&&&&&&&&&&&&&&{
&&&&&&&&&&&&&&&&&&&&&&&&strfield.Append(",");
&&&&&&&&&&&&&&&&&&&&&&&&strvalue.Append(",");
&&&&&&&&&&&&&&&&&&&&}
&&&&&&&&&&&&&&&&&&&&else
&&&&&&&&&&&&&&&&&&&&{
&&&&&&&&&&&&&&&&&&&&}
&&&&&&&&&&&&&&&&}
&&&&&&&&&&&&&&&&mandText&=&strSQL.Append("&insert&into&["&+&tablename&+&"](&")
&&&&&&&&&&&&&&&&&&&&.Append(strfield.ToString())
&&&&&&&&&&&&&&&&&&&&.Append(")&values&(").Append(strvalue).Append(")").ToString();
&&&&&&&&&&&&&&&&cmd.ExecuteNonQuery();
&&&&&&&&&&&&}
&&&&&&&&&&&&con.Close();
&&&&&&&&Console.WriteLine("OK");
&&&&catch&(Exception&ex)
&&&&&&&&Console.WriteLine(ex.Message);
&  生成的Excel是2003还是2007,就是通过连接字符串来控制的(代码中的connString ),同时传递的文件名也要一致(xls or xlsx),不然会出现运行不成功或者生成的文件打不开的情况。
  Excel本身提供com组件来实现对Excel的操作,它的优点是显而易见的,可以具体控制到操作excel中的任意一个单元格(内容+格式),利用oledb是做不到这一点的。当项目中需要使用现有模板生成Excel的时候使用该方法是很方便的。但该方法性能上慢,而且需要安装Excel相关组件,生成文件后内存中有时仍旧有Excel进程。如果是web的话不建议使用该方法,否则管理员和服务器都会疯掉的。&
com生成Excel
public&static&void&Export(DataTable&dt,&string&filepath)
&&&&ExcelApp.Application&myExcel&=&new&ExcelApp.Application();
&&&&//新建文件
&&&&ExcelApp._Workbook&mybook&=&myExcel.Workbooks.Add();
&&&&//打开现有文件
&&&&//ExcelApp._Workbook&mybook&=&myExcel.Workbooks.Open(filepath,&Type.Missing,&Type.Missing,&Type.Missing,
&&&&//&&&&Type.Missing,Type.Missing,&Type.Missing,&Type.Missing,&Type.Missing,&Type.Missing,&Type.Missing,
&&&&//&&&&Type.Missing,&Type.Missing,Type.Missing,&Type.Missing);
&&&&//打开文件在.net4.0中的写法,使用“命名参数”和“可选参数”
&&&&//ExcelApp._Workbook&mybook&=&myExcel.Workbooks.Open(Filename:&filepath);
&&&&myExcel.Visible&=&true;
&&&&&&&&mybook.Activate();
&&&&&&&&ExcelApp._Worksheet&mysheet&=&mybook.Worksheets.Add();&&&&&&
&&&&&&&&for&(int&i&=&0;&i&&&dt.Rows.C&i++)
&&&&&&&&&&&&for&(int&j&=&0;&j&&&dt.Columns.C&j++)
&&&&&&&&&&&&{
&&&&&&&&&&&&&&&&ExcelApp.Range&cell&=&mysheet.get_Range(((char)(65&+&j)).ToString()&+&(i&+&1).ToString());
&&&&&&&&&&&&&&&&cell.Select();
&&&&&&&&&&&&&&&&cell.Cells.FormulaR1C1&=&dt.Rows[i][j]&??&"";
&&&&&&&&&&&&}
&&&&&&&&//mybook.SaveAs(Filename:&filepath);
&&&&&&&&mybook.Save();
&&&&catch&(Exception&ex)
&&&&finally
&&&&&&&&mybook.Close();
&&&&&&&&myExcel.Quit();
&&&&&&&&GC.Collect();
  在使用com组件时,需要先在项目中添加“Microsoft.Office.Interop.Excel”引用。(代码中的ExcelApp是我给相关命名空间提供的别名,using ExcelApp = Microsoft.Office.Interop.E)
  使用微软提供的也可以很方便的生成excel。(将office2007(Word、Excel、PPT) 的文件后缀名修改为”.zip”,将得到的压缩包解压,发现里面就是xml文件。),具体代码我就不贴了,在使用中发现初始加载的时候也是比较慢的。
  需要注意的是,该方法只能操作office 2007以上的版本,不支持0ffice 2003.
  这个是朋友介绍的,一个开源的组件,使用时不需要安装office(极大的优势),也能具体到对一个单元格的控制。NPOI是POI的.NET版本,POI是一套用Java写成的库,能够帮助开发者在没有安装微软Office的情况下读写Office 97-2003的文件,支持的文件格式包括xls, doc, ppt等。(已迁移到)上提供了许多实际例子,而且也给了介绍和入门教程,代码我就不复制了。
  需要注意的是,目前该方法只能操作office2003。
大批量数据
  上面几种方法是比较常见的,但是当遇到大批量数据时,前两种就太不给力了,特别是使用com组件那种,它们都是一条一条的生成。不过,com中可以使用QueryTable来提高效率。
QueryTable批量导出数据
public&static&void&Export(&string&filepath,string&strSQL)
&&&&ExcelApp.Application&myExcel&=&new&ExcelApp.Application();
&&&&ExcelApp._Workbook&mybook&=&myExcel.Workbooks.Add();&&&&&&&&&&&&
&&&&&&&&mybook.Activate();
&&&&&&&&ExcelApp._Worksheet&mysheet&=&mybook.Worksheets.Add();
&&&&&&&&string&conn&=&"ODBC;Driver=SQL&SServer=.;uid=pwd=database=";
&&&&&&&&ExcelApp.QueryTable&querytable&=&mysheet.QueryTables.Add(conn,&mysheet.get_Range("A1"),&strSQL);
&&&&&&&&querytable.Refresh(false);
&&&&&&&&mybook.SaveAs(Filename&:&filepath,AccessMode:ExcelApp.XlSaveAsAccessMode.xlNoChange);
&&&&catch&(Exception&ex)
&&&&&&&&Console.WriteLine(ex.Message);
&&&&finally
&&&&&&&&mybook.Close();
&&&&&&&&myExcel.Quit();
  该方法比一条一条的插入不知道要快上多少倍,但是在我这测试时发现不稳定,同样的代码第一天还很快,到第二天就很慢了(相差特别大),同时,也存在excel进程关不掉的问题。
既然这样,换个思路换个法子,既然一条一条的插入比较慢,那么批量插入呢,SQL语句中就有“select into”,能不能利用这个实现呢?查找资料后得知是可以的,在SQL Server中有OPENDATASOURCE(还有OPENROWSET)的
,可以直接读取excel中 的数据。
FROM&OPENDATASOURCE('Microsoft.Jet.OLEDB.4.0',
'Data&Source=D:\book.Extended&Properties=EXCEL&5.0')...[sheet1$]&;
  也可以写入,
insert&into&OPENDATASOURCE('Microsoft.Jet.OLEDB.4.0',
'Data&Source=D:\book.Extended&Properties=EXCEL&5.0')...[sheet1$]
select&Customer&.name&,Product&.fullname
from&[v_Order]
写入的话得要求该文件存在,并且第一行有数据(表头行)。
  在使用OPENDATASOURCE前,需要先执行
exec&sp_configure&'Ad&Hoc&Distributed&Queries','1'
RECONFIGURE
  不然的话会报错:“SQL Server 阻止了对组件 'Ad Hoc Distributed Queries' 的 STATEMENT 'OpenRowset/OpenDatasource' 的访问”
  但是,使用OPENDATASOURCE是在SQL Server进程中执行的,这也就导致生成的文件时在SQL Server服务器端的,无法在客户端直接生成。
  也可以利用 BCP 来导出,速度上非常快,但是导出的Excel并不是标准格式的,如果客户不需要标准的格式,可以用这个来实现。
  既然SQL Server中可以这样做,在Access中是不是也可以呢?按照这个思路查找帮助,发现也是可以的,就是用in
select&&*&from&product
in&""&[ODBC;Driver=SQL&SServer=.;uid=pwd=database=]
  在Access中运行上面的代码后,就可以查询中SQL Server数据库中的数据,不过不支持连接查询(用视图呗),而且要注意保留字的处理(字段添加“[]”)。 当然,使用in不仅仅支持SQL Server,对其他数据库也是支持的,可以看&,或者的这篇文章。
  刚开始的时候已经说过,在用Oledb处理Excel时可以把excel当做access,那么只需要将OLEDB导出Excel中的创建表、插入记录的SQL语句替换上面的查询语句就可以了(得将代码改为select into 才行,不然是生不成excel文件的),看看代码
oledb执行SQL
public&static&void&Export(string&strSQL,&string&filepath)
&&&&//string&connString&=&"Provider=Microsoft.Jet.OLEDB.4.0;Data&Source="&+&filepath&+&";Extended&Properties=Excel&8.0;";
&&&&string&connString&=&"Provider=Microsoft.ACE.OLEDB.12.0;Data&Source="&+&filepath&+&";Extended&Properties=Excel&12.0&X";
&&&&&&&&using&(OleDbConnection&conn&=&new&OleDbConnection(connString))
&&&&&&&&&&&&conn.Open();
&&&&&&&&&&&&OleDbCommand&cmd&=&new&OleDbCommand(strSQL,&conn);
&&&&&&&&&&&&cmd.ExecuteNonQuery();
&&&&&&&&&&&&conn.Close();
&&&&&&&&Console.WriteLine("OK");
&&&&catch&(Exception&ex)
&&&&&&&&Console.WriteLine(ex.Message);
使用上面的方法时,传递的SQL
select&&*&into&商品
from&product
in&""&[ODBC;Driver=SQL&SServer=.;uid=pwd=database=]
如果需要添加where、orderby的话就放在上面SQL的后面(into后的表名在Excel中就是sheet的名称)
select&&[fullname]&as&名称,[alias]&as&简称,[price]&as&单价
from&product
in&""&[ODBC;Driver=SQL&SServer=.;uid=pwd=database=]
where&id_product&&&1
order&by&fullname
&&& 大批量数据导出的时候,需要注意这样的一个问题,Excel2003格式一个sheet只支持65536行,excel 2007 就比较多,是1048576。 &
阅读(...) 评论()

我要回帖

更多关于 数据库怎么导出excel 的文章

 

随机推荐