RDLC报表控件使用手册

19 篇文章 0 订阅

 

2011-10-10 09:29:00|  分类: .Net技术 |  标签: |字号大中小订阅

RDLC使用手册_为什么要使用RDLC报表

2009-04-07 19:54 1195人阅读 评论(0) 收藏 举报

       RDL(Report Definition Language)是报表定义语言的缩写。那么微软为何后来又提出RDLC,即在RDL基础上加C(C代表Client-side processing),这是微软基于RDL在.NET上继续完善的结果,同时也凸显了RDLC的客户端处理能力。由于微软MSDN和网络上对于RDLC的介绍比较少(MSDN只是一些控件简单介绍,至于其它网络上除了蜡人张的博文http://waxdoll.cnblogs.com/比较完整、系统外,就没有更有价值的参考资料),本人就冒充大侠,介绍一下本人对RDLC的认识,主要有下述几方面内容:

1)  为什么要使用RDLC报表;

2)  RDLC简单Demo;

3)  RDLC规范简介;

4)  RDLC常用控件介绍;

5)  RDLC参数介绍;

6)  RDLC钻取功能实现;

7)  RDLC自定义工具条;

8)  RDLC设计器实现;

      

1、  为什么要使用RDLC报表

为什么要使用RDLC报表,蜡人张在其博文“RDLC报表(一)”中已经很好的阐述了这一点,下述内容转自其博文http://waxdoll.cnblogs.com/archive/2006/02/25/337713.html

VS .NET开发中,用什么进行报表设计?可能的回答是Crystal Report,自.NET“紧密”集成Crystal Report后,这可能是开发人员比较单一的选择。但是,这种集成似乎并不非常紧密,网络上充斥着关于使用Crystal Report的各种抱怨,太复杂也许是其最为令人诟病的地方,自定义性比较差也不能为程序员们所容忍。

当然,必须承认Crystal Report的功能还是非常强大的,被Business Object收购以后,商业的成分也在逐渐增加,也形成了一定规模的用户群。

Visual Studio .NET进入2005版本以后,Crystal Report与IDE的结合更“紧密”了,至少我们看不到那个讨厌的注册窗口了。但是,Microsoft似乎并不容忍在自己的超级工具中竟然没有报表工具,于是Report Viewer Control出现了,我把它的报表称为RDLC报表。

在VS .NET 2005之前,SQL Server Reporting Services中已经提供了一种被称为报表定义语言(Report Definition Language, RDL)的语言;在VS .NET 2005中,Microsoft提供了针对这种报表的设计器,并提供了在WinForm和WebForm中使用这种报表的能力。Microsoft将这种报表的后缀定为RDLC,RDL仍然是Report Definition Language的缩写,那么C代表什么呢?C代表Client-side processing,凸显了它的客户端处理能力。

这种报表的易用性和可定制性让我们完全有理由放弃Crystal Report,让我们来看看它的强大功能吧:

1)    简单易用的控件,特别是Table控件,非常方便字段在报表上的排列;

2)    灵活的可定制性,用XML来描述一个报表相关的一切,不用说了吧;

3)    高度可编程性,在你的项目中,甚至不需要有一个报表文件,通过代码就可以实现报表生成、预览和打印等一系列操作;

4)    支持DrillThrough数据钻取功能;

5)    导出的Excel文件格式非常完美,而且并不需要安装Excel;

6)    数据源处理极其方便,开发人员可以自己接管数据库连接、取数,然后将数据结果赋值给RDLC的数据集即可。

7)    展示和数据分离,程序员更是可以编写一个RDLC设计器交有用户使用,这样用户就可以自行设计RDLC报表格式,程序员只负责定制数据接口即可。

RDLC使用手册_RDLC简单Demo

2009-04-07 22:29 791人阅读 评论(0) 收藏 举报

本文所有RDLC例子都是基于VS2005 C#,所有ReportViewer的处理模式都是Local模式。本报表Demo显示上文中提到的RDLC手册各节内容,下述为Demo的详细steps。

1)    新建项目,选择Windows应用程序项目类型,输入工程名称RDLCDev;

2)    修改Form1窗体名称为FrmRdlcUserGuide,在工具箱—>数据Tab选项卡中选择ReportViewer控件,将其拖入到FrmRdlcUserGuide,默认命名为reportViewer1,调整ReportViewer控件的大小和布局;

