国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 開(kāi)發(fā) > 綜合 > 正文

C#導(dǎo)出Excel源碼

2024-07-21 02:28:42
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

c#導(dǎo)出excel方法有多種﹐常用的按照microsoft 的方法如下:
1﹑"use automation to transfer data cell by cell "
2﹑"use automation to transfer an array of data to a range on a worksheet "
3﹑"use automation to transfer an ado recordset to a worksheet range "
4﹑"use automation to create a querytable on a worksheet"
5﹑"use the clipboard"
6﹑"create a delimited text file that excel can parse into rows and columns"
7﹑"transfer data to a worksheet using ado.net "
在此本人主要使用第4種方法:即利用excel的querytable導(dǎo)出海量數(shù)據(jù)。
要利用excel的querytable的方法﹐首先需要引用excel類(lèi)庫(kù)。這個(gè)我就不多說(shuō)了。
第二步就是新增一個(gè)窗體文件﹐為簡(jiǎn)單起見(jiàn)﹐只在窗體上加一個(gè)button按鈕。在button click事件中加入操作的代碼。整個(gè)操作﹐我只在一個(gè)類(lèi)中實(shí)現(xiàn)﹐源碼附貼如下(office2003)﹕
using system;
using system.collections.generic;
using system.componentmodel;
using system.data;
using system.drawing;
using system.text;
using system.windows.forms;

namespace windowsapplication3
{
    public partial class form1 : form
    {
        private microsoft.office.interop.excel.application m_objexcel = null;
        private microsoft.office.interop.excel.workbooks m_objbooks = null;
        private microsoft.office.interop.excel._workbook m_objbook = null;
        private microsoft.office.interop.excel.sheets m_objsheets = null;
        private microsoft.office.interop.excel._worksheet m_objsheet = null;
        private microsoft.office.interop.excel.range m_objrange = null;
        //private microsoft.office.interop.excel.font m_objfont = null;
        //private microsoft.office.interop.excel.querytables m_objqrytables = null;
        private microsoft.office.interop.excel._querytable m_objqrytable = null;
        // frequenty-used variable for optional arguments.
        private object m_objopt = system.reflection.missing.value;
        //database-used variable
        private system.data.sqlclient.sqlconnection sqlconn = null;
        private string strconnect = "data source='192.168.168.253';password = shs;user id=shs;initial catalog=test_km_erp";
        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

        public form1()
        {
            initializecomponent();
        }

