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





转载于:https://www.cnblogs.com/riasky/p/3455154.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/263096.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

今天将Notebook还原了, 第一次外加了外围电路

因为天气太热了, 我的Aspire 5502出了问题, 用Ghost还原中途死机, 找了问题原来是太热了....又在宿舍, 没有空调, 又不想去图书馆, 最后就问奶仔借了部风扇, 总算搞掂了...相机太快了....看上去风扇好像停了....不仅有风扇, 它还要裸跑才能胜利还原....温度一高就自动关机了...…

SpringBoot生成日志文件---logback和log4j

SpringBoot生成日志文件---logback和log4j一、logbacklogback是SpringBoot自带的日志文件&#xff0c;默认会为控制台输出INFO级别的日志&#xff0c;并且不会将日志文件保存。如果我们只需要输出日志到文件&#xff0c;直接给application.yml中添加如下配置&#xff0c;对应日…

分清DB_NAME、INSTANCE_NAME、ORACLE_SID、SERVICE_NAME、DB_DOMAIN和GLOBAL_DB_NAME

Oracle安装前&#xff0c;首先要分清DB_NAME、INSTANCE_NAME、ORACLE_SID、SERVICE_NAME、DB_DOMAIN和GLOBAL_DB_NAME的概念。 一个运行着的ORACLE数据库就可以看成是一个ORACLE SERVER&#xff0c;该SERVER由数据库(Database)和实例(Instance)组成&#xff0c;在一般的情况下一…

几种经典的数据排序及其Java实现

选择排序 思想 n个记录的文件的直接选择排序可经过n-1趟直接选择排序得到有序结果&#xff1a; ①初始状态&#xff1a;无序区为R[1..n]&#xff0c;有序区为空。 ②第1趟排序 在无序区R[1..n]中选出关键字最小的记录R[k]&#xff0c;将它与无序区的第1个记录R[1]交换&#…

远见卓识,领导力在于把握企业潮流

凡是有人群的地方就有领导力&#xff0c;凡是有思想、有文化的地方就有领导力。经济学里&#xff0c;是在市场的意义上研究领导力&#xff1a;谁在引领价格变动的方式&#xff0c;谁在引领技术变化的潮流&#xff0c;谁在引导产品的发展趋势&#xff0c;这些都是领导力的概念。…

关于SqlBulkCopy SQL批量导入需要注意,列名是区分大小写的

最近在做数据从Excel批量导入MSSQL时&#xff0c;传统的是使用Insert Into Table方法&#xff0c;不过这个方便比较慢 通过使用 SqlBulkCopy 可以批量导入到数据库。 默认批量导入数据库&#xff0c;需要DataTable的构架和MSSQL的表结构一样。但是使用ColumnMappings可以对列明…

VMware开启NAT模式/仅主机模式后主机ping不通虚拟机的问题

VMware开启NAT模式/仅主机模式后主机ping不通虚拟机的问题问题&#xff1a;VMware设置网络模式为NAT模式后&#xff0c;我们使用主机ping虚拟机无法联通&#xff0c;用虚拟机ping主机可以联通。 原因&#xff1a;这是由于虚拟机的IP网段与主机的VMnet8网段不一致所造成的。 解…

linux下 mysql 忘记root用户密码解决办法

一、以系统的root用户&#xff08;什么&#xff0c;你的系统的root用户密码也忘了。那只好看我另外一篇linux下忘记root用户的解决办法了先解决这个问题&#xff09;登陆系统&#xff0c;进入终端 [rootlocalhost /]# 二、杀掉mysql进程 方法1、[rootlocalhost /]#killall m…

OO设计原则总结

什么是设计原则&#xff1f; 设计原则是基本的工具&#xff0c;应用这些规则可以使你的代码更加灵活、更容易维护&#xff0c;更容易扩展。 基本原则封装变化Encapsulate what varies. 面向接口编程而非实现 Code to an interface rather than to an implementation.优先使用组…

kubectl get node运行时出现:Unable to connect to the server: x509: certificate signed by unknown authority

kubectl get nodes运行时出现&#xff1a;Unable to connect to the server: x509: certificate signed by unknown authority原因&#xff1a;我们在运行kubeadm reset时&#xff0c;没有删除原先的$HOME/.kube文件导致新建的kubelet报错。实际上在kubeadm reset执行后&#x…