3)    在解决方案资源管理器中选择RDLCDev工程,鼠标右击RDLCDev工程,添加新建项,在添加新项模板中选择“报表”,取名为rdlcuserguide.rdlc,单击添加按钮,然后在解决方案资源管理器中RDLCDev工程下会增加一个rdlcuderguide.rdlc文件,并且会自动打开RDLC设计器;

4)    在RDLC设计器中添加11个TextBox控件,1个作为标题,其余10个作为RDLC使用手册具体内容,对每个TextBox控件进行TextAlign、Color、BorderStyle、Font和TextDecoration等相关属性设置,设计完毕之后,大致如下图所示。

RDLC使用手册设计图

    4.2) 回到FrmRdlcUserGuide,选中reportViewer1,点击用上角的小三角形,选择报表rdlcuderguide.rdlc。

         或者,在5),将 this.reportViewer1.LocalReport.ReportPath = "rdlcuserguide.rdlc"; 改为 this.reportViewer1.LocalReport.ReportEmbeddedResource = "RDLCDev.rdlcuserguide.rdlc";

           (原文遗漏)

5)    在FrmRdlcUserGuide窗体Load事件中添加下述代码

        private void Form1_Load(object sender, EventArgs e)

        {

            this.reportViewer1.ProcessingMode = Microsoft.Reporting.WinForms.ProcessingMode.Local;

            this.reportViewer1.LocalReport.ReportPath = "rdlcuserguide.rdlc";

            this.reportViewer1.RefreshReport();

    }

6)    编译、运行RDLCDev工程,运行结果大致如下图所示。

RDLC使用手册运行图


RDLC使用手册_RDLC规范简介

2009-04-08 09:18 440人阅读 评论(0) 收藏 举报

微软的RDLC协议规范定义了什么是报表?描绘了RDLC的报表定义关系图,报表定义的XML描述,元素定义,表达式等内容。

1)    协议规范对报表的定义

A report is a combination of three kinds of information:

·Data or information on how to obtain the data (queries) as well as the structure of the data.

·Layout or formatting information that describes how the data is presented.

·Properties that the report such as author, parameters, images within the report, etc.

2)    报表定义关系图,6张关系图是RDLC协议规范的核心内容,了解掌握了这些关系图基本上也就掌握了RDLC报表。

Firuge1 Report

Firuge2 Report Items

Firuge3 Data Regions


协议规范中还有另外3张Figure:Table、Matrix和Chart,在下节RDLC常用控件介绍中附上。

3)    协议规范还介绍了RDLC报表常用的表达式、元素定义等内容,具体请大家参看协议规范。


RDLC使用手册_RDLC常用控件介绍

http://blog.csdn.net/chuangxin/article/details/4058686
2009-04-09 09:53 4243人阅读 评论(2) 收藏 举报

RDLC设计工具箱上总共有9种控件:文本框(TextBox)、折线(Line)、表(Table)、矩阵(Matrix)、矩形(Rectangle)、列表(List)、子报表(SubReport)、图表控件(Chart)、图像控件(Image)。下图ctlsDemo.rdlc设计器所示为所有控件的设计演示。

ctlsDemo

1)    由于表格控件、矩阵控件、列表控件和图表控件必须填充数据集,因此把所有控件布局完毕之后,创建一个数据集。解决方案资源管理器中,选中RDLCDev工程,右击添加新建项,在新建项类型模板里选择“数据集”,取名“ctlsDemo.xsd”,单击“添加”。

ctlsDemo.xsd添加完毕之后,在解决方案资源管理器中会增加一个ctlsDemo.xsd文件,并前VS IDE会自动打开ctlsDemo.xsd设计页面。在设计页面中右击,添加Datatable,将其命名为vSales,为vSales表添加列,列信息如下:

    ProdCat           System.String

    SubCat            System.String

    OrderYear        System.Int32

    OrderQtr         System.String

        Sales              System.Double

2)    文本框控件、折线控件、矩形控件使用相对简单,这里不细说;

3)    Image控件,现在RDLC设计器模式下,选择“报表”菜单,“嵌入图像”,在“嵌入图像”对话框中,载入一个本地图像文件即可。然后设置Image控件的Source属性为Embedded,设置Value属性为刚才处理的嵌入图像即可。当然还有别的方式可以显示图像,大家可以Google一下,关键字为RDLC、嵌入图像;

