學(xué)習(xí)啦>學(xué)習(xí)電腦>工具軟件>辦公軟件學(xué)習(xí)>Excel教程>Excel基礎(chǔ)>

將asp圖片導(dǎo)出Excel的方法

時(shí)間: 張偉670 分享

  小編在網(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)單,不用考慮資源釋放的問題。可惜未發(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)營統(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)營統(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)營統(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)營統(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)營統(tǒng)計(jì)數(shù)據(jù)", System.Text.Encoding.UTF8) + ".xls");

  Response.ContentType = "Application/excel";

  Response.WriteFile(filePath);

  Response.End();

  }

353987