        private int gettotalsize()
        {
            sqlconn = new system.data.sqlclient.sqlconnection(strconnect);
            sqlcmd = new system.data.sqlclient.sqlcommand("select count(*) from pd_workbil_mst", sqlconn);
            sqlconn.open();
            dbtotalsize = (int)sqlcmd.executescalar();
            sqlconn.close();
            return (int)math.ceiling(dbtotalsize / this.dbsheetsize);
        }
        private void declareexcelapp()
        {
            m_objexcel = new microsoft.office.interop.excel.application();
            m_objbooks = (microsoft.office.interop.excel.workbooks)m_objexcel.workbooks;
            m_objbook = (microsoft.office.interop.excel._workbook)(m_objbooks.add(m_objopt));
            m_objsheets = (microsoft.office.interop.excel.sheets)m_objbook.worksheets;
            intsheettotalsize = gettotalsize();
            if (intsheettotalsize <= 3)
            {
                if (this.dbtotalsize <= this.dbsheetsize)
                {
                    this.exportdatabyquerytable(1, false);
                    return;
                }
                else if (this.dbtotalsize <= this.dbsheetsize * 2)
                {
                    this.exportdatabyquerytable(1, false);
                    this.exportdatabyquerytable(2, true);
                    return;
                }
                else
                {
                    this.exportdatabyquerytable(1, false);
                    this.exportdatabyquerytable(2, true);
                    this.exportdatabyquerytable(3, true);
                    return;
                }
            }
            for (int i = 3; i < intsheettotalsize; i++)
            {
                m_objsheets.add(m_objopt, m_objsheets.get_item(i), m_objopt, m_objopt);
            }
            exportdatabyquerytable(1, false);
            for (int i = 2; i <= m_objsheets.count; i++)
            {
                exportdatabyquerytable(i,true);
            }
        }
        private void saveexcelapp()
        {
            string excelfilename = string.empty;
            savefiledialog sf = new savefiledialog();
            sf.filter = "*.xls|*.*";
            if (sf.showdialog() == dialogresult.ok)
            {
                excelfilename = sf.filename;
            }
            else
            {
                return;
            }
            m_objbook.saveas(excelfilename, m_objopt, m_objopt, m_objopt, m_objopt, m_objopt,
                microsoft.office.interop.excel.xlsaveasaccessmode.xlnochange,
                m_objopt, m_objopt, m_objopt, m_objopt, m_objopt);
        }
        private void exportdatabyquerytable(int intsheetnumber,bool blismorethan)
        {
            string strquery = string.empty;
            if (blismorethan)
            {
                strquery = "select top " +
                this.dbsheetsize + " * from pd_workbil_mst where not  cmpid in (select top " +
                dbsheetsize * (intsheetnumber-1) + "  cmpid from pd_workbil_mst)";
            }
            else
            {
                strquery = "select top " +this.dbsheetsize + " * from pd_workbil_mst ";

            }
            m_objsheet = (microsoft.office.interop.excel._worksheet)(m_objsheets.get_item(intsheetnumber));
            m_objsheet.get_range("a1", m_objopt).set_value(m_objopt, "中文測(cè)試一");
            m_objsheet.get_range("b1", m_objopt).set_value(m_objopt, "中文測(cè)試二");
            m_objsheet.get_range("c1", m_objopt).set_value(m_objopt, "中文測(cè)試三");
            m_objsheet.get_range("d1", m_objopt).set_value(m_objopt, "中文測(cè)試四");
            m_objsheet.get_range("e1", m_objopt).set_value(m_objopt, "中文測(cè)試五");
            m_objrange = m_objsheet.get_range("a2", m_objopt);
            m_objqrytable = m_objsheet.querytables.add("oledb;provider=sqloledb.1;" + strconnect, m_objrange, strquery);
            m_objqrytable.refreshstyle = microsoft.office.interop.excel.xlcellinsertionmode.xlinsertentirerows;
            m_objqrytable.fieldnames = false;
            m_objqrytable.refresh(false);
        }
        private void button1_click(object sender, eventargs e)
        {
            declareexcelapp();
            saveexcelapp();
        }
    }
}
使用office2000的話﹐好像類(lèi)庫(kù)有些不同﹐為給大家一個(gè)比較﹐也將源碼附貼如下﹕
using system;
using system.collections.generic;
using system.componentmodel;
using system.data;
using system.drawing;
using system.text;
using system.windows.forms;

namespace windowsapplication2
{
    public partial class form1 : form
    {
        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 = "data source='192.168.168.253';password = shs;user id=shs;initial catalog=test_km_erp";
        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

        public form1()
        {
            initializecomponent();
        }

