將asp圖片導(dǎo)出Excel的方法
小編在網(wǎng)上找了很多要將asp圖片導(dǎo)出Excel的方法,當(dāng)時(shí)網(wǎng)上很多都是著實(shí)虛無,目前所知的方法有4種。
1.網(wǎng)上包括csdn大部分流行的方法,強(qiáng)制輸出html格式為xls格式。優(yōu)點(diǎn)效率高,速度快。缺點(diǎn)也很明顯,畢竟不是真正的Excel格式,只是利用了office2000以后的版本可以直接打開html文件的特性強(qiáng)制生成的。無法改變單元格格式等。尤其是office2007,打開會(huì)提示 您嘗試打開的*xls"的格式與文件擴(kuò)展名指定的格式不一致。并且按保存時(shí),會(huì)發(fā)現(xiàn)默認(rèn)格式是txt。這種方法不建議使用。
2.JavaScript格式,粗略的看了下。有個(gè)致命的問題,要設(shè)置ie安全屬性。一般用戶會(huì)為了一個(gè)功能去繁瑣的更高ie設(shè)置?而且也不是真正的csv格式,xls格式而已。不考慮。
3.第三方控件,使用過MyXls這個(gè)控件,生成的真正的xls文件。效率高,使用簡(jiǎn)單,不用考慮資源釋放的問題??上窗l(fā)現(xiàn)導(dǎo)出圖片的方法。不過一般導(dǎo)出Excel的話,強(qiáng)烈推薦!
4.使用微軟的官方COM組件。優(yōu)點(diǎn):功能強(qiáng)大。缺點(diǎn):效率低,需要手動(dòng)關(guān)閉進(jìn)程,釋放資源,而且服務(wù)器端還需安裝office。暫時(shí)只發(fā)現(xiàn)這個(gè)可以導(dǎo)出圖象到Excel。
方法如下:
雖然服務(wù)器必須安裝office,但并不需要安裝完整版本的office,本人發(fā)現(xiàn)精簡(jiǎn)版也可以。只不過設(shè)置麻煩一些而已。
先安裝O2003PIA補(bǔ)丁。下載地址百度。網(wǎng)上一堆。如果你安裝完整版的office,可以跳過這部。
然后導(dǎo)入COM組件
確定即可。
然后添加引用,如果安裝的是完整版的,直接在引用的tab框中添加即可。
如果您是精簡(jiǎn)版的,下載個(gè)Microsoft.Office.Interop.Excel.dll。然后放到網(wǎng)站根目錄
代碼如下
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;
//導(dǎo)入Com組件
using Microsoft.Office.Core;
//添加引用
using ex=Microsoft.Office.Interop.Excel;
using System.Reflection;
public partial class _Default : System.Web.UI.Page
{
///
/// ASP.NET導(dǎo)出圖象到Excel
/// 創(chuàng)建人:吳凱平
/// 創(chuàng)建時(shí)間:2010年1月3日 12:46:38
///
///
///
protected void Page_Load(object sender, EventArgs e)
{
}
///
/// 導(dǎo)出到Excel
///
///
///
protected void btnExcel_Click(object sender, EventArgs e)
{
//聲明一個(gè)默認(rèn)值
object missing = Missing.Value;
//聲明一個(gè)Excel應(yīng)用程序?qū)ο?/p>
ex.Application excelObj = new ex.ApplicationClass();
//禁用Excel提示(否則第二次生成會(huì)提示是否覆蓋等..)
excelObj.DisplayAlerts = false;
//不顯示excel??
excelObj.Visible = false;
//創(chuàng)建workbooks
ex.Workbooks wbooks = excelObj.Workbooks;
//使用Excel模板創(chuàng)建一個(gè)工作簿(模板必須先創(chuàng)建好放在網(wǎng)站可訪問目錄下)
ex.Workbook wbook = wbooks.Open(Server.MapPath("模板路徑"), missing, missing,
missing, missing, missing, missing, missing, missing, missing, missing, missing, missing,
missing, missing);
//新建一個(gè)excel工作表集合
ex.Worksheets sheets = (ex.Worksheets)wbook.Worksheets;
//新建一個(gè)工作表
ex._Worksheet sheet = (ex._Worksheet)sheets.get_Item(1);
//聲明一個(gè)pictures對(duì)象,用來存放sheet的圖片
ex.Pictures pics = (ex.Pictures)sheet.Pictures(missing);
//設(shè)置要插入的圖片路徑
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('沒有數(shù)據(jù)請(qǐng)生成數(shù)據(jù)再導(dǎo)入!');", true);
return;
}
object missing = Missing.Value;
//定義一個(gè)Excel應(yīng)用程序
ex.ApplicationClass excelObj = new ex.ApplicationClass();
excelObj.DisplayAlerts = false;
excelObj.Visible = false;
ex.Workbooks wbooks = excelObj.Workbooks;
ex.Workbook wbook = wbooks.Open(Server.MapPath("../動(dòng)態(tài)經(jīng)營(yíng)統(tǒng)計(jì)數(shù)據(jù).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();
//聲明一個(gè)pictures對(duì)象,用來存放柱狀圖
ex.Pictures pics = (ex.Pictures)sheet.Pictures(missing);
//插入圖片
pics.Insert(Server.MapPath("Chartlet_chltStat_區(qū)企業(yè)年度信息統(tǒng)計(jì)表_Bar.Jpg"), missing);
sheet.Shapes.AddPicture(Server.MapPath("Chartlet_chltStat2_區(qū)企業(yè)年度信息統(tǒng)計(jì)表_Line.Jpg"),
Microsoft.Office.Core.MsoTriState.msoFalse,
Microsoft.Office.Core.MsoTriState.msoCTrue,
50, 400, 570, 368);//504 326
wbook.SaveAs(Server.MapPath("../xls/動(dòng)態(tài)經(jīng)營(yíng)統(tǒng)計(jì)數(shù)據(jù).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/動(dòng)態(tài)經(jīng)營(yíng)統(tǒng)計(jì)數(shù)據(jù).xls';", true);
//必須關(guān)閉釋放所引用的COM對(duì)象,關(guān)閉Excel進(jìn)程,否則會(huì)占用服務(wù)器資源
ReleaseObj(sheets);
ReleaseObj(wbook);
ReleaseObj(wbooks);
ReleaseObj(excelObj);
System.GC.Collect();
System.GC.WaitForPendingFinalizers();
//BindGv();
string filePath = Server.MapPath("../xls/動(dòng)態(tài)經(jīng)營(yíng)統(tǒng)計(jì)數(shù)據(jù).xls");
Response.ContentEncoding = System.Text.Encoding.GetEncoding("GB2312");
Response.AppendHeader("content-disposition", "attachment;filename=" + System.Web.HttpUtility.UrlEncode("動(dòng)態(tài)經(jīng)營(yíng)統(tǒng)計(jì)數(shù)據(jù)", System.Text.Encoding.UTF8) + ".xls");
Response.ContentType = "Application/excel";
Response.WriteFile(filePath);
Response.End();
}