4)    图表控件,使用图表控件的一个关键是要设置好图表属性页面中的数据TAB页相关内容。主要有值、类别组和序列组定义,大家可以参考Demo;

5)    表格控件、矩阵控件和子报表控件,在后续内容中会详细介绍;

4.1 表格控件使用介绍

1)    Table控件是RDLC报表显示数据的一个核心控件,关于Table控件,在微软提供的RDLC规范里有详细的介绍,其大致内容可以用下述的一张类UML图来表示;

ctlTableDemo_0

2)    新建报表文件,命名为ctlTableDemo.rdlc;

3)    在ctlTableDemo.rdlc设计器中,拖入Table控件,默认情况下是3行3列,其中第1行为表头行(我们理解为列标题行),第二行为详细信息行(我们理解为报表内容展示区域),第三行为表尾行(我们理解为汇总区域)。可以整行选中,然后右击鼠标添加行或者删除行,也可以整列选中,然后右击鼠标添加或者删除列。上文中提到的数据集合有5个字段,因此需要5列来显示,为此需要增加两列。

4)    在数据源窗口中(如果没有显示的话,选择【数据】菜单下的【显示数据源】即可)选择上文中创建的ctlsDemo.xsd数据集,将ProdCat、SubCat、OrderYear  、OrderQtr和Sales分别拖入到Table控件的详细信息行的不同列中去。

5)    设置标题行文字显示都居中,Sales的内容显示右对齐,ProdCat、SubCat、OrderYear、OrderQtr和Sales文本框的字体颜色全部设置成Blue,Sales文本框由于显示的内容为销售额,因此需设置数字显示格式,小数位数。鼠标右击Sales文本框,选择【属性】,在文本框属性窗口中,选择格式Tab页,在格式代码处,选择数字1,234.00格式即可,选择完毕之后该文本框的数字就以逗号千分位作为分割符,保留2位小数显示,效果如下图所示。

ctlTableDemo_1

6)    插入一个组实现分组统计功能。选中整行,鼠标右击,选择【插入组】,弹出分组和排序属性对话框,设置分组名称、分组方式、是否显示组头或者组尾等属性即可,本文分组设置如下:

·分组名称:table1_Group1

·分组表达式:=Fields!ProdCat.Value;=Fields!SubCat.Value;=Fields!OrderYear.Value,实现产品年度销售额汇总统计功能。

·不显示组头、显示组尾(至于组头、组尾是个什么样的东西,大家只要动手试一下就一目了然了)

·在textbox15中输入汉字“合计”,在textbox16文本框中输入合计表达式=Sum(CDbl(Fields!Sales.Value)),设置完之后效果如下图所示。

ctlTableDemo_2

7)    新建窗体FrmCtlTableDemo,然后在该窗体上添加ReportViewer控件,在窗体FrmCtlTableDemo代码窗口里输入以下代码:

        private void FrmCtlTableDemo_Load(object sender, EventArgs e)

        {

            this.reportViewer1.ProcessingMode = Microsoft.Reporting.WinForms.ProcessingMode.Local;

            this.reportViewer1.LocalReport.ReportPath = @"rdlc/ctlTableDemo.rdlc";

            //

            reportViewer1.LocalReport.DataSources.Add(new ReportDataSource("ctlsDemo_vSales", LoadData()));

            //

            this.reportViewer1.RefreshReport();

        }

        private DataTable LoadData()

        {

            DataSet dataSet = new DataSet();

            dataSet.ReadXml(@"data/ctlsDemo.xml");

            return dataSet.Tables[0];

        }

8)    运行效果如下图所示

ctlTableDemo_3

    因为不知道如何在博文中上传附件,相关资料已经上传到CSDN,大家可以搜索“RDLC使用手册”下载。


RDLC使用手册_RDLC常用控件介绍(Matrix)

2009-04-09 15:40 1818人阅读 评论(0) 收藏 举报

4.2 矩阵控件使用介绍

1)    矩阵控件主要用于显示CrossTable之类的报表,因此其列数可以是Static的,也可以是Dynamic并且Can grow的,关于矩阵控件,在RDLC协议规范里也有介绍,其大致内容可以用下图表示。

ctlTableDemo_4

2)    新建报表文件,命名为ctlMatrixDemo.rdlc;

