说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

基于VB和EXCEL的报表设计及打印

HTML文档下载 WORD文档下载 PDF文档下载
基于VB和EXCEL的报表设计及打印

文/朱诗兵 高栓


  在现代管理信息系统的开发中,经常涉及到数据信息的分析、加工,
最终还需把统计结果形成各种形式的报表提供给领导决策参考,或进行外
部交流。在Visual Basic中制作报表,通常是用数据环境设计器(Data
Environment Designer)与数据报表设计器(Data Report Designer),或者
使用第三方产品来完成。但对于大多数习惯于Excel报表的用户而言,用以
上方法生成的报表在格式和功能等方面往往不能满足他们的要求。

  由于Excel具有自己的对象库,在Visual Basic工程中可以加以引用,
通过对Excel使用OLE自动化,可以创建一些外观整洁的报表,然后打印输
出。这样实现了Visual Basi应用程序对Excel的控制。本文将针对一个具
体实例,阐述基于VB和EXCEL的报表设计及打印过程。

 1)创建Excel对象

  Excel对象模型包括了128个不同的对象,从矩形、文本框等简单的对
象到透视表,图表等复杂的对象。下面简单介绍一下其中最重要,也是用
得最多的五个对象。

(1)Application对象

  Application对象处于Excel对象层次结构的顶层,表示 Excel自身的
运行环境。

(2)Workbook对象

  Workbook对象直接地处于Application对象的下层,表示一个Excel工
作薄文件。

(3)Worksheet对象

  Worksheet对象包含于Workbook对象,表示一个Excel工作表。

(4)Range对象

  Range对象包含于Worksheet对象,表示 Excel工作表中的一个或多个
单元格。

(5)Cells对象

  Cells对象包含于Worksheet对象,表示Excel工作表中的一个单元格。
  如果要启动一个Excel,使用Workbook和Worksheet对象,下面的代码
启动了Excel并创建了一个新的包含一个工作表的工作薄:

Dim zsbexcel As Excel.Application
Set zsbexcel = New Excel.Application
    zsbexcel.Visible = True

如要Excel不可见,可使zsbexcel.Visible = False

  zsbexcel.SheetsInNewWorkbook = 1
  Set zsbworkbook = zsbexcel.Workbooks.Add

 2)设置单元格和区域值

  要设置一张工作表中每个单元格的值,可以使用Worksheet对象的
Range属性或Cells属性。

With zsbexcel.ActiveSheet
    .Cells(1, 2).Value = "100"
    .Cells(2, 2).Value = "200"
    .Cells(3, 2).Value = "=SUM(B1:B2)"
    .Range("A3:A9") = "中国人民解放军"
  End With

  要设置单元格或区域的字体、边框,可以利用Range对象或Cells对象
的Borders属性和Font属性:

  With objexcel.ActiveSheet.Range("A2:K9").Borders  '边框设置
    .LineStyle = xlBorderLineStyleContinuous
    .Weight = xlThin
    .ColorIndex = 1
  End With
  With objexcel.ActiveSheet.Range("A3:K9").Font  '字体设置
    .Size = 14
    .Bold = True
    .Italic = True
    .ColorIndex = 3
  End With

  通过对Excel单元格和区域值的各种设置的深入了解,可以创建各种复
杂、美观、满足需要的、具有自己特点的报表。

 3)预览及打印

  生成所需要的工作表后,就可以对EXCEL发出预览、打印指令了。

  zsbexcel.ActiveSheet.PageSetup.Orientation = xlPortrait   '
  设置打印方向
  zsbexcel.ActiveSheet.PageSetup.PaperSize = xlPaperA4   '
  设置打印纸的打下
  zsbexcel.Caption = "打印预览"        '设置预览窗口的
  标题
  zsbexcel.ActiveSheet.PrintPreview      '打印预览
  zsbexcel.ActiveSheet.PrintOut        '打印输出

  通过打印方向、打印纸张大小的设置,不断进行预览,直到满意为止,
最终进行打印输出。

  为了在退出应用程序后EXCEL不提示用户是否保存已修改的文件,需使
用如下语句:

  zsbexcel.DisplayAlerts = False
  zsbexcel.Quit    '退出EXCEL
  zsbexcel.DisplayAlerts = True

  如此设计的报表打印是通过 EXCEL程序来后台实现的。对于使用者来
说,根本看不到具体过程,只看到一张张漂亮的报表轻易地被打印出来了。

 4)具体实例

  下面给出一个具体实例,它在window98、Visual Basic 6.0、
Microsoft Office97的环境下调试通过。

  在VB中启动一个新的Standard EXE工程,在“工程”菜单的“引用”
