将asp图片导出Excel的方法
相关话题
小编在网上找了很多要将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();
}