3)    在ctlMatrixDemo.rdlc设计器中,拖入Matrix控件,默认情况下是2行2列,左上角单元格为空白区域(通常用来显示报表摘要信息如产品/年度等),右上单元格显示为“列”,单击此处可以增加列分组,左下单元格显示为“行”,单击此处可以添加行分组,右下单元格显示为“数据”,单击此处可以添加静态行、静态列。

4)    在矩阵左上角单元格空白区域拖入矩形控件,然后在该矩形控件中拖入一个折线控件和两个文本框控件,折线当做矩形的对角线,两个文本框内容为产品和年度分布在折线两侧。

5)    增加两个行分组,分别为matrix1_RowGroup1和matrix1_RowGroup2,matrix1_RowGroup1的表达式为=Fields!ProdCat.Value,matrix1_RowGroup2的表达式为=Fields!SubCat.Value。

6)    增加两个列分组,分别为matrix1_ColumnGroup1何matrix1_ColumnGroup2,matrix1_ColumnGroup1的表达式为=Fields!OrderYear.Value,matrix1_ColumnGroup2的表达式为=Fields!OrderQtr.Value。

7)    在“数据”单元格中编辑表达式=Sum(CDbl(Fields!Sales.Value))

8)    设计完之后,效果如下图所示;

9)    新建窗体FrmCtlMatrixDemo,然后在该窗体上添加ReportViewer控件,在窗体FrmCtlMatrixDemo代码窗口里输入以下代码:

        private void FrmCtlMatrixDemo_Load(object sender, EventArgs e)

        {

            this.reportViewer1.ProcessingMode = Microsoft.Reporting.WinForms.ProcessingMode.Local;

            this.reportViewer1.LocalReport.ReportPath = @"rdlc/ctlMatrixDemo.rdlc";

            //

            reportViewer1.LocalReport.DataSources.Add(new ReportDataSource("ctlsDemo_vSales", LoadData()));

            //

            this.reportViewer1.RefreshReport();

        }

        private DataTable LoadData()

        {

            DataSet dataSet = new DataSet();

            dataSet.ReadXml(@"data/ctlsDemo.xml");

            return dataSet.Tables[0];

        }

10)    运行效果如下图所示

ctlTableDemo_6

       因为不知道如何在博文中上传附件,相关资料已经上传到CSDN,大家可以搜索“RDLC使用手册”下载。

RDLC使用手册_RDLC常用控件介绍(SubReport)

2009-04-09 15:45 1022人阅读 评论(1) 收藏 举报

4.3 子报表控件使用介绍

       子报表作为主报表的一个补充,在显示明细内容的时候比较管用,本文从如何填充子报表数据,如何传递参数两方面介绍子报表如何使用。

1)    新建RDLC报表,命名为subReportDemo.rdlc;

2)    在subReportDemo.rdlc设计器中,拖入一个文本框和一个子报表控件;

3)    设置文本框的文本显示为“子报表控件演示”;

4)    设置子报表控件属性,主要设置其“子报表”的值,这里设为上文讲到的ctlTableDemo报表,效果如下图所示;

ctlTableDemo_7

5)    新建一个窗体FrmSubReportDemo,添加如下代码

        private void FrmCtlSubReportDemo_Load(object sender, EventArgs e)

        {

            reportViewer1.LocalReport.SubreportProcessing += new SubreportProcessingEventHandler(LocalReport_SubreportProcessing);

            //

            this.reportViewer1.ProcessingMode = Microsoft.Reporting.WinForms.ProcessingMode.Local;

            this.reportViewer1.LocalReport.ReportPath = @"rdlc/subReportDemo.rdlc";

            //

            reportViewer1.LocalReport.DataSources.Add(new ReportDataSource("ctlsDemo_vSales", LoadData()));

            //

            this.reportViewer1.RefreshReport();

        }

        void LocalReport_SubreportProcessing(object sender, SubreportProcessingEventArgs e)

        {

            e.DataSources.Add(new ReportDataSource("ctlsDemo_vSales", LoadData()));

        }

        private DataTable LoadData()

        {

            DataSet dataSet = new DataSet();

            dataSet.ReadXml(@"data/ctlsDemo.xml");

            return dataSet.Tables[0];

}

这里,区别于其它显示RDLC报表程序的代码就是对子报表的处理,本文在FrmCtlSubReportDemo_Load事件里添加了一个对子报表事件的处理:reportViewer1.LocalReport.SubreportProcessing += new SubreportProcessingEventHandler(LocalReport_SubreportProcessing);