        private int gettotalsize()
        {
            sqlconn = new system.data.sqlclient.sqlconnection(strconnect);
            sqlcmd = new system.data.sqlclient.sqlcommand("select count(*) from pd_workbil_mst", sqlconn);
            sqlconn.open();
            dbtotalsize = (int)sqlcmd.executescalar();
            sqlconn.close();
            return (int)math.ceiling(dbtotalsize / this.dbsheetsize);
        }
        private void declareexcelapp()
        {
            m_objexcel = new excel.applicationclass();
            m_objbooks = (excel.workbooks)m_objexcel.workbooks;
            m_objbook = (excel._workbook)(m_objbooks.add(m_objopt));
            m_objsheets = (excel.sheets)m_objbook.worksheets;
            intsheettotalsize = gettotalsize();
            if (intsheettotalsize <= 3)
            {
                if (this.dbtotalsize <= this.dbsheetsize)
                {
                    this.exportdatabyquerytable(1, false);
                    return;
                }
                else if (this.dbtotalsize <= this.dbsheetsize * 2)
                {
                    this.exportdatabyquerytable(1, false);
                    this.exportdatabyquerytable(2, true);
                    return;
                }
                else
                {
                    this.exportdatabyquerytable(1, false);
                    this.exportdatabyquerytable(2, true);
                    this.exportdatabyquerytable(3, true);
                    return;
                }
            }
            for (int i = 3; i < intsheettotalsize; i++)
            {
                m_objsheets.add(m_objopt, m_objsheets.get_item(i), m_objopt, m_objopt);
            }
            exportdatabyquerytable(1, false);
            for (int i = 2; i <= m_objsheets.count; i++)
            {
                exportdatabyquerytable(i, true);
            }
        }
        private void saveexcelapp()
        {
            string excelfilename = string.empty;
            savefiledialog sf = new savefiledialog();
            sf.filter = "*.xls|*.*";
            if (sf.showdialog() == dialogresult.ok)
            {
                excelfilename = sf.filename;
            }
            else
            {
                return;
            }
            m_objbook.saveas(excelfilename, m_objopt, m_objopt, m_objopt, m_objopt, m_objopt,
                excel.xlsaveasaccessmode.xlnochange, m_objopt, m_objopt, m_objopt, m_objopt);
        }
        private void exportdatabyquerytable(int intsheetnumber, bool blismorethan)
        {
            string strquery = string.empty;
            if (blismorethan)
            {
                strquery = "select top " +
                this.dbsheetsize + " * from pd_workbil_mst where not  cmpid in (select top " +
                dbsheetsize * (intsheetnumber-1) + "  cmpid from pd_workbil_mst)";
            }
            else
            {
                strquery = "select top " + this.dbsheetsize + " * from pd_workbil_mst ";

            }
            m_objsheet = (excel._worksheet)(m_objsheets.get_item(intsheetnumber));
            m_objsheet.cells[1,1] = "中文測(cè)試一";
            m_objsheet.cells[1,2] = "中文測(cè)試二";
            m_objsheet.cells[1,3] = "中文測(cè)試三";
            m_objsheet.cells[1,4] = "中文測(cè)試四";
            m_objsheet.cells[1,5] = "中文測(cè)試五";
            m_objrange = m_objsheet.get_range("a2", m_objopt);
            m_objqrytable = m_objsheet.querytables.add("oledb;provider=sqloledb.1;" + strconnect, m_objrange, strquery);
            m_objqrytable.refreshstyle = excel.xlcellinsertionmode.xlinsertentirerows;
            m_objqrytable.fieldnames = false;
            m_objqrytable.refresh(false);
        }

        private void button1_click(object sender, eventargs e)
        {
            declareexcelapp();
            saveexcelapp();

        }

    }
}
在本篇中﹐是將13萬(wàn)多條記錄分多個(gè)sheet導(dǎo)出。如果你的機(jī)器大概像我這樣:p4cpu,1g內(nèi)存的話。全部導(dǎo)出包括保存也就是20秒左右就可以全部搞定。
也許大家會(huì)有更好的方法來(lái)實(shí)現(xiàn)﹐歡迎各位交流﹗

  • 本文來(lái)源于網(wǎng)頁(yè)設(shè)計(jì)愛(ài)好者web開(kāi)發(fā)社區(qū)http://www.html.org.cn收集整理,歡迎訪問(wèn)。
  • 發(fā)表評(píng)論 共有條評(píng)論
    用戶(hù)名: 密碼:
    驗(yàn)證碼: 匿名發(fā)表
    主站蜘蛛池模板: 自治县| 新晃| 铁岭市| 兴文县| 大丰市| 龙山县| 三原县| 柳州市| 龙州县| 万宁市| 开封县| 芜湖市| 迁安市| 兴宁市| 西乌珠穆沁旗| 广德县| 疏勒县| 博爱县| 鹤岗市| 海阳市| 镇坪县| 鞍山市| 扶余县| 双峰县| 宁陕县| 普兰县| 天镇县| 拜泉县| 东丽区| 股票| 辽源市| 综艺| 景泰县| 阜宁县| 阳曲县| 中宁县| 宜丰县| 府谷县| 奉贤区| 绵阳市| 高碑店市|