选项下引用Excel Object Library;然后在Form中添加一个命令按钮
cmdExcel;最后在窗体中输入如下代码:

  Dim zsbexcel As Excel.Application
      Private Sub cmdExcel_Click()
          Set zsbexcel = New Excel.Application
   zsbexcel.Visible = True
   zsbexcel.SheetsInNewWorkbook = 1
   Set zsbworkbook = zsbexcel.Workbooks.Add
   With zsbexcel.ActiveSheet.Range("A2:C9").Borders   '边框设置
      .LineStyle = xlBorderLineStyleContinuous
      .Weight = xlThin
      .ColorIndex = 1
      End With
   With zsbexcel.ActiveSheet.Range("A3:C9").Font  '字体设置
       .Size = 14
      .Bold = True
      .Italic = True
      .ColorIndex = 3
   End With
  zsbexcel.ActiveSheet.Rows.HorizontalAlignment =
xlVAlignCenter   '水平居中

  zsbexcel.ActiveSheet.Rows.VerticalAlignment =
xlVAlignCenter    '垂直居中

  With zsbexcel.ActiveSheet
    .Cells(1, 2).Value = "100"
    .Cells(2, 2).Value = "200"
    .Cells(3, 2).Value = "=SUM(B1:B2)"
    .Cells(1, 3).Value = "中国人民解放军"
    .Range("A3:A9") = "50"
  End With
 zsbexcel.ActiveSheet.PageSetup.Orientation = xlPortrait    '
xlLandscape
 zsbexcel.ActiveSheet.PageSetup.PaperSize = xlPaperA4
 zsbexcel.ActiveSheet.PrintOut
 zsbexcel.DisplayAlerts = False
 zsbexcel.Quit
 zsbexcel.DisplayAlerts = True
 Set zsbexcel = Nothing

