asp.net匯出Excel類庫代碼分享

來源:互聯網
上載者:User

 這篇文章主要介紹了asp.net匯出Excel類庫代碼,有需要的朋友可以參考一下

  代碼如下:using System;using System.Collections.Generic;using System.Reflection;using System.Web;using Excel = Microsoft.Office.Interop.Excel; /// <summary>///ExcelClass 的摘要說明/// </summary>public class ExcelClass{    /// <summary>    /// 構建ExcelClass類    /// </summary>    public ExcelClass()    {        this.m_objExcel = new Excel.Application();    }    /// <summary>    /// 構建ExcelClass類    /// </summary>    /// <param name="objExcel">Excel.Application</param>    public ExcelClass(Excel.Application objExcel)    {        this.m_objExcel = objExcel;    }     /// <summary>    /// 列標號    /// </summary>    private string AList = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";     /// <summary>    /// 擷取描述地區的字元    /// </summary>    /// <param name="x"></param>    /// <param name="y"></param>    /// <returns></returns>    public string GetAix(int x, int y)    {        char[] AChars = AList.ToCharArray();        if (x >= 26) { return ""; }        string s = "";        s = s + AChars[x - 1].ToString();        s = s + y.ToString();        return s;    }     /// <summary>    /// 給儲存格賦值1    /// </summary>    /// <param name="x">行號</param>    /// <param name="y">列號</param>    /// <param name="align">對齊(CENTER、LEFT、RIGHT)</param>    /// <param name="text">值</param>    public void setValue(int y, int x, string align, string text)    {        Excel.Range range = sheet.get_Range(this.GetAix(x, y), miss);        range.set_Value(miss, text);        if (align.ToUpper() == "CENTER")        {            range.HorizontalAlignment = Excel.XlHAlign.xlHAlignCenter;        }        if (align.ToUpper() == "LEFT")        {            range.HorizontalAlignment = Excel.XlHAlign.xlHAlignLeft;        }        if (align.ToUpper() == "RIGHT")        {            range.HorizontalAlignment = Excel.XlHAlign.xlHAlignRight;        }      }     /// <summary>    /// 給儲存格賦值2    /// </summary>    /// <param name="x">行號</param>    /// <param name="y">列號</param>    /// <param name="text">值</param>    public void setValue(int y, int x, string text)    {        Excel.Range range = sheet.get_Range(this.GetAix(x, y), miss);        range.set_Value(miss, text);    }     /// <summary>    /// 給儲存格賦值3    /// </summary>    /// <param name="x">行號</param>    /// <param name="y">列號</param>    /// <param name="text">值</param>    /// <param name="font">字元格式設定</param>    /// <param name="color">顏色</param>    public void setValue(int y, int x, string text, System.Drawing.Font font, System.Drawing.Color color)    {        this.setValue(x, y, text);        Excel.Range range = sheet.get_Range(this.GetAix(x, y), miss);        range.Font.Size = font.Size;        range.Font.Bold = font.Bold;        range.Font.Color = color;        range.Font.Name = font.Name;        range.Font.Italic = font.Italic;        range.Font.Underline = font.Underline;    }     /// <summary>    /// 插入新行    /// </summary>    /// <param name="y">模板行號</param>    public void insertRow(int y)    {        Excel.Range range = sheet.get_Range(GetAix(1, y), GetAix(25, y));        range.Copy(miss);        range.Insert(Excel.XlDirection.xlDown, miss);        range.get_Range(GetAix(1, y), GetAix(25, y));        range.Select();        sheet.Paste(miss, miss);      }     /// <summary>    /// 把剪下內容粘貼到目前範圍    /// </summary>    public void past()    {        string s = "a,b,c,d,e,f,g";        sheet.Paste(sheet.get_Range(this.GetAix(10, 10), miss), s);    }    /// <summary>    /// 設定邊框    /// </summary>    /// <param name="x1"></param>    /// <param name="y1"></param>    /// <param name="x2"></param>    /// <param name="y2"></param>    /// <param name="Width"></param>    public void setBorder(int x1, int y1, int x2, int y2, int Width)    {        Excel.Range range = sheet.get_Range(this.GetAix(x1, y1), miss);          ((Excel.Range)range.Cells[x1, y1]).ColumnWidth = Width;    }    public void mergeCell(int x1, int y1, int x2, int y2)    {        Excel.Range range = sheet.get_Range(this.GetAix(x1, y1), this.GetAix(x2, y2));        range.Merge(true);    }     public Excel.Range getRange(int x1, int y1, int x2, int y2)    {        Excel.Range range = sheet.get_Range(this.GetAix(x1, y1), this.GetAix(x2, y2));        return range;    }     private object miss = Missing.Value; //忽略的參數OLENULL     private Excel.Application m_objExcel;//Excel應用程式執行個體     private Excel.Workbooks m_objBooks;//工作表集合     private Excel.Workbook m_objBook;//當前操作的工作表     private Excel.Worksheet sheet;//當前操作的表格     public Excel.Worksheet CurrentSheet    {        get        {            return sheet;        }        set        {            this.sheet = value;        }    }     public Excel.Workbooks CurrentWorkBooks    {        get        {            return this.m_objBooks;        }        set        {            this.m_objBooks = value;        }    }     public Excel.Workbook CurrentWorkBook    {        get        {            return this.m_objBook;        }        set        {            this.m_objBook = value;        }    }    /// <summary>    /// 開啟Excel檔案    /// </summary>    /// <param name="filename">路徑</param>    public void OpenExcelFile(string filename)    {        UserControl(false);         m_objExcel.Workbooks.Open(filename, miss, miss, miss, miss, miss, miss, miss,                               miss, miss, miss, miss, miss, miss, miss);         m_objBooks = (Excel.Workbooks)m_objExcel.Workbooks;         m_objBook = m_objExcel.ActiveWorkbook;        sheet = (Excel.Worksheet)m_objBook.ActiveSheet;    }    public void UserControl(bool usercontrol)    {        if (m_objExcel == null) { return; }        m_objExcel.UserControl = usercontrol;        m_objExcel.DisplayAlerts = usercontrol;        m_objExcel.Visible = usercontrol;    }    public void CreateExceFile()    {        UserControl(false);        m_objBooks = (Excel.Workbooks)m_objExcel.Workbooks;        m_objBook = (Excel.Workbook)(m_objBooks.Add(miss));        sheet = (Excel.Worksheet)m_objBook.ActiveSheet;    }    public void SaveAs(string FileName)    {         m_objBook.SaveAs(FileName, miss, miss, miss, miss,         miss, Excel.XlSaveAsAccessMode.xlNoChange,         Excel.XlSaveConflictResolution.xlLocalSessionChanges,         miss, miss, miss, miss);        //m_objBook.Close(false, miss, miss);     }    public void ReleaseExcel()    {        m_objExcel.Quit();        System.Runtime.InteropServices.Marshal.ReleaseComObject((object)m_objExcel);        System.Runtime.InteropServices.Marshal.ReleaseComObject((object)m_objBooks);        System.Runtime.InteropServices.Marshal.ReleaseComObject((object)m_objBook);        System.Runtime.InteropServices.Marshal.ReleaseComObject((object)sheet);        m_objExcel = null;        m_objBooks = null;        m_objBook = null;        sheet = null;        GC.Collect();    }     public bool KillAllExcelApp()    {        try        {            if (m_objExcel != null) // isRunning是判斷xlApp是怎麼啟動的flag.            {                m_objExcel.Quit();                System.Runtime.InteropServices.Marshal.ReleaseComObject(m_objExcel);                //釋放COM組件,其實就是將其引用計數減1                //System.Diagnostics.Process theProc;                foreach (System.Diagnostics.Process theProc in System.Diagnostics.Process.GetProcessesByName("EXCEL"))                {                    //先關閉圖形視窗。如果關閉失敗...有的時候在狀態裡看不到圖形視窗的excel了,                    //但是在進程裡仍然有EXCEL.EXE的進程存在,那麼就需要殺掉它:p                    if (theProc.CloseMainWindow() == false)                    {                        theProc.Kill();                    }                }                m_objExcel = null;                return true;            }        }        catch        {            return false;        }        return true;    }}    /// <summary>    /// 點擊列印按鈕事件    /// </summary>    /// <param name="sender"></param>    /// <param name="e"></param>    protected void Sendbu_Click(object sender, EventArgs e)    {        try        {                      //尋找部門分類使用者            DataTable Duser = EduOA.DBUtility.DbHelperSQL.Query("select count(*) as count,d.Id as DId FROM OA_User u,OA_Department d where u.DepartmentID=d.Id  group by d.Id").Tables[0];             ExcelClass Ec = new ExcelClass();//建立Excel操作類對象             int Ycount = 1;             Ec.CreateExceFile();//建立Excel檔案             Ec.setValue(Ycount, 1, "CENTER", "組織部門");            Ec.setValue(Ycount, 2, "CENTER", "姓名");            Ec.setValue(Ycount, 3, "CENTER", "性別");            Ec.setValue(Ycount, 4, "CENTER", "職位");            Ec.setValue(Ycount, 5, "CENTER", "行動電話");            Ec.setValue(Ycount, 6, "CENTER", "電話");            Ec.setValue(Ycount, 7, "CENTER", "電子郵箱");            Ec.setBorder(1, 1, 1, 1, 50);            Ec.setBorder(1, 2, 2, 2, 20);            Ec.setBorder(1, 5, 5, 5, 20);            Ec.setBorder(1, 6, 6, 6, 20);            Ec.setBorder(1, 7, 7, 7, 20);             for (int i = 0; i < Duser.Rows.Count; i++)            {                Ycount += 1;                Ec.setValue(Ycount, 1, "CENTER", Common.DeleteHtml(Getdept(Duser.Rows[i]["count"], Duser.Rows[i]["DId"])));                DataTable dtuser = GetData(Duser.Rows[i]["DId"]);                for (int k = 0; k < dtuser.Rows.Count; k++)                {                    Ec.setValue(Ycount, 2, "CENTER", dtuser.Rows[k]["TrueName"].ToString());                    Ec.setValue(Ycount, 3, "CENTER", dtuser.Rows[k]["sex"].ToString());                    Ec.setValue(Ycount, 4, "CENTER", dtuser.Rows[k]["PositionId"].ToString());                    Ec.setValue(Ycount, 5, "CENTER", dtuser.Rows[k]["Telephone"].ToString());                    Ec.setValue(Ycount, 6, "CENTER", dtuser.Rows[k]["Mobile"].ToString());                    Ec.setValue(Ycount, 7, "CENTER", dtuser.Rows[k]["Email"].ToString());                    Ycount += 1;                }            }            string path = Server.MapPath("Contactfiles");            Ec.SaveAs(path+"通訊錄.xlsx");             //*******釋放Excel資源***********            Ec.ReleaseExcel();             Response.Redirect("Contactfiles/通訊錄.xlsx");                    }        catch (Exception ex)        {            PageError("匯出出錯!"+ex.ToString(),"");        }    } 
相關文章

Cloud Intelligence Leading the Digital Future

Alibaba Cloud ACtivate Online Conference, Nov. 20th & 21st, 2019 (UTC+08)

Register Now >

Starter Package

SSD Cloud server and data transfer for only $2.50 a month

Get Started >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。