asp.net 建立execel表格

Asp.net中建立本地的Excel表,并由服务器向外传播是容易实现的,而删除掉嵌入的Excel.exe进程是困难的。所以 你不要打开任务管理器 ,看Excel.exe进程相关的东西是否还在内存里面。我在这里提供一个解决方案 ,里面提供了两个方法 :

"CreateExcelWorkbook"(说明 建立Excel工作簿) 这个方法 运行一个存储过程 ,返回一个DataReader 并根据DataReader 来生成一个Excel工作簿 ,并保存到文件系统中,创建一个“download”连接,这样 用户就可以将Excel表导入到浏览器中也可以直接下载到机器上。

第二个方法:GenerateCSVReport 本质上是做同样的一件事情,仅仅是保存的文件的CSV格式 。仍然 导入到Excel中,CSV代码能解决一个开发中的普片的问题:你有一列 里面倒入了多个零,CSV代码能保证零不变空 。(说明: 就是在Excel表中多个零的值 不能保存的问题)

在可以下载的解决方案中,包含一个有效的类 ” SPGen” 能运行存储过程并返回DataReader ,一个移除文件的方法 能删除早先于一个特定的时间值。下面出现的主要的方法就是CreateExcelWorkbook

注意:你必须知道 在运行这个页面的时候,你可能需要能在WebSever 服务器的文件系统中写 Excel,Csv文件的管理员的权限。处理这个问题的最简单的方法就是运行这个页面在自己的文件夹里面并包括自己的配置文件。并在配置文件中添加下面的元素<identity impersonate ="true" ... 。你仍然需要物理文件夹的访问控制列表(ACL)的写的权限,只有这样运行的页面的身份有写的权限,最后,你需要设置一个Com连接到Excel 9.0 or Excel 10 类型库 ,VS.NET 将为你生成一个装配件。我相信 微软在他们Office网站上有一个连接,可以下载到微软的初始的装配件。(可能不准,我的理解是面向.net的装配件)

<identity impersonate="true" userName="adminuser" password="adminpass" />

特别注意 下面的代码块的作用是清除Excel的对象。

// Need all following code to clean up and extingush all references!!!

oWB.Close(null,null,null);

oXL.Workbooks.Close();

oXL.Quit();

System.Runtime.InteropServices.Marshal.ReleaseComObject (oRng);

System.Runtime.InteropServices.Marshal.ReleaseComObject (oXL);

System.Runtime.InteropServices.Marshal.ReleaseComObject (oSheet);

System.Runtime.InteropServices.Marshal.ReleaseComObject (oWB);

oSheet=null;

oWB=null;

oXL = null;

GC.Collect(); // force final cleanup!

这是必须的 ,因为oSheet", "oWb" , 'oRng", 等等 对象也是COM的实例,我们需要

Marshal类的ReleaseComObject的方法把它们从.NET去掉

private void CreateExcelWorkbook(string spName, SqlParameter[] parms)

{

string strCurrentDir = Server.MapPath(".") + "\";

RemoveFiles(strCurrentDir); // utility method to clean up old files

Excel.Application oXL;

Excel._Workbook oWB;

Excel._Worksheet oSheet;

Excel.Range oRng;

try

{

GC.Collect();// clean up any other excel guys hangin' around...

oXL = new Excel.Application();

oXL.Visible = false;

//Get a new workbook.

oWB = (Excel._Workbook)(oXL.Workbooks.Add( Missing.Value ));

oSheet = (Excel._Worksheet)oWB.ActiveSheet;

//get our Data

string strConnect = System.Configuration.ConfigurationSettings.AppSettings["connectString"];

SPGen sg = new SPGen(strConnect,spName,parms);

SqlDataReader myReader = sg.RunReader();

// Create Header and sheet...

int iRow =2;

for(int j=0;j<myReader.FieldCount;j++)

{

oSheet.Cells[1, j+1] = myReader.GetName(j).ToString();

}

// build the sheet contents

while (myReader.Read())

{

for(int k=0;k < myReader.FieldCount;k++)

{

oSheet.Cells[iRow,k+1]= myReader.GetValue(k).ToString();

}

iRow++;

}// end while

myReader.Close();

myReader=null;

//Format A1:Z1 as bold, vertical alignment = center.

oSheet.get_Range("A1", "Z1").Font.Bold = true;

oSheet.get_Range("A1", "Z1").VerticalAlignment =Excel.XlVAlign.xlVAlignCenter;

//AutoFit columns A:Z.

oRng = oSheet.get_Range("A1", "Z1");

oRng.EntireColumn.AutoFit();

oXL.Visible = false;

oXL.UserControl = false;

string strFile ="report" + System.DateTime.Now.Ticks.ToString() +".xls";

oWB.SaveAs( strCurrentDir + strFile,Excel.XlFileFormat.xlWorkbookNormal,

null,null,false,false,Excel.XlSaveAsAccessMode.xlShared,false,false,null,null,null);

// Need all following code to clean up and extingush all references!!!

oWB.Close(null,null,null);

oXL.Workbooks.Close();

oXL.Quit();

System.Runtime.InteropServices.Marshal.ReleaseComObject (oRng);

System.Runtime.InteropServices.Marshal.ReleaseComObject (oXL);

System.Runtime.InteropServices.Marshal.ReleaseComObject (oSheet);

System.Runtime.InteropServices.Marshal.ReleaseComObject (oWB);

oSheet=null;

oWB=null;

oXL = null;

GC.Collect(); // force final cleanup!

string strMachineName = Request.ServerVariables["SERVER_NAME"];

errLabel.Text="<A href=http://" + strMachineName +"/ExcelGen/" +strFile + ">Download Report</a>";

}

catch( Exception theException )

{

String errorMessage;

errorMessage = "Error: ";

errorMessage = String.Concat( errorMessage, theException.Message );

errorMessage = String.Concat( errorMessage, " Line: " );

errorMessage = String.Concat( errorMessage, theException.Source );

errLabel.Text= errorMessage ;

}

}