周末,深圳微信开发者大会等您来!(参会必读+名单) 营造云安全生态链 第五届云安全联盟高峰论坛在京顺利召开 中国大数据六大技术变迁记 【最具价值CTO评选秀】当当网CTO熊长青:结合行业及技术发展,规划技术方向 社交颠覆传统,环信技术交流沙龙纪实(组图) 揭秘经典案例炼成之道 微信开发者大会精华回顾 从一家电子商务网站学到的经验教训 【最具价值CTO评选秀】极路由CTO康晓宁:极客转型CTO的感悟 盘点这些年来的“微信万能论” 《近匠》亲加通讯云:IM即时通讯API的极致服务者 TCL杯HTML5智能电视开发大赛完美落幕,8项获奖应用大揭晓! Xcode 6.2 Beta发布,支持WatchKit的iOS 8.2 SDK来了! 【最具价值CTO评选秀】携程高级技术副总裁叶亚明:从呼叫中心到移动互联网的演进 为什么靠谱的公司都应该参加CTO评选? 【深度剖析】微软开源.NET:战略重心已从PC转移到云端 专访POWER 8编程挑战赛选手黄文超:非科生的编程算法之路 BDTC 2014干货精彩不断,四大全天技术论坛议题全面曝光 全功能API!开源2D游戏引擎Firmament 微信公众平台新增“微信连Wi-Fi”功能,打通线上线下闭环 马化腾:微信在一线城市活跃 QQ增长从城市到农村 承包MIPS开发!Imagination发布双Codescape MIPS SDK 不任性了!Google Play宣布开通国内开发者通道 脑洞大开!用Swift写个Material Design组件库 美国最大婚恋网站eHarmony利用Hadoop、OpenStack重构自己 每个Java开发者都应该知道的5个JDK工具 异构计算应用研讨暨OpenCL编程培训在上海和西安成功举行! APIs.io:用来发布和发现API的利器 偏爱MySQL,Nifty使用4个Web Server支撑5400万个用户网站 直接拿来用!十大Material Design开源项目 初探WatchKit,开发者必须知道的6件事! 【MDCC专访】环信CEO刘俊彦:音视频即时通讯将成为技术壁垒 如何把程序嵌入到widows Expolore 中? 今天心情特好!散分 在vc下怎样调出window下的“打开方式”对话框,他是类还是控件!请高手指点! 一个门外汉的问题~~~~ 谁知道windows共享密码如何算的 vc中asm怎么不執行? 在开始菜单点右键,拉出的菜单里的内容,怎么添加删除?? 帮忙找一个和VB的属性区一样的代码,控件或类库均可。 Word 中字体的问题 我买了一台SLE4442读写器, 为什么不能写 谁用过FAST REPORT 请求帮助 realplayer中文件菜单栏中的以看过的文件名,怎么删除??? php如何改写或者是添加一个cron的命令参数给linux服务器? SQL Server 能制作表单和报表吗?????? DirectDraw页面格式问题(两个)。答对100分绝对送上,从不食言!(附源码) VC++中的内部交互调试器在哪? 人邮版的C++面向对象高效编程如何? realplayer中文件菜单栏中的以看过的文件名,怎么删除? 如何实现真正的无标题栏的拖动? 用"select top n"取了前n纪录后,要再接着取n+1至2n条纪录,接着再取2n+1至3n……,这种取法要怎样实现呢? 如何在Excel中编制一个宏? 如何得知程序的一个实例正在运行? 送分了,送分了,虽然不多,但天天有! 为什么select count(*) from test 时,提示表或示图不存在!!! 请问如何设置mp3文件的在线播放?? 请问在内部局域网正常的情况下,打印机无法共享(共享以后没有效果)的主要原因是什么?谢谢! ===我对Linux上的Oracle8.1.7.0.1操作的时候只读,为什么啊???==== 请给我一个GetCurrentDirectory使用实例, 问一个深入MFC的简单问题 请问有关delphi项目编译的一个小问题。 各位,那里有VisualAge for Java4.0下在?我从ibm的网站上下载了,但是安装不了,说是语言不对! shcv.dll 编译不过去!!!!! have a test!have a test!have a test!have a test!have a test!have a test!have a test!have a test! mysql 结果中再次查询如何才能实现呢 pc2phone java支持byte[] a = String.getBytes("iso-8859-1");转换吗? c语言中关于对windows命令调用的语法、命令及其格式。 怎么样捕捉数据库连接出错的信息?? 在SQL语句中,如何获得一汉字字段的字节长度,而不是字符长度?如“测试”返回4,不是2 如何建树 winsock.dll提供的都是什么函数?如果它提供的是winsockAPI,那么winsock32。lib提供的又是些什么?它们重复吗? FormatDateTime这个函数的日期间的字符不支持汉字,怎么解决? 关于用JAVA生成GIF的问题?(16M的GIF,256的我已经知道了) 如何在ACCESS李使用SQL? 梦天请进,谢谢! 能不能将对象序列化后存到数据库再取出还原?有没有例子? 分屏的已个视要做成对话框,请指教,顺便告诉我如何给分,只能给这么多 sorry,梦天进来,thanks!! 急!请问怎么在java类里写编译另一个类的语句?? 如何在ACCESS里使用SQL? 右图是由边长分别是4CM 3CM 的两个正方形组成的图形,求阴影中的图形的面积 0.001做单位的数是什么 0.04改写成用千分之一作单位的数是什么 下图是由边长分别为4cm和3cm的大小两个正出形组成.请求出图中阴影部分的面积. 0.5的计数单位是十分位,把它改为用0.001作单位的数是( ) vf编程题 求出1到100之间的奇数积,偶数和求出1到100之间的奇数积,偶数和此题为填空题SET TALK OFF_____________________S2=1FOR i= 1 同100 IF _________ S1=SI+i ELSE S2=__________ EN 证明多项式f(x)=1-(x-1)(x-2)(x-3)……(x-n)在有理数域上不可约 多项式在各个数域中怎么标准分解?例如f(x)=x^5-x^4-2x^3+2x^2+x-1在有理数域,复数域,实数域上的分解. 0.8计算单位是(),它是由()个这样的计算单位组成的.将它改写成以千分之一为单位的数是 f(x)是整系数多项式,对每一个素数p,f(p)都是素数,证明f(x)是不可约多项式 这个多项式能否在有理数域上进行分解?f(x)=x^4-5x+1我试过了Eisenstein判别法以及几个变体还是判断不出来 用VF编程求100到1000以内的奇数之和、偶数之和 用累加法/叠加法(有图)它是怎么累加的?第一个是(n-下标+1)的话,那不是变成乘1了吗? 用 for 循环求 200 之间的偶数之和.用matlab计算, pascal 循环结构计算1+2+3+4.+n之和、奇数和与偶数和.输入格式 Input Format 一个正整数n(n 若整系数多项式在有理数域可约,则改多项式一定有有理根.请问大神们,这句话对否? 用Matlab实现:统计1~100中有多少个偶数、奇数以及质数,输出结果,咋处理? 已知300=2*2*3*5*5,则300一共有多少个因数?要说明原因 x^2-2在有理数内不可约.则x^2-2是以√2为根的最低次数的有理系数不可约多项式,为什么? matlab中怎么实现奇数和偶数不一样的循环?i=偶数的时候,执行pa(i)=pa(i)+5i=奇数的时候,执行pb(i)=pb(i)+5 正方形边长10cm,求阴影部分面积? 对于任意两个正整数m,n,定义运算&,当m,n都为偶数或都为奇数时,m&n=m+n/2;当m,n为一个奇数、一个偶数时,m&n=根号下mn .设集合A={(a,b)|a&b=6,a,b€N*}试求集合A中的元素个数. 2、用Matlab实现:统计1~100中有多少个偶数、奇数以及质数,输出结果. 已知300=2*2*3*5*5,则300一共有( )个不同的因数.你是怎样想的? 定义一种对正整数n的“F”运算:①当n为奇数时,结果为3n+5;②当n为偶数时,结果为 (其中k是使 为奇数的正整数),并且运算重复进行.例如,取n=26,则:若n=449,则第449次“F运算”的结果是多 一个偶数既是3的倍数,又有约数5,这个数最小是( ) 已知300=2*2*3*5*5,则300一共有( )个不同的因数.你是怎样想的? 如何证明有理数集是域? 若新定义运算,当M为奇数时,□M=3m;当M为偶数时,□M=1/2m.问□9*□6为多少!是□9 ×□6 一个数,有三个约数,其中两个分别是2、5,另一个约数是7的最小倍数,这个数是多少? 证明有理数集是零测集 定义一种对正数n的“F”运算:一、当n为奇数时结果为3n+5;二、当n为偶数时,结果为n/2^k(其中k是使n/2^k为奇数的正整数),并且运算重复进行.例如:取n=26,则:26经第一次F二运算结果为13, 不改变数的大小,把下面各数改写成以千分之一作单位的数1.0300=( ) 0.77=( ) 3.4=( ) 5.2=( ) 已知正方形边长为a,分别以a为半径做扇形,则如图所示的阴影部分是多少?a=2,阴影部分面积是多少? 证明有理数域Q上一元多项式环Q【x】的理想(2,x)是主理想 不改变数的大小,把6.9改写成以千分之一为单位的数是多少 已知正方形边长为a,分别以a为半径做扇形,则如图所示的阴影部分是多少? a=2,阴影部分面积是多少? 用c++将n个正整数(n从键盘输入,n 用JAVA程序 分别求出1--100间的奇数,偶数之和.(奇数之和用while语句,偶数之和用do--while语句) 已知正方形边长为a,分别以a为半径作扇形.阴影部分的面积是多少?当a=2时,阴影部分面积是多少? 大正方形边长5cm,小的边长3cm,求阴影部分两个三角形面积 1-100之间的偶数和与奇数和` JAVA如题 求1-100之间的偶数和与奇数和;我是初学 JAVA的 希望会的朋友可以指点下我 已知正方形边长为a,分别以a为半径做扇形,则如图所示的阴影部分是多少?a=3,阴影部分面积是多少?已知正方形边长为a,分别以a为半径做扇形,则如图所示的阴影部分是多少?a=3,阴影部分面积是多 把3.8改成以0.001为单位的数是 把1.2345亿改写成用1作单位的数 斐波那契数列 前n项和公式不要通项公式. EXCEL问题:统计下面方框内所有每个数的数量,在另外一行显示出来.列如:1有4个,2有5个. 一个数是5个2,3个3,2个5,1个7的连乘积,这个数当然有许多约数是两位数,这些两位数的约数中,最大是几 累加法,累乘法怎么去理解累加法,1 + 3 + 5 + 2n-3 =1 + 2n-3 / 2 乘 n-1是怎么来的? 累乘法具体内容又是什么?又该怎么理解? 应用excel表格计算一行数字中连续出现的相同数字的最大个数?例如:1 1 1 1 0 0 1 2 2 2 0 0 0 0 2 2 这行数字中1的最大个数为4个 ,2的最大个数为3个,0的最大个数为4个,就是想求这个个数? 如图,大小两个正方形的边长分别为10cm·8cm,求阴影部分的面积 为什么整系数多项式方程的实根必为整根或无理根?(要求证明)若是二次的呢? f(x)=x^9+x^8+x^7+x^6+x^5+x^4+x^3+x^2+x+1在有理数域、实数域上的不可约多项式乘积 右图中,大正方形的边长是10Cm,小正方形的边长是8CM,则阴影部分的面积是( )平方厘米 任何次数大于1整系数方程的代数数可能是有理数吗 计算1到M(M为偶数)之间的奇数之和和偶数之和#include #define M 100main(){ int a,b,c,i;clrscr();a=0;c=0;for(i=1;___(1)___;i+=2){ a+=i;___(2)___;c+=b; }printf("sum of evens is %d\n",c);printf("sum of odds is %d\n",a); }结果··SUM 将多项式(1-3x+2x^2)^2001*(1+3x-2x^2)^2001*(x^2+x+1)^2001展开后合并同类项,各项系数的和是多少 把5.4改成用“百分之一”作单位的数是( ),把2.5673亿改写成用“一”作单位的数是 求教:如图,两个正方形的边长分别为8cm,12cm,那么图中阴影部分的面积是多少? 把0.001改写成用千分之一做单位的数
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn