`
菊花一斤
  • 浏览: 19160 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

asp.net c#开发中对excel的操作方法与实现代码

阅读更多
system.data;
using system.drawing;
using system.text;
using system.windows.forms;
using microsoft.office.interop.excel;
using system.data.sqlclient;
using system.data.oledb;
using system.reflection;
namespace excelprj
{
    /// <summary>
    /// excel 系统中的主文件excel.exe 本身就是 com 组件,通过在.net 项目中引用exel.exe 文件可以实现对excel 的功能控制
    /// 与com 组件相互操作是通过使用"包装类"(wrapper class) 和"代理"(proxy) 的机制实现的.包装类使.net 程序可以识别com 组件提供的接口,而代理类则是提供对 com 接口的访问
    /// </summary>
    public partial class form1 : form
    {
        public form1()
        {
            initializecomponent();
        }
        private void button3_click(object sender, eventargs e)
        {
            exporttasks(bind(), datagridview1);
        }
        //如果 excel 安装在计算机上,侧导出表格内容到 excel
        public void exporttasks(dataset tasksdata, datagridview tasksgridview)
        {
            // 定义要使用的excel 组件接口
            // 定义application 对象,此对象表示整个excel 程序
            microsoft.office.interop.excel.application excelapp = null ;
            // 定义workbook对象,此对象代表工作薄
            microsoft.office.interop.excel.workbook workbook;
            // 定义worksheet 对象,此对象表示execel 中的一张工作表
            microsoft.office.interop.excel.worksheet ws=null;
            //定义range对象,此对象代表单元格区域
            microsoft.office.interop.excel.range r;
            int row = 1; int cell = 1;
            try
            {
              //初始化 application 对象 excelapp
                excelapp = new microsoft.office.interop.excel.application();
                //在工作薄的第一个工作表上创建任务列表
                workbook = excelapp.workbooks.add(xlwbatemplate.xlwbatworksheet);
                ws =(worksheet)workbook.worksheets[1];
                // 命名工作表的名称为 "task management"
                ws.name = "task management";
                #region 创建表格的列头
                // 遍历数据表中的所有列
                foreach (datagridviewcolumn cs in tasksgridview.columns)
                {
                    // 假如并不想把主键也显示出来
                    if (cs.headertext != "编号")
                    {
                        ws.cells[row, cell] = cs.headertext;
                        r = (range)ws.cells[row, cell];
                        ws.get_range(r, r).horizontalalignment = microsoft.office.interop.excel.xlvalign.xlvaligncenter;
            
                        //此处用来设置列的样式
                        cell++;
                    }
                }
          
                // 创建行,把数据视图记录输出到对应的excel 单元格
                for (int i = 2; i < tasksdata.tables[0].rows.count; i++)
                {
                    for (int j = 1; j < tasksdata.tables[0].columns.count; j++)
                    {
                      
                        ws.cells[i, j] = tasksdata.tables[0].rows[i][j].tostring();
                      // r = (range)ws.cells[i,j];
                        range rg = (range)ws.get_range(ws.cells[i, j], ws.cells[i, j]);
                        rg.entirecolumn.columnwidth = 20;
                  //    rg.columns.autofit();
                        rg.numberformatlocal = "@";
                    }
                }
                #endregion
            }
            catch (exception ex)
            {
                messagebox.show(ex.tostring());
            }
          
            //显示 excel
            excelapp.visible = true;        
          
        }
        private void button5_click(object sender, eventargs e)
        {
            dataset ds = bind();
            datagridview1.datasource = ds.tables[0];
        }
        private dataset bind()
        {
            sqlconnection conn = new sqlconnection("server=.;database=testmanage;integrated security=sspi");
            sqldataadapter da = new sqldataadapter("select fnumber,fexamnum,fname,fsex,fjobadd,fcardid,fbirdate from stuinfo", conn);
            dataset ds = new dataset();
            da.fill(ds);
            return ds;
        }
        private void button2_click(object sender, eventargs e)
        {
            savefiledialog sfd = new savefiledialog();
            sfd.title = "请选择将导出的excel文件存放路径";
            sfd.filename = system.datetime.now.toshortdatestring() + "-学生信息";
            sfd.filter = "excel文档(*.xls)|*.xls";
            sfd.showdialog();
        
            if (sfd.filename != "")
            {
              
                microsoft.office.interop.excel.application excelapp = new microsoft.office.interop.excel.application();
                if (excelapp == null)
                {
                    messagebox.show("无法创建excel对象,可能您的机器未安装excel");
                }
                else
                {
                    microsoft.office.interop.excel.workbooks workbooks = excelapp.workbooks;
                    microsoft.office.interop.excel.workbook workbook = workbooks.add(xlwbatemplate.xlwbatworksheet);
                    microsoft.office.interop.excel.worksheet worksheet =(worksheet) workbook.worksheets[1];
                    dataset ds=bind();
                    for (int i = 1; i < ds.tables[0].rows.count; i++)
                    {
                        for (int j = 1; j < ds.tables[0].columns.count;j++ )
                        {
                            if (i == 1)
                            {
                                worksheet.cells[i, j] = datagridview1.columns[j].headertext;
                              
                            }
                            worksheet.cells[i+1, j] = ds.tables[0].rows[i][j].tostring();
                        }
                    }
                    //保存方式一:保存workbook
                      //workbook.saveas(@"f:cdata.xls",
                      // missing.value,missing.value,missing.value,missing.value,missing.value,
                      // microsoft.office.interop.excel.xlsaveasaccessmode.xlnochange,missing.value,missing.value,missing.value,
                      // missing.value,missing.value);
                      //保存方式二:保存worksheet
                      // worksheet.saveas(@"f:cdata2.xls",
                      // missing.value, missing.value, missing.value, missing.value,
                      // missing.value, missing.value, missing.value, missing.value, missing.value);
                    ////保存方式三
                    //workbook.saved = true;
                    //workbook.savecopyas(sfd.filename);
              
                    system.runtime.interoervices.marshal.releasecomobject(worksheet);
                    worksheet = null;
                    system.runtime.interopservices.marshal.releasecomobject(workbook);
                    workbook = null;
                    workbooks.close();
                    system.runtime.interopservices.marshal.releasecomobject(workbooks);
                    workbooks = null;
                    excelapp.quit();
                    system.runtime.interopservices.marshal.releasecomobject(excelapp);
                    excelapp = null;
                    messagebox.show("导出excel完成!");
                }
            }
        
        }
        private void button4_click(object sender, eventargs e)
        {
            string strexcelfilename = @"f:2007-07-16-学生信息.xls";
            string strsheetname = "sheet1";
            #region aspnet 操作excel  正确
            ////源的定义
            //string strconn = "provider=microsoft.jet.oledb.4.0;data source = " + strexcelfilename + ";extended properties ='excel 8.0;hdr=no;imex=1'";
            ////sql语句
            //string strexcel = "select * from  [" + strsheetname + "$]";
            ////定义存放的数据表
            //dataset ds = new dataset();
            ////连接数据源
            //oledbconnection conn = new oledbconnection(strconn);
            //conn.open();
            ////适配到数据源
            //oledbdataadapter adapter = new oledbdataadapter(strexcel, conn);
            //adapter.fill(ds,"res");
            //conn.close();
            //// 一般的情况下. excel  表格的第一行是列名
            //datagridview2.datasource = ds.tables["res"];
            #endregion
            #region com 组件读取复杂excel
            microsoft.office.interop.excel.application excelapp = null;
            microsoft.office.interop.excel.workbook workbook;
            microsoft.office.interop.excel.worksheet ws = null;
            try
            {
                excelapp = new microsoft.office.interop.excel.application();
                workbook = excelapp.workbooks.open(@"f:book1.xls", missing.value, missing.value, missing.value, missing.value, missing.value, missing.value, missing.value, missing.value, missing.value, missing.value, missing.value, missing.value, missing.value, missing.value);
                ws = (worksheet)workbook.worksheets[1];
                      
                //excel 默认为 256www.3ppt.com 列..
                messagebox.show(ws.cells.columns.count.tostring());
                excelapp.quit();
            }
            catch (exception ex)
            {
                throw ex;
            }
            #endregion
        }
    }
}


一些excel操作详解

一)   使用动态创建的方法

首先创建   excel   对象,使用comobj:
var   excelapp:   variant;
excelapp   :=   createoleobject(   'excel.application '   );

1)   显示当前窗口:
excelapp.visible   :=   true;

2)   更改   excel   标题栏:
excelapp.caption   :=   '应用程序调用   microsoft   excel ';

3)   添加新工作簿:
excelapp.workbooks.add;

4)   打开已存在的工作簿:
excelapp.workbooks.open(   'c:exceldemo.xls '   );

5)   设置第2个工作表为活动工作表:
excelapp.worksheets[2].activate; 
或 
excelapp.workssheets[   'sheet2 '   ].activate;

6)   给单元格赋值:
excelapp.cells[1,4].value   :=   '第一行第四列 ';

7)   设置指定列的宽度(单位:字符个数),以第一列为例:
excelapp.activesheet.columns[1].columnswidth   :=   5;

8)   设置指定行的高度(单位:磅)(1磅=0.035厘米),以第二行为例:
excelapp.activesheet.rows[2].rowheight   :=   1/0.035;   //   1厘米

9)   在第8行之前插入分页符:
excelapp.worksheets[1].rows[8].pagebreak   :=   1;

10)   在第8列之前删除分页符:
excelapp.activesheet.columns[4].pagebreak   :=   0;

11)   指定边框线宽度:
excelapp.activesheet.range[   'b3:d4 '   ].borders[2].weight   :=   3;
1-左   2-右   3-顶   4-底   5-斜(      )   6-斜(   /   )

12)   清除第一行第四列单元格公式:
excelapp.activesheet.cells[1,4].clearcontents;

13)   设置第一行字体属性:
excelapp.activesheet.rows[1].font.name   :=   '隶书 ';
excelapp.activesheet.rows[1].font.color   :=   clblue;
excelapp.activesheet.rows[1].font.bold   :=   true;
excelapp.activesheet.rows[1].font.underline   :=   true;

14)   进行页面设置:

a.页眉:
        excelapp.activesheet.pagesetup.centerheader   :=   '报表演示 ';
b.页脚:
        excelapp.activesheet.pagesetup.centerfooter   :=   '第&p页 ';
c.页眉到顶端边距2cm:
        excelapp.activesheet.pagesetup.headermargin   :=   2/0.035;
d.页脚到底端边距3cm:
        excelapp.activesheet.pagesetup.headermargin   :=   3/0.035;
e.顶边距2cm:
        excelapp.activesheet.pagesetup.topmargin   :=   2/0.035;
f.底边距2cm:
        excelapp.activesheet.pagesetup.bottommargin   :=   2/0.035;
g.左边距2cm:
        excelapp.activesheet.pagesetup.leftmargin   :=   2/0.035;
h.右边距2cm:
        excelapp.activesheet.pagesetup.rightmargin   :=   2/0.035;
i.页面水平居中:
        excelapp.activesheet.pagesetup.centerhorizontally   :=   2/0.035;
j.页面垂直居中:
        excelapp.activesheet.pagesetup.centervertically   :=   2/0.035;
k.打印单元格网线:
        excelapp.activesheet.pagesetup.printgridlines   :=   true;

15)   拷贝操作:

a.拷贝整个工作表:
        excelapp.activesheet.used.range.copy;
b.拷贝指定区域:
        excelapp.activesheet.range[   'a1:e2 '   ].copy;
c.从a1位置开始粘贴:
        excelapp.activesheet.range.[   'a1 '   ].pastespecial;
d.从文件尾部开始粘贴:
        excelapp.activesheet.range.pastespecial;

16)   插入一行或一列:
a.   excelapp.activesheet.rows[2].insert;
b.   excelapp.activesheet.columns[1].insert;

17)   删除一行或一列:
a.   excelapp.activesheet.rows[2].delete;
b.   excelapp.activesheet.columns[1].delete;

18)   打印预览工作表:
excelapp.activesheet.printpreview;

19)   打印输出工作表:
excelapp.activesheet.printout;

20)   工作表保存:
if   not   excelapp.activeworkbook.saved   then
      excelapp.activesheet.printpreview;

21)   工作表另存为:
excelapp.saveas(   'c:exceldemo1.xls '   );

22)   放弃存盘:
excelapp.activeworkbook.saved   :=   true;

23)   关闭工作簿:
excelapp.workbooks.close;

24)   退出   excel:
excelapp.quit;

(二)   使用delphi   控件方法
在form中分别放入excelapplication,   excelworkbook和excelworksheet。 

1)   打开excel 
excelapplication1.connect;

2)   显示当前窗口:
excelapplication1.visible[0]:=true;

3)   更改   excel   标题栏:
excelapplication1.caption   :=   '应用程序调用   microsoft   excel ';

4)   添加新工作簿:
excelworkbook1.connectto(excelapplication1.workbooks.add(emptyparam,0));
      5)   添加新工作表:
var   temp_worksheet:   _worksheet;
begin
temp_worksheet:=excelworkbook1.
worksheets.add(emptyparam,emptyparam,emptyparam,emptyparam,0)   as   _worksheet;
excelworksheet1.connectto(temp_worksheet);
end;
      6)   打开已存在的工作簿:
excelapplication1.workbooks.open   (c:a.xls
emptyparam,emptyparam,emptyparam,emptyparam,
emptyparam,emptyparam,emptyparam,emptyparam,
        emptyparam,emptyparam,emptyparam,emptyparam,0)

7)   设置第2个工作表为活动工作表:
excelapplication1.worksheets[2].activate;   或
excelapplication1.workssheets[   'sheet2 '   ].activate;

8)   给单元格赋值:
excelapplication1.cells[1,4].value   :=   '第一行第四列 ';

9)   设置指定列的宽度(单位:字符个数),以第一列为例:
excelapplication1.activesheet.columns[1].columnswidth   :=   5;

10)   设置指定行的高度(单位:磅)(1磅=0.035厘米),以第二行为例:
excelapplication1.activesheet.rows[2].rowheight   :=   1/0.035;   //   1厘米

11)   在第8行之前插入分页符:
excelapplication1.worksheets[1].rows[8].pagebreak   :=   1;

12)   在第8列之前删除分页符:
excelapplication1.activesheet.columns[4].pagebreak   :=   0;

13)   指定边框线宽度:
excelapplication1.activesheet.range[   'b3:d4 '   ].borders[2].weight   :=   3;
1-左   2-右   3-顶   4-底   5-斜(      )   6-斜(   /   )

14)   清除第一行第四列单元格公式:
excelapplication1.activesheet.cells[1,4].clearcontents;

15)   设置第一行字体属性:
excelapplication1.activesheet.rows[1].font.name   :=   '隶书 ';
excelapplication1.activesheet.rows[1].font.color   :=   clblue;
excelapplication1.activesheet.rows[1].font.bold   :=   true;
excelapplication1.activesheet.rows[1].font.underline   :=   true;

16)   进行页面设置:
  a.页眉:
        excelapplication1.activesheet.pagesetup.centerheader   :=   '报表演示 ';
b.页脚:
        excelapplication1.activesheet.pagesetup.centerfooter   :=   '第&p页 ';
c.页眉到顶端边距2cm:
        excelapplication1.activesheet.pagesetup.headermargin   :=   2/0.035;
d.页脚到底端边距3cm:
        excelapplication1.activesheet.pagesetup.headermargin   :=   3/0.035;
e.顶边距2cm:
        excelapplication1.activesheet.pagesetup.topmargin   :=   2/0.035;
f.底边距2cm:
        excelapplication1.activesheet.pagesetup.bottommargin   :=   2/0.035;
g.左边距2cm:
        excelapplication1.activesheet.pagesetup.leftmargin   :=   2/0.035;
h.右边距2cm:
        excelapplication1.activesheet.pagesetup.rightmargin   :=   2/0.035;
i.页面水平居中:
        excelapplication1.activesheet.pagesetup.centerhorizontally   :=   2/0.035;
j.页面垂直居中:
        excelapplication1.activesheet.pagesetup.centervertically   :=   2/0.035;
k.打印单元格网线:
        excelapplication1.activesheet.pagesetup.printgridlines   :=   true;

17)   拷贝操作:

a.拷贝整个工作表:
        excelapplication1.activesheet.used.range.copy;

b.拷贝指定区域:
        excelapplication1.activesheet.range[   'a1:e2 '   ].copy;

c.从a1位置开始粘贴:
        excelapplication1.activesheet.range.[   'a1 '   ].pastespecial;

d.从文件尾部开始粘贴:
        excelapplication1.activesheet.range.pastespecial;

18)   插入一行或一列:
a.   excelapplication1.activesheet.rows[2].insert;
b.   excelapplication1.activesheet.columns[1].insert;

19)   删除一行或一列:
a.   excelapplication1.activesheet.rows[2].delete;
b.   excelapplication1.activesheet.columns[1].delete;

20)   打印预览工作表:
excelapplication1.activesheet.printpreview;

21)   打印输出工作表:
excelapplication1.activesheet.printout;

22)   工作表保存:
if   not   excelapplication1.activeworkbook.saved   then
      excelapplication1.activesheet.printpreview;

23)   工作表另存为:
excelapplication1.saveas(   'c:exceldemo1.xls '   );

24)   放弃存盘:
excelapplication1.activeworkbook.saved   :=   true;

25)   关闭工作簿:
excelapplication1.workbooks.close;

26)   退出   excel:
excelapplication1.quit;
excelapplication1.disconnect;

(三)   使用delphi   控制excle二维图
在form中分别放入excelapplication,   excelworkbook和excelworksheet
var   asheet1,achart,   range:variant;

1)选择当第一个工作薄第一个工作表
asheet1:=excelapplication1.workbooks[1].worksheets[1];

2)增加一个二维图
achart:=asheet1.chartobjects.add(100,100,200,200);

3)选择二维图的形态
achart.chart.charttype:=4;

4)给二维图赋值
series:=achart.chart.seriescollection;
range:=sheet1!r2c3:r3c9;
series.add(range,true);
      5)加上二维图的标题
achart.chart.hastitle:=true;
achart.chart.charttitle.characters.text:=’   excle二维图’ 

6)改变二维图的标题字体大小
achart.chart.charttitle.font.size:=6;
分享到:
评论

相关推荐

    ASP.NET(c#) EXCEL操作类

    下载就能用 用vs2005开发的,所有操作EXCEL的方法基本都有了

    ASP.NET学习大全

    ASP.NET对IIS中的虚拟目录进行操作.txt asp.net里导出excel表方法汇总.txt ASP.NET文件上传程序的源代码.txt Asp.Net中文本换行.txt ASPNET中实现在线用户检测(使用后台守护线程).txt C# 读取计算机CPU,HDD信息....

    ASP.NET 3.5开发大全 (中文 PDF 完整书签 非扫描)

    第5章:详细的介绍了ASP.NET应用程序中提供的控件,控件为开发人员提供了高效的应用程序开发方法,开发人员无需专业的知识就能够实现复杂的应用操作。 第6章:着重讲解了ASP.NET高级控件中的登陆控件的使用,并讲解...

    asp.net学习大全(超全面的资料整合)

    ASP.NET对IIS中的虚拟目录进行操作.txt asp.net里导出excel表方法汇总.txt ASP.NET文件上传程序的源代码.txt Asp.Net中文本换行.txt ASPNET中实现在线用户检测(使用后台守护线程).txt C# 读取计算机CPU,HDD信息....

    asp.net学习积累的代码段

    asp.net中如何用c#实现弹出式的交互对话窗口.txt cookie登陆判断.txt CSharp基本书写规范.doc CustomValidator可以编程控制.txt html encode.txt html页面中数据绑定.txt html语法大全.txt listbox相互传值.txt MD5....

    asp.net知识库

    ASP.NET 2.0 正式版中无刷新页面的开发(示例代码的补充) ASP.NET2.0中themes、Skins轻松实现网站换肤! ASP.NET 2.0 中的代码隐藏和编译 ASP.NET 2.0 Language Swithcer and Theme Swicher 多语言转换和多样式主题...

    ASP.NET 3.5 开发大全

    1.1.2 ASP.NET与ASP 1.1.3 ASP.NET开发工具 1.1.4 ASP.NET客户端 1.1.5 ASP.NET 3.5新增控件 1.1.6 ASP.NET 3.5 AJAX 1.2 .NET应用程序需框架 1.2.1 什么是.NET应用程序框架 1.2.2 公共语言运行时(CLR) 1.2.3 .NET...

    ASP.NET 3.5 开发大全 压缩包2

    第5章:详细的介绍了ASP.NET应用程序中提供的控件,控件为开发人员提供了高效的应用程序开发方法,开发人员无需专业的知识就能够实现复杂的应用操作。 第6章:着重讲解了ASP.NET高级控件中的登陆控件的使用,并讲解...

    ASP.NET 3.5 开发大全 压缩包1

    第5章:详细的介绍了ASP.NET应用程序中提供的控件,控件为开发人员提供了高效的应用程序开发方法,开发人员无需专业的知识就能够实现复杂的应用操作。 第6章:着重讲解了ASP.NET高级控件中的登陆控件的使用,并讲解...

    ASP.NET 3.5 开发大全word课件

    1.1.2 ASP.NET与ASP 1.1.3 ASP.NET开发工具 1.1.4 ASP.NET客户端 1.1.5 ASP.NET 3.5新增控件 1.1.6 ASP.NET 3.5 AJAX 1.2 .NET应用程序需框架 1.2.1 什么是.NET应用程序框架 1.2.2 公共语言运行时(CLR) 1.2.3 .NET...

    ASP.NET开发大全

    第5章:详细的介绍了ASP.NET应用程序中提供的控件,控件为开发人员提供了高效的应用程序开发方法,开发人员无需专业的知识就能够实现复杂的应用操作。 第6章:着重讲解了ASP.NET高级控件中的登陆控件的使用,并讲解...

    ASP.NET 3.5 开发大全1-5

    1.1.2 ASP.NET与ASP 1.1.3 ASP.NET开发工具 1.1.4 ASP.NET客户端 1.1.5 ASP.NET 3.5新增控件 1.1.6 ASP.NET 3.5 AJAX 1.2 .NET应用程序需框架 1.2.1 什么是.NET应用程序框架 1.2.2 公共语言运行时(CLR) 1.2.3 .NET...

    ASP.NET编程百例 PDF扫描版 附源代码(vb.net)

    ASP NET是微软.NET战略中的一个重要成员 除了可以使用Visual C# VB.NET VisualC++ NET JScript.NET等语言编写外 还可以使用第三方的.NET接口 如COBOL.NET Perl.NET等 进行编写 本书通过100个精彩实例 由浅入深...

    ASP.NET 3.5 开发大全 (上)

    第5章:详细的介绍了ASP.NET应用程序中提供的控件,控件为开发人员提供了高效的应用程序开发方法,开发人员无需专业的知识就能够实现复杂的应用操作。 第6章:着重讲解了ASP.NET高级控件中的登陆控件的使用,并讲解...

    ASP.NET 3.5 开发大全11-15

    1.1.2 ASP.NET与ASP 1.1.3 ASP.NET开发工具 1.1.4 ASP.NET客户端 1.1.5 ASP.NET 3.5新增控件 1.1.6 ASP.NET 3.5 AJAX 1.2 .NET应用程序需框架 1.2.1 什么是.NET应用程序框架 1.2.2 公共语言运行时(CLR) 1.2.3 .NET...

    ASP.NET编程百例(PDF)

    本书通过100个精彩实例,由浅入深介绍了ASP.NET网络程序设计的编程方法与实用技巧。为了方便读者学习与深入理解ASP.NET,本书将这100 个实例分为4篇,即基础编程实例、中级编程实例、高级编程实例与混合编程实例。在...

    ASP升级.net资料大全(c#入门 语言规范 源码教程 学习笔记 技术资料 面试题 asp与.net代码生成器)

    如何用C#在Excel中生成图表?.txt 如何用程序实现键盘和鼠标的模拟?.txt 如何与资源管理器互动剪切、拷贝、粘贴文件.txt 深入理解C#编程中的组件-事件-委托.txt 生成透明的GIF图片 .txt 生成压缩图片时的2种...

    .net mvc HTML导出EXCEL

    NPOI可以在没装OFFICE的情况下操作EXCEL,WORD等,也不用在程序中引用微软的office组件。另外我加了在MVC中把HTML TABLE导出EXCEL的方法。...最近会有更多的MVC对EXCEL的操作,打算会把方法慢慢加进去。 环境4.0+

Global site tag (gtag.js) - Google Analytics