6)    关于子报表参数如何传递,在RDLC报表参数介绍一文中介绍;

7)    运行效果如下图所示

ctlTableDemo_8

    因为不知道如何在博文中上传附件,相关资料已经上传到CSDN,大家可以搜索“RDLC使用手册”下载。

RDLC使用手册_RDLC参数介绍

2009-04-09 21:09 904人阅读 评论(0) 收藏 举报

5、  RDLC参数介绍

5.1 报表参数处理

1)    修改上文提高的ctlTableDemo.rdlc报表为例,该报表用于显示产品每季度的销售额。修改该报表,给该报表添加一个参数prod_cat,用于过滤只显示产品系统为参数prod_cat值对应的产品季度销售额。

2)    在ctlTableDemo.rdlc设计器中,选择【报表】菜单,【报表参数】菜单,在报表参数界面中,添加一个报表参数取名为“prod_cat_sub”,类型为String,提示信息为“输入产品系列名称”,允许空白值;

3)    选中table1控件,鼠标右击,选择【属性】,选中【筛选器】Tab页,在筛选器列表中添加:=Fields!ProdCat.Value = =Parameters!prod_cat_sub.Value;

4)    在FrmCtlTableDemo窗体中添加下述代码,用红色表示的2行代码:

        private void FrmCtlTableDemo_Load(object sender, EventArgs e)

        {

            this.reportViewer1.ProcessingMode = Microsoft.Reporting.WinForms.ProcessingMode.Local;

            this.reportViewer1.LocalReport.ReportPath = @"rdlc/ctlTableDemo.rdlc";

            //

            reportViewer1.LocalReport.DataSources.Add(new ReportDataSource("ctlsDemo_vSales", LoadData()));

            //

ReportParameter p = new ReportParameter("prod_cat_sub", "Component");

reportViewer1.LocalReport.SetParameters(new ReportParameter[] { p });

            //

            this.reportViewer1.RefreshReport();

        }

5)    运行结果如下图所示,显示Component产品系列的产品季度销售额;

51_1

RDLC使用手册_RDLC钻取功能实现

2009-04-11 11:19 3558人阅读 评论(1) 收藏 举报

本Demo在主报表会显示一个部门列表(部门ID、部门名称等),然后通过钻取功能可实现特定部门的员工信息展示,下述为具体操作步骤。

1)    准备好两个数据源,本文为2个xml文件(departments.xml和Employees.xml),这两个文件放在项目的Data文件夹下,特别注意的是这两个文件的【复制到输出目录】属性要选择“始终复制”,负责工程编译的时候不会将这两个文件生成到bin目录下。

2)    新建报表,命名为“drillthrough.rdlc”;新建一个数据集,命名为“departments”,在该数据集中添加一个Datatable,表结构如下:

DepartmentID               Int32

Name                           String

GroupName                  String

ModifiedDate                DateTime

rowguid                       String

3)    在drillthrough.rdlc设计器中,拖入一个文本框和一个Table控件。文本框显示内容为“Drill Through Demo”,在Table控件中拖入DepartmentID和Name两列。

4)    添加Name列的导航、钻取功能。右击Name文本框,选择【属性】,选择【导航】Tab页,在“超级链接”处选择“跳至报表”(该报表为显示钻取实现的目标报表,假设为drillthroughDetail.rdlc,且已经存在,因此在实践时,可以再本操作之前,先创建一个drillthroughDetail.rdlc报表),设置“跳至报表”为drillthroughDetail,点击【参数】按钮,会弹出参数设置对话框。在对话框中,添加一个参数,名称为DepartmentID,值为=Fields!DepartmentID.Value;