设置在VS2005的IDE中迅速打开xaml文件

设置在VS2005的IDE中迅速打开xaml文件 本人使用普通台式计算机做WPF开发&#xff0c;每次打开xaml的时候&#xff0c;都需要等半天&#xff0c;那叫一个慢呀&#xff0c;实在受不了。即使是一个新建的xaml文件&#xff0c;打开都慢。怎样解决VS2005的IDE中打开xaml文件慢的问题…

Git分支(远程)

1、远程分支的表示形式&#xff1a;远程仓库名称/分支名&#xff0c;如&#xff1a;origin/master&#xff1b;2、一次Git克隆会建立你自己的本地分支&#xff1a;master和远程分支&#xff1a;origin/master&#xff0c;它们都指向origin/master分支的最后一次提交&#xff1b…

kubeadm join时出现错误:[ERROR Port-10250]: Port 10250 is in use [ERROR FileAvailable--etc-kubernetes-pki

kubeadm join时出现错误&#xff1a;[ERROR Port-10250]: Port 10250 is in use&#xff1b;[ERROR FileAvailable--etc-kubernetes-pki-ca.crt]: /etc/kubernetes/pki/ca.crt already exists初次使用kubeadm构建k8s集群&#xff0c;所以对子节点加入管理节点的过程认识不足&am…

cs文件中控制页面table的大小、title名称(.aspx)

1. title 控制HTML:<title id"mytitle" runat"server"></title> CS: protected System.Web.UI.HtmlControls.HtmlGenericControl mytitle;mytitle.InnerText "Hello World"; 2. 页面table 控制HTML:<TABLE idTabl…

TCP/IP详解学习笔记(2)-数据链路层

TCP/IP详解学习笔记(2)-数据链路层数据链路层有三个目的&#xff1a; 为IP模块发送和 接收IP数据报。 为ARP模块发送ARP请求和接收ARP应答。 为RARP发送RARP请 求和接收RARP应答ip大家都听说过。至于ARP和RARP&#xff0c;ARP叫做地址解析协议…

vi 按了ctrl+s怎么办

【转载】 手香的不得了 http://blog.sina.com.cn/lx987654321123456789 今天白痴了一把&#xff0c;用vi的时候&#xff0c;习惯性的用了ctrl-s&#xff0c;一下子僵掉了网上一查&#xff0c; 原来&#xff1a; CTRLS表示停止向终端停止输出; CTRLQ恢复向终端输出流. 严重bs自己…

POJ 1966 Cable TV Network (最大流最小割)

$ POJ~1966~Cable~TV~Network $ $ solution: $ 第一眼可能让人很难下手&#xff0c;但本就是冲着网络流来的&#xff0c;所以我们直接一点。这道题我们要让这个联通图断开&#xff0c;那么势必会有两个点变得不连通&#xff0c;这道题的数据范围很小&#xff0c;所以我们试着暴…

harbor安装时出现ERROR: An HTTP request took too long to complete. Retry with --verbose to obtain debug in

harbor安装时出现ERROR: An HTTP request took too long to complete. Retry with --verbose to obtain debug information.If you encounter this issue regularly because of slow network conditions, consider setting COMPOSE_HTTP_TIMEOUT to a higher value current val…

几大开源项目

7-Zip 4.32&#xff1a;文件压缩工具&#xff0c;可与Windows资源管理器集成 A Note 4.2.1&#xff1a;可在Windows桌面放置便笺&#xff0c;并可提供闹钟提醒功能 Abakt 0.9&#xff1a;能够以压缩方式对文档进行备份 Abiword 2.27&#xff1a;Windows写字板的替代程序&…

如何恢复Linux下被误删除的文件以及如何防止文件被删除

【卸载被误删除文件所在的分区&#xff0c;或以只读方式mount】当你发现你误删除了文件后&#xff0c;要做的第一件事情是马上卸载被误删除文件所在分区&#xff0c;或者以只读的方式来挂在该防区。如果误删除的是根分区&#xff0c;最好直接断电&#xff0c;进入单用户模式&am…