vb.net导出组件的简单介绍
vb.net 2008中怎样将数据导出到excel中
如何从web页面导入excel单元格数据、又如何把查询出来的数据放到web页面上显示成客户需要的图表?并且导出到excel中?
网站建设哪家好,找创新互联建站!专注于网页设计、网站建设、微信开发、小程序开发、集团企业网站建设等服务项目。为回馈新老客户创新互联还提供了营山免费建站欢迎大家使用!
有两种方案:
1.用Excel自动化技术。
引用Excel的类型库生成.Net的包装类。导入时采用页面放上传文件按钮的方法,在服务器端收到文件后,用excel自动化类打开excel文件,再学会VBA语法,书写大量的代码读取单元格,然后连接数据库保存。导出时,查询数据库,启动excel自动化对象,通过VBA语法填写单元格,保存成excel文件,再用Response.OutputStream输出到页面上,触发excel文件的下载保存框。缺点:容易在服务器端产生excel死进程,代码编写复杂、代码量大、还要掌握VBA语法,用户需要上传、下载操作
有人会说,显示数据时可以用网页直接显示,不用导出成excel。其实也很麻烦:用网页显示复杂的报表格式,网页设计工作量大;如果客户要求导出excel,这个工作就省不了;如果客户要求打印、打印预览、页面设置,比起excel浏览器的打印就捉襟见肘了。
2.用微软Office中间件——SOAOffice。(建议使用最新版的)
用SOAOffice输出Excel,就不会再有上述烦恼。通过SOAOffice不仅能够动态填充excel,读取excel单元格,而且还能在浏览器里直接浏览excel、或者下载、另存。SOAOffice提供标准C#.Net组件,组件在服务器端不使用自动化调用,稳定支持大量web并发访问,这是用com调用无法实现的。组件的属性方法都比较简单,易于调用,你完全不用去掌握复杂的VBA调用。
由于是纯.Net组件,所以服务器端不需安装office。 SOAOffice的excel组件SOAExcel含有Sheet、Cell等类似Excel的简化接口,调用简单。SOAExcel不但能能把数据库字段值动态填充到Excel单元格,还能把用户输入的单元格的值提出给开发者保存到数据库。
SOAExcel能够在客户端浏览器的网页里通过SOAOffice直接显示生成的Excel,用户不必先下载再打开观看内容。
举个导出excel的例子:
SOAOfficeX.ExcelResponse SOAExcel = new SOAOfficeX.ExcelResponse();
SOAOfficeX.ExcelResSheet sheet1 = SOAExcel.openSheet("Sheet1"); // 打开一个Sheet
sheet1.openCell("D"+String.valueOf(8+i)).setValue(rs.getString("Count")); //循环填充数据。
SOAOfficeX.SOAOfficeCtrl SOACtrl = new SOAOfficeX.SOAOfficeCtrl(response);
SOACtrl.assign(SOAExcel); // 绑定数据
// 打开模板并生成最终的excel报表
SOACtrl.webOpen("doc/test.xls", 1, UserName, "Excel.Sheet");
上述代码不但动态填充生成excel,而且在网页里直接显示生成的Excel给终端用户,由于使用了1打开模式,Excel是只读显示的。
读取excel单元格的代码也很简单:
SOAOfficeX.ExcelRequest SOAExcel = new SOAOfficeX.ExcelRequest();
SOAOfficeX.IExcelReqSheet sheetOrder = SOAExcel.OpenSheet("销售订单");
SOAOfficeX.IExcelReqCell cell1;
cell1 = sheetOrder.OpenCell("I5");//订单编码
string sOrderNum = cell1.Value;//cell1.Value就是读取的结果
VB.NET 导出生成EXCEL,不调用EXCEL组件,如图错误.
代码
protected void exportToExcelClient(IDictionarystring, string map) { if (map.Count == 0) { MessageBox.Show("请选择要导出的字段!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); return; } pgbClient.Value = 0; _excel = new Excel.Application(); Excel.Workbook wbook = _excel.Workbooks.Add(Missing.Value); Excel.Worksheet wsheet = (Excel.Worksheet)_excel.ActiveSheet; Excel.Range range = (Excel.Range)wsheet.Cells; Excel.Range ran = null; string tofilepath = Application.StartupPath + "\\Excel_save\\"; string tofilename = "customer.xls"; string sql = "SELECT "; ArrayList keyArr = new ArrayList(); foreach(KeyValuePairstring,string entry in map) { sql+=entry.Value+","; keyArr.Add(entry.Key); } sql = sql.Substring(0, sql.Length - 1); sql += " FROM tb_ClientInfo WHERE 1=1"+condition; //MessageBox.Show(sql); DataSet myds = boperate.getds(sql, "tb_Client"); DataTable dt = myds.Tables["tb_Client"]; for (int i = 0; i keyArr.Count; i++) { ran = (Excel.Range)range[1, i + 1]; ran.Font.Bold = true; ran.Font.Size = 10; ran.Value2 = keyArr[i]; //ran.Columns.AutoFit(); NAR(ran); pgbClient.Step = 10/keyArr.Count; pgbClient.Value += 10 / keyArr.Count; } for (int i = 0; i dt.Rows.Count; i++) { for (int j = 0; j dt.Columns.Count; j++) { ran = (Excel.Range)range[i + 2, j + 1]; ran.Value2 = dt.Rows[i][j]; ran.Font.Size = 10; ran.Columns.AutoFit(); NAR(ran); } pgbClient.Step = 90 / dt.Rows.Count; pgbClient.Value += 90 / dt.Rows.Count; } if (!Directory.Exists(tofilepath)) { Directory.CreateDirectory(tofilepath); } if (File.Exists(tofilepath + tofilename)) { File.Delete(tofilepath + tofilename); } wbook.SaveAs(tofilepath + tofilename, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Excel.XlSaveAsAccessMode.xlNoChange, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing); wbook.Close(false, Type.Missing, Type.Missing); NAR(range); NAR(wsheet); _excel.Quit(); NAR(_excel); pgbClient.Value = pgbClient.Maximum; System.Threading.Thread.Sleep(500); System.Diagnostics.Process.Start("EXCEL.EXE",tofilepath+tofilename); //this.Close(); } /// summary /// 释放资源 /// /summary /// param name="o"/param private void NAR(object o) { try { System.Runtime.InteropServices.Marshal.ReleaseComObject(o); } catch { } finally { o = null; } }
VB.NET输出到Excel的问题
一、DCOM修复
1.运行:mmc comexp.msc /32,找到我的电脑 - DCom配置中的Microsoft Excel Application
2.在Microsoft Excel Application上点击右键,选择"属性"
3.点击"标识"标签,选择"交互式用户"
4.点击"安全"标签,在"启动和激活权限"上点击"自定义",然后点击对应的"编辑"按钮,在弹出的"安全性"对话框中填加一个"NETWORK SERVICE"用户(注意要选择本计算机名),并给它赋予"本地启动"和"本地激活"权限.
5.依然是"安全"标签,在"访问权限"上点击"自定义",然后点击"编辑",在弹出的"安全性"对话框中也填加一个"NETWORK SERVICE"用户,然后赋予"本地访问"权限.
二、如果找不到Microsoft Excel 应用程序
1、进行OFFICE菜单中的组件重注册
2、如果仍未解决问题,点 开始--运行--输入EXCEL文件所在的路径 “c:\program files\exel.exe” /regserver 进行修复注册
参考:
本文标题:vb.net导出组件的简单介绍
标题来源:http://azwzsj.com/article/docpcds.html