asp.net导出Excel类库代码分享

 更新时间:2021年9月22日 10:13  点击:1675

复制代码 代码如下:

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(),"");
        }
    }

[!--infotagslink--]

相关文章

  • ASP.NET购物车实现过程详解

    这篇文章主要为大家详细介绍了ASP.NET购物车的实现过程,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-09-22
  • 在ASP.NET 2.0中操作数据之七十二:调试存储过程

    在开发过程中,使用Visual Studio的断点调试功能可以很方便帮我们调试发现程序存在的错误,同样Visual Studio也支持对SQL Server里面的存储过程进行调试,下面就让我们看看具体的调试方法。...2021-09-22
  • SpringBoot实现excel文件生成和下载

    这篇文章主要为大家详细介绍了SpringBoot实现excel文件生成和下载,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-02-09
  • c#读取excel方法实例分析

    这篇文章主要介绍了c#读取excel方法,实例分析了C#读取excel文件的原理与相关技巧,需要的朋友可以参考下...2020-06-25
  • Python导入数值型Excel数据并生成矩阵操作

    这篇文章主要介绍了Python导入数值型Excel数据并生成矩阵操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-06-09
  • ASP.NET Core根据环境变量支持多个 appsettings.json配置文件

    这篇文章主要介绍了ASP.NET Core根据环境变量支持多个 appsettings.json配置文件,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-09-22
  • C# winform打开Excel文档的方法总结(必看篇)

    下面小编就为大家带来一篇C# winform打开Excel文档的方法总结(必看篇)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2020-06-25
  • 记一次EFCore类型转换错误及解决方案

    这篇文章主要介绍了记一次EFCore类型转换错误及解决方案,帮助大家更好的理解和学习使用asp.net core,感兴趣的朋友可以了解下...2021-09-22
  • C# 导出Excel的6种简单方法实现

    C# 导出 Excel 的6种简单方法:数据表导出到 Excel,对象集合导出到 Excel,数据库导出到 Excel,微软网格控件导出到 Excel,数组导出到 Excel,CSV 导出到 Excel,你都会了吗?需要的朋友们下面随着小编来一起学习学习吧...2020-06-25
  • C#实现Excel表数据导入Sql Server数据库中的方法

    这篇文章主要介绍了C#实现Excel表数据导入Sql Server数据库中的方法,结合实例形式详细分析了C#读取Excel表数据及导入Sql Server数据库的具体操作步骤与相关操作技巧,需要的朋友可以参考下...2020-06-25
  • 详解ASP.NET Core 中基于工厂的中间件激活的实现方法

    这篇文章主要介绍了ASP.NET Core 中基于工厂的中间件激活的实现方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2021-09-22
  • C#实现将数据导出到word或者Excel中的方法

    这篇文章主要介绍了C#实现将数据导出到word或者Excel中的方法,涉及C#操作word及Excel格式文件的方法,具有一定参考借鉴价值,需要的朋友可以参考下...2020-06-25
  • C#使用Ado.Net更新和添加数据到Excel表格的方法

    这篇文章主要介绍了C#使用Ado.Net更新和添加数据到Excel表格的方法,较为详细的分析了OLEDB的原理与使用技巧,可实现较为方便的操作Excel数据,需要的朋友可以参考下...2020-06-25
  • asp.net通过消息队列处理高并发请求(以抢小米手机为例)

    这篇文章主要介绍了asp.net通过消息队列处理高并发请求(以抢小米手机为例),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-09-22
  • ASP.NET 2.0中的数据操作:使用两个DropDownList过滤的主/从报表

    在前面的指南中我们研究了如何显示一个简单的主/从报表, 该报表使用DropDownList和GridView控件, DropDownList填充类别,GridView显示选定类别的产品. 这类报表用于显示具有...2016-05-19
  • ASP.NET单选按钮控件RadioButton常用属性和方法介绍

    RadioButton又称单选按钮,其在工具箱中的图标为 ,单选按钮通常成组出现,用于提供两个或多个互斥选项,即在一组单选钮中只能选择一个...2021-09-22
  • C#使用Aspose.Cells创建和读取Excel文件

    这篇文章主要为大家详细介绍了C#使用Aspose.Cells创建和读取Excel文件,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2020-06-25
  • C#使用oledb导出数据到excel的方法

    这篇文章主要介绍了C#使用oledb导出数据到excel的方法,结合实例形式分析了C#操作oledb导出数据的相关技巧与注意事项,需要的朋友可以参考下...2020-06-25
  • C#操作excel打印的示例

    这篇文章主要介绍了C#操作excel打印的示例,帮助大家利用c#打印表格,提高办公效率,感兴趣的朋友可以了解下...2020-12-08
  • C#删除Excel中的图片实例代码

    在本篇文章里小编给大家分享了关于C#删除Excel中的图片的实例代码内容,有兴趣的朋友们参考学习下。...2020-06-25