4221学习网
首页 | 网址大全 | 脑力倍增 | 电脑学院 | 学习方法 | 口才交际 | 英语学习 | 工作职场 | 成功励志 | 文学小说 | QQ·技巧 | 视频短片 | 视频教程 | NBA | 图片 | 游戏技巧 | 恋爱技巧 | 专题教程 | 4221论坛
热门关键字: 视频教程  美女  百家讲坛  记忆力  疯狂英语
 → 当前位置:4221学习网>电脑学院>编程开发>C#教程>正文

再现C#导出Excel源码

4221学习网 2007-06-08 来源:互联网 收藏本文

 
网上反应比较强烈。本人也因为工作需要的原因,将其封装了成了ExcelManager。企业当中,做报表的数据来源肯定就是数据库了。该ExcelManager目前只提供Ms Sql Server的支持,因为我们公司使用的就是ms sql server 2000 了。封装后的ExcelManager,你只需传入你的报表表头(一级表头、二级表头。大部分有两级也就够了。如果你有多个,可自行修改该类.),并将对应的数据库表字段传入类库中的方法DeclareExcelApp即可。
同前一篇一样,你可将下面代码复制另存一个新类就可以了(不知为什么,我在家里上网老是传附件不上来!faint...)。随后,我会给出一个调用的方法的:
namespace ExportToExcel
{
    using System;
    using System.Data;
    using System.Data.SqlClient;
    using System.Windows.Forms;
    using System.Runtime.InteropServices;

    /***********************************************************************************
     ****Class Name :   ExcelManger
     ****Author:            KingNa
     ****Create Date :   2006-9-1
     ****CopyRight:     Reserve this info if you want to User this Class
    ***********************************************************************************/
    public class ExcelManager:IDisposable
    {
        Excel.Range m_objRange = null;
        Excel.Application m_objExcel = null;
        Excel.Workbooks m_objBooks = null;
        Excel._Workbook m_objBook = null;
        Excel.Sheets m_objSheets = null;
        Excel._Worksheet m_objSheet = null;
        Excel.QueryTable m_objQryTable = null;
        object m_objOpt = System.Reflection.Missing.Value;
        //DataBase-used variable
        private System.Data.SqlClient.SqlConnection sqlConn = null;
        private string strConnect = string.Empty;
        private System.Data.SqlClient.SqlCommand sqlCmd = null;

        //Sheets variable
        private double dbSheetSize = 65535;//the hight limit number in one sheet
        private int intSheetTotalSize = 0;//total record can divied sheet number
        private double dbTotalSize = 0;//record total number


        /// <summary>
        /// 建构函数
        /// </summary>

  public ExcelManager(){}

 

        /// <summary>
        /// 建构函数
        /// </summary>
        /// <param name="dbHL">一个Excel表格的最大记录数</param>
        /// <param name="dbTotal">该数据库表共查询出多少条记录</param>
        /// <param name="intDivide">查询出的记录可分成几个Excel</param>
        /// <param name="conn">sqlConnection</param>
        public ExcelManager(Double dbHL,Double dbTotal,int intDivide,SqlConnection conn )
        {
            dbSheetSize = dbHL;
            intSheetTotalSize = intDivide;
            dbTotalSize = dbTotal;
            sqlConn = conn;
        }
        /// <summary>
        /// 建构函数
        /// </summary>
        /// <param name="dbHL">一个Excel表格的最大记录数</param>
        /// <param name="strTableName">需查询的数据库的表名</param>
        /// <param name="conn">sqlConnection</param>
        public ExcelManager(Double dbHL,string strTableName,SqlConnection conn)
        {
            dbSheetSize = dbHL;
            sqlConn = conn;
            intSheetTotalSize = GetTotalSize(strTableName,sqlConn);
        }

        public void Dispose()
        {
            Dispose(true);
            GC.SuppressFinalize(this);
        }
        private void Dispose(bool disposing)
        {
            if(disposing)
            {
                // Dispose managed resources.
                Marshal.FinalReleaseComObject(m_objExcel);

    m_objRange = null;
                m_objSheet = null;
                m_objSheets = null;
                m_objBooks = null;
                m_objBook = null;
                m_objExcel = null;
            }
        }
        /// <summary>
        /// 取得总记录数跟可分成几个Excel sheet.
        /// </summary>
        /// <param name="strTableName">被查询的数据库的表名</param>
        /// <param name="sqlConn">sqlConnection</param>
        /// <returns>可分成Excel Sheet的个数</returns>
        private int GetTotalSize(string strTableName,SqlConnection sqlConn)
        {
            //sqlConn = new System.Data.SqlClient.SqlConnection(strConnect);
            sqlCmd = new System.Data.SqlClient.SqlCommand("Select Count(*) From "+strTableName, sqlConn);
            if(this.sqlConn.State == ConnectionState.Closed) sqlConn.Open();
            dbTotalSize = (int)sqlCmd.ExecuteScalar();
            sqlConn.Close();
            return (int)Math.Ceiling(dbTotalSize / this.dbSheetSize);
        }

 

        /// <summary>
        /// 新建一个Excel实例  /本篇文章发表于www.xker.com(小新)
        /// </summary>
        /// <param name="strTitle">Excel表头上的文字</param>
        public void DeclareExcelApp(string[] strTitle,string strSql,string strTableName,string strMastTitle)
        {
            m_objExcel = new Excel.ApplicationClass();
            m_objExcel.Visible = true;

共3页: 上一页 1 [2] [3] 下一页
上一篇:操作SQL Server Mobile 2005数据库的常用C#代码   下一篇:C#连接mysql
添加到google书签 digg this! 添加到bolaa 添加到yahoo+ 添加到新浪vivi 添加到365key  
收藏】 【评论】 【推荐】 【投稿】 【打印】 【关闭

相关文章
·操作SQL Server Mobile 2005数据库的常用C#
·C#连接mysql
·学习极限 挑战C#学习的最快速度
·解读C#中的规则表达式
·C#学习第十六天
·C#学习第十五天
·C#学习第十四天
·C#学习第十三天
·C#学习第十二天
·C#学习第十一天
发表评论
要记得去论坛讨论,点击注册新会员) 密码: 匿名评论
评论内容:(请自觉遵守互联网相关政策法规。)
最新文章
·C#学习第一天
·C#学习第二天
·C#学习第三天
·C#学习第四天
·C#学习第五天
·C#学习第六天
·C#学习第七天
·C#学习第八天
·C#学习第九天
·C#学习第十天
本类阅读排行榜
·学习极限 挑战C#学习的最快速度
·C#学习第一天
·解读C#中的规则表达式
·C#连接mysql
·操作SQL Server Mobile 2005数据库的常用
·C#学习第十一天
·C#学习第八天
·C#学习第七天
·C#学习第二天
·C#学习第十四天
热点视频教程
视频街舞 舞步 教学
视频李孝利十分钟详细舞蹈教程
视频windowsxp重装系统视频教程
视频美女教你跳舞
视频街舞 舞步 教学2
视频韩国的太空步教程,后滑、侧滑、旋转太空
视频如何安装双操作系统
视频台球教程-基本杆法
视频双截棍视频教程-定式
视频【WindowsXP入门教程】 - 硬盘分区
视频启功书法视频
视频24式太极拳教学---基本动作
视频[百家讲坛]三十六计01_借刀杀人
视频 斯诺克台球竿法-后退球
视频超级全脑速读训练教程

设为首页 - 加入收藏 - 关于我们 - 联系我们 - 友情连接

4221学习网版权所有-鄂ICP备07006816号
已浏览: