学习啦>学习电脑>工具软件>办公软件学习>Excel教程>Excel基础>

将asp图片导出Excel的方法

时间: 张伟670 分享

  小编在网上找了很多要将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();

  }

353987