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