将asp图片导出Excel的方法

发布时间:2016-12-01 22:07

小编在网上找了很多要将asp图片导出Excel的方法,当时网上很多都是着实虚无,目前所知的方法有4种。

1.网上包括csdn大部分流行的方法,强制输出html格式为xls格式。优点效率高,速度快。缺点也很明显,毕竟不是真正的Excel格式,只是利用了office2000以后的版本可以直接打开html文件的特性强制生成的。无法改变单元格格式等。尤其是office2007,打开会提示 您尝试打开的*xls"的格式与文件扩展名指定的格式不一致。并且按保存时,会发现默认格式是txt。这种方法不建议使用。

2.JavaScript格式,粗略的看了下。有个致命的问题,要设置ie安全属性。一般用户会为了一个功能去繁琐的更高ie设置?而且也不是真正的csv格式,xls格式而已。不考虑。

3.第三方控件,使用过MyXls这个控件,生成的真正的xls文件。效率高,使用简单,不用考虑资源释放的问题。可惜未发现导出图片的方法。不过一般导出Excel的话,强烈推荐!

4.使用微软的官方COM组件。优点:功能强大。缺点:效率低,需要手动关闭进程,释放资源,而且服务器端还需安装office。暂时只发现这个可以导出图象到Excel。

方法如下:

虽然服务器必须安装office,但并不需要安装完整版本的office,本人发现精简版也可以。只不过设置麻烦一些而已。

先安装O2003PIA补丁。下载地址百度。网上一堆。如果你安装完整版的office,可以跳过这部。

然后导入COM组件

确定即可。

然后添加引用,如果安装的是完整版的,直接在引用的tab框中添加即可。

如果您是精简版的,下载个Microsoft.Office.Interop.Excel.dll。然后放到网站根目录

代码如下

using System;

using System.Data;

using System.Configuration;

using System.Web;

using System.Web.Security;

using System.Web.UI;

using System.Web.UI.WebControls;

using System.Web.UI.WebControls.WebParts;

using System.Web.UI.HtmlControls;

//导入Com组件

using Microsoft.Office.Core;

//添加引用

using ex=Microsoft.Office.Interop.Excel;

using System.Reflection;

public partial class _Default : System.Web.UI.Page

{

///

/// ASP.NET导出图象到Excel

/// 创建人:吴凯平

/// 创建时间:2010年1月3日 12:46:38

///

///

///

protected void Page_Load(object sender, EventArgs e)

{

}

///

/// 导出到Excel

///

///

///

protected void btnExcel_Click(object sender, EventArgs e)

{

//声明一个默认值

object missing = Missing.Value;

//声明一个Excel应用程序对象

ex.Application excelObj = new ex.ApplicationClass();

//禁用Excel提示(否则第二次生成会提示是否覆盖等..)

excelObj.DisplayAlerts = false;

//不显示excel??

excelObj.Visible = false;

//创建workbooks

ex.Workbooks wbooks = excelObj.Workbooks;

//使用Excel模板创建一个工作簿(模板必须先创建好放在网站可访问目录下)

ex.Workbook wbook = wbooks.Open(Server.MapPath("模板路径"), missing, missing,

missing, missing, missing, missing, missing, missing, missing, missing, missing, missing,

missing, missing);

//新建一个excel工作表集合

ex.Worksheets sheets = (ex.Worksheets)wbook.Worksheets;

//新建一个工作表

ex._Worksheet sheet = (ex._Worksheet)sheets.get_Item(1);

//声明一个pictures对象,用来存放sheet的图片

ex.Pictures pics = (ex.Pictures)sheet.Pictures(missing);

//设置要插入的图片路径

pics.Insert(Server.MapPath("图片路径"),

MsoTriState.msoFalse, MsoTriState.msoCTrue);

//插入图片

}

}

///

/// 输出Excel

///

///

///

protected void ImageButton1_Click(object sender, ImageClickEventArgs e)

{

if (chltStat.Visible == false)

{

ClientScript.RegisterStartupScript(GetType(), "", "alert('没有数据请生成数据再导入!');", true);

return;

}

object missing = Missing.Value;

//定义一个Excel应用程序

ex.ApplicationClass excelObj = new ex.ApplicationClass();

excelObj.DisplayAlerts = false;

excelObj.Visible = false;

ex.Workbooks wbooks = excelObj.Workbooks;

ex.Workbook wbook = wbooks.Open(Server.MapPath("../动态经营统计数据.xls"), missing, missing, missing, missing, missing, missing,

missing, missing, missing, missing, missing, missing, missing, missing);

ex.Sheets sheets = (ex.Sheets)wbook.Worksheets;

ex._Worksheet sheet = (ex._Worksheet)sheets.get_Item(1);

ex.Range exRange = (ex.Range)sheet.get_Range("B2", missing);

exRange.Select();

//声明一个pictures对象,用来存放柱状图

ex.Pictures pics = (ex.Pictures)sheet.Pictures(missing);

//插入图片

pics.Insert(Server.MapPath("Chartlet_chltStat_区企业年度信息统计表_Bar.Jpg"), missing);

sheet.Shapes.AddPicture(Server.MapPath("Chartlet_chltStat2_区企业年度信息统计表_Line.Jpg"),

Microsoft.Office.Core.MsoTriState.msoFalse,

Microsoft.Office.Core.MsoTriState.msoCTrue,

50, 400, 570, 368);//504 326

wbook.SaveAs(Server.MapPath("../xls/动态经营统计数据.xls"), missing, missing, missing, missing, missing,

Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlNoChange, missing, missing, missing, missing,

missing);

wbook.Close(false, missing, missing);

excelObj.Quit();

ClientScript.RegisterStartupScript(GetType(), "", "window.location.href='../xls/动态经营统计数据.xls';", true);

//必须关闭释放所引用的COM对象,关闭Excel进程,否则会占用服务器资源

ReleaseObj(sheets);

ReleaseObj(wbook);

ReleaseObj(wbooks);

ReleaseObj(excelObj);

System.GC.Collect();

System.GC.WaitForPendingFinalizers();

//BindGv();

string filePath = Server.MapPath("../xls/动态经营统计数据.xls");

Response.ContentEncoding = System.Text.Encoding.GetEncoding("GB2312");

Response.AppendHeader("content-disposition", "attachment;filename=" + System.Web.HttpUtility.UrlEncode("动态经营统计数据", System.Text.Encoding.UTF8) + ".xls");

Response.ContentType = "Application/excel";

Response.WriteFile(filePath);

Response.End();

}

将asp图片导出Excel的方法的评论条评论