5)    设计drillthroughDetail.rdlc报表,先新建一个该报表对应的数据集,名称为employees,添加一个DataTable,名称为employee,employee表部分内容如下:

  <table>

    <EmployeeID>1</EmployeeID>

    <FirstName>Terri</FirstName>

    <AddressID>1</AddressID>

    <ShiftID>1</ShiftID>

    <LastName>Duffy</LastName>

    <MiddleName>Lee</MiddleName>

    <NameStyle>false</NameStyle>

    <NationalIDNumber>245797967</NationalIDNumber>

    <Title>VP Engineering</Title>

    <HireDate>1998-03-03T00:00:00.0000000-08:00</HireDate>

    <BirthDate>1961-09-01T00:00:00.0000000-07:00</BirthDate>

    <LoginID>adventure-works/Terri</LoginID>

    <EmailAddress>Terri@adventure-works.com</EmailAddress>

    <DepartmentID>1</DepartmentID>

    <MaritalStatus>S</MaritalStatus>

    <EmergencyContactName>Tad Orman</EmergencyContactName>

    <EmergencyContactPhone>586-883-8338</EmergencyContactPhone>

    <SalariedFlag>true</SalariedFlag>

    <Gender>F</Gender>

    <ManagerID>300</ManagerID>

    <PayFrequency>2</PayFrequency>

    <BaseRate>63.4615</BaseRate>

    <VacationHours>1</VacationHours>

    <SickLeaveHours>20</SickLeaveHours>

    <SalesPersonFlag>false</SalesPersonFlag>

    <CurrentFlag>true</CurrentFlag>

    <ModifiedDate>2003-01-15T19:26:13.9000000-08:00</ModifiedDate>

    <rowguid>1b76e019-0d60-4d48-b405-c9144fb9b3ab</rowguid>

  </table>

        从表的内容中,我们可以大致判断出其结构是什么样的啦。

6)    拖入一个文本框控件和表格控件到drillthroughDetail.rdlc报表设计器中,并从employees数据集中拖入相应字段到表格控件中,设置完毕之后,效果如下图所示。

6_1

7)    设置drillthroughDetail.rdlc报表的参数:参数名称为DepartmentID,类型为Integer;

8)    设置drillthroughDetail.rdlc报表表格控件的筛选器,表达式为=CInt(Fields!DepartmentID.Value),运算符为=,值为=Parameters!DepartmentID.Value。

9)    新建一个窗体FrmDrillThrough,添加一个ReportViewer控件,在代码编辑窗口,添加下述代码:

        private void FrmDrillThrough_Load(object sender, EventArgs e)

        {

            reportViewer1.ProcessingMode = ProcessingMode.Local;

            reportViewer1.LocalReport.ReportPath = @"Rdlc/drillthrough.rdlc";

            reportViewer1.LocalReport.DataSources.Add(new ReportDataSource("departments_department", LoadData(@"Data/departments.xml")));

            reportViewer1.RefreshReport();

        }

        //读取XML数据

        private DataTable LoadData(string xmlFilePath)

        {

            DataSet dataSet = new DataSet();

            dataSet.ReadXml(xmlFilePath);

            return dataSet.Tables[0];

        }

private void reportViewer1_Drillthrough(object sender, DrillthroughEventArgs e)

{

LocalReport localReport = (LocalReport)e.Report;

localReport.DataSources.Add(new ReportDataSource("employees_employee", LoadData(@"Data/Employees.xml")));

}

6_2

鼠标移到Name一列,会变成手的形状,如单击Engineering,就会钻取取来Engineering部门的员工信息,如下图所示。

6_3

RDLC使用手册_RDLC自定义工具条

2009-04-11 19:12 302人阅读 评论(0) 收藏 举报

1)自定义工具条可以理解为对ReportViewer的ToolBar功能的一种变通实现,如添加代码实现ToolBar刷新按钮的功能、ToolBar页导航功能。

如刷新功能代码实现为:

this.rptViewer.RefreshReport();

如ToolBar停止按钮的代码实现为:

this.rptViewer.CancelRendering(0);

。。。

2)在做项目的时候,如果用ReportViewer控件做报表展示工具的话,打印和导出的代码实现,应该要掌握。

导出功能:ReportViewer导出都是通过Render来实现的,如下代码为导出Excel

            Microsoft.Reporting.WinForms.Warning[] Warnings;

            string[] strStreamIds;

            string strMimeType;

            string strEncoding;

            string strFileNameExtension;

            //this.rptViewer.LocalReport.Render(

            byte[] bytes = this.rptViewer.LocalReport.Render("Excel", null, out strMimeType, out strEncoding, out strFileNameExtension, out strStreamIds, out Warnings);

            string strFilePath = @"D:/exportdemo.xls";

            using (System.IO.FileStream fs = new FileStream(strFilePath, FileMode.Create))

            {

                fs.Write(bytes, 0, bytes.Length);

            }

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值