时间: 2024-09-20 06:13:16

asp.net 建立execel表格的相关文章

如何在ASP里建立表格?_编程10000问

如何在ASP里建立表格?<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /> <% Dim conn Set conn = Server.CreateObject("ADODB.Connection") conn.Open "DSN=blah" ' 建立连接   Dim strSQL strSQL = "CREATE T

Word中简单一步建立Excel表格

Word中简单一步建立Excel表格 作为Office中最常用的Word,有时需要用到表格的时候很多用户都不大喜欢在Excel从新建立一个表格执行复制操作,然后在粘 贴回Word中.此时最快最有效率的方法就是在Word中插入表格,但是直接按插入表格就会出现输入多少行多少列,往往连作者也不知道实际的行和列数目. 其实可以巧妙地一步实现插入表格,只需改变一下输入的次序: 在普通情况下按插入表格只会出现如图1那样,务必输入表格尺寸等参数,但是往往连作者也不能准确输入实际的行和列数目. 图1 但是现在我

怎么实现在ASP.NET中制作表格,并将数据库中数据定位到特定的单元格中,谢谢了

问题描述 怎么实现在ASP.NET中制作表格,并将数据库中数据定位到特定的单元格中,谢谢了 现须在ASP.NET的网页中显示报表,报表的格式如下(红框里的是固定不变的,绿框的数据从数据库调用).表格要求:表格样式不变,显示数据库里的数据. 之前尝试用repeater.Gridview控件但都不能将数据定位到特定单元格上.问各位大神,怎么实现这个功能.在下感激不尽! 图片说明 解决方案 GridView可以将数据定位到单元格上,只是你不能简单的数据绑定,你需要用循环配合gridview.rows[

asp.net动态删除表格的行

问题描述 asp.net动态删除表格的行 当点击表格的某行时,将该行ID赋值给Text.value._Page_Load里添加代码使得刷新页面时该行被删除大神们帮帮我,是在是找不出错误来了.就是没有办法实现删除行的功能.后天获取Text1.Value是什么都没有,为什么会这样呢_前台代码: <%@ Page Language=""C#"" AutoEventWireup=""true"" CodeFile="&

后台-asp.net动态拼表格并带服务器控件

问题描述 asp.net动态拼表格并带服务器控件 我想从后台拼一个表格,并且表格中带服务器控件button,并添加button点击事件,输出到前台 解决方案 不要这么做,你应该new出你的服务器控件,然后用Controls.Add添加 参考http://www.cnblogs.com/jian1982/archive/2010/08/04/1791861.htmlhttp://old.xiaoyaolife.com/Article/151333.html, 解决方案二: 可以将你的table写成

请教:如何用asp.net动态生成表格

问题描述 asp.net动态生成表格,表格某列有不一样的控件,或Textbox,或Dropdownlist,现在生成后,如何在控件里输入值,然后插入到数据库中,同时因为表格行列不固定,数据库怎么设计 解决方案 解决方案二:行列不固定,可以用稀疏矩阵的方法表示.解决方案三:该回复于2012-03-21 09:02:34被版主删除解决方案四:该回复于2012-03-21 09:02:35被版主删除解决方案五:像LZ这样需要动态生成的效果的话建议还是直接在后台拼接html代码比较方法,如果需要text

ASP.NET中的表格认证之二

asp.net 简介 本文的第二部分主要是介绍如何使用ASP.NET实现我们自己的表格认证的方法.在第一部分中,我们讨论了表格认证的基本概念和原理.在阅读本文的第二部分之前,读者需要了解表格认证的一些基本概念,或者已经阅读过第一部分. 自定义表格认证的建立 使用的页面:Default.aspx.Login.aspx.Web.config.Users.xml.HashPassword.aspx 在这个自定义表格认证的例子中,我们将自始至终地使用一个XML文档存储用户名和口令.建立该自定义表格认证所

用ASP.NET建立简单的Web Form

ASP.NET引入了一种新的Web编程方法.对于使用传统编程语言如Visual Basic或C++的人,这种方法是很熟悉的.如果你是一个Web程序员只接触过脚本语言的话,不必着急,这篇文章将使你快速入门.作为程序员,我们再也不必将HTML和代码混在一起,再也不必从上往下一行一行的写代码了.ASP.NET让代码和表现分开,使用了事件驱动的编程模式.在这里,我们将看到ASP.NET中Web Form的基本结构.ASP.NET的页面是事件驱动和面向对象的.就是说,程序员能为事件提供代码,如按钮的点击,

用ASP.NET建立一个在线RSS新闻聚合器

asp.net|rss|在线 概要 本文讲解了如何使用 XML Web 控件获取远程XML数据并在 ASP.NET 页面显示这些XML数据,以及使用Repeater控件发布数据库中的XML数据.在过去的几年间,随着 异构平台间共享数据的需求不断增长,XML的使用也呈爆炸性增长.意识到这种趋势,微软在整个.NET框架中对 XML 提供了健壮的支持.这意味着,对于 ASP.NET 开发者来说,在Web页面 中显示和处理 XML 数据从来没有这么容易过.本文将通过生成一个 RSS2.0 聚合引擎和在线