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

基于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

支撑5亿用户、1.5亿活跃用户的Twitter最新架构详解及相关实现 传苹果为iWatch招兵买马 以确保明年发布新产品 降价高达1200元的Surface RT,并不值得你购买 Daux.io:开源的项目文档生成器 避免代码注释的五大理由 安徽农信:30人,13轮测试,完成日均270万笔交易的综合业务系统架构调整 研究员带来5D光存储技术:容量达360TB,寿命高于百万年 LSI闪存加速或助力互联网IDC自我设计与建设 怎样让用户从100涨到200万?硅谷创业教父如是说 大作修炼之道:就算是手游,也要搞点剧情吧! Java EE 8愿望清单:缺少这些,Java EE将不会完美 Surface Watch?传微软正测试搭载Win 8的智能手表 又一美国造?联想在美设厂制造产品 软件定义未来 2013 SDCC中国软件开发者大会全面开启 可以直接拿来用的15个jQuery代码片段 程序员最害怕的5件事 你中招了吗? 机器智商已达四岁:亲,是时候考虑你的饭碗了 读60行代码完成的NoSQL数据库,看数据库打造面临的挑战 聚焦全球移动市场:韩国,开放之后是春天? Github 终于开始认真考虑开源项目许可证了 雅虎发布今年第二季度财报 总营收为11.35亿美元 既然无法避免被GAE锁定,何不考虑其中的机遇并自力更生 19亿美金背后的分析:91为什么要卖?百度为什么要买? 直接拿来用!最火的iOS开源项目(三) 让代码飞一会儿,超级有用的CSS编码工具集 创业者如何在Demo演讲上打动投资人? 微软小打小闹的移动版Outlook Web App,会不会被用户抛弃? 哪门编程语言影响力最大? 微软启动“Companion Web”计划 可互连多屏幕设备 让你望而却步的密码管理服务已获得100万美元的种子基金 SDCC 2013开始公开征集讲师和演讲主题 我们公司一个程序员的头式太难看了,我每次见他就恨不得拿剃头的推子给他剃光光! 寻最好的ftp软件 autoCAD的问题 找本站里面《程序员测试软件》的注册码 刚毕业的不能报? .lib 文件到底是怎么回事?如何查看它的内容? 请问,下面的警告提示什么意思(关于sybase) 那位可以给我描述一下“代表”? 请问有WINsock编程高手么,帮我看一下下面的程序 紧急招聘PB程序员(成都) 关于产品序列号的问题……想了很久了。 这里有几个问题,能者请进! 请教VC项目开发经验 如何让下载的程序变成免费的? 请问有Pdf到Text的转化的源代码么? 能否让下载的程序变成免费的? 请问怎样才能自动复制文本框中的文本到剪贴板? 是否可用简体中文的VB开发翻体中文的应用程序? 使用JavaMail转发邮件 在servlet中是不是不可以引用其它的类中的函数.(这个类不是派生于HttpServlet) 为什么买书配送的光盘文件在BCB工程中打开后不让修改(打开前已转换为存档文件了)? 请教使用OPEN CLIENT 的一个小问题 索求算法 请问能否将下载的程序变成免费的? 现在学习C#不晚吧,:P 关于VB中控制运行实例的问题 请教关于DBGRid的问题。 请问在Java下如何实现文件压缩?有没有现成的接口或者压缩算法代码?多谢 这里下载C#电子书《C#教程》(中文 希望出版社) 我如何才能删除ORACLE中建立的用户??总是提示用户不存在或SQL第归错误等等!! CSDN灌水乐园的惊世大骗局!!CSDN灌水乐园的惊世大骗局!!CSDN灌水乐园的惊世大骗局!! 如何用简体中文VB开发翻体中文软件? 高分请教!!!! 一定加分!!!1111111 在打印或打印预览前如何获取报表页数 求助.希望有人帮忙!! 我用ACTIVE REPORT出了问题....相教 请问如何获得硬盘的序列号? 请问各位,有什么好的方法来为用户分配权限,要多少分就给多少? 我有一个www.cnjava.com,有没有人愿意要这个域名? 请问Delphi中关于fropro数据库的软删除问题!急用!谢谢! 当两个表用主键关联时,删除主表的一条记录,关联表对应的记录能不能自动删除(不用代码)? 大家来谈谈各自在制作网页时的css于inc的运用吧 小弟对Java及C#的一点看法-请大家指正! 高手请进,帮我看看这是什么意思?感谢非常 基于组件的三层应用程序怎么打包?200分相赠!!! 如何执行带OUT参数的ORACLE的存储过程 有谁做过矩阵奇异值分解的程序? 讨论:爱需要表白吗? 请教各位大侠:我用TNMStrm控件发送数据时,怎样实现定时连续发送?我现在发送一次成功,紧接着第二次发送就不行了,出现蓝屏. slide中的滚动条,有NM_RELEASEDCAPTURE事件,是响应mouseup,有没有什么事件响应mousedown的? 再送50分,求大家来讨论用存储过程建datawindow时应注意的事情。 工程队用了2天修了一条路,第一天完成全程的百分之50还多72米,第二天修的相当于第一天修的5分之3,这条路全长多少? 一个工程队计划3天修完一条水渠,第一天修了200米,第二天修了全长的五分之二,第三天修了前两天总和的一半,这条水渠长多少米? 工程队修建一条水渠,第一天修了180米.第二天修了全长的4分之1,第三天修的水渠的长度为前两.工程队修建一条水渠,第一天修了180米.第二天修了全长的4分之1,第三天修的水渠的长度为前两天 工程队用两天时间修完一条路,第一天完成全程50%多72米,第二天修的是第一天修的3/5,这条路长多少米?不要方程 工程队计划三天修完一条公路,第一天修了全长的百分之六十,第二天与第三天修的长度比是3:5.已知第二天比第一天少修45米.这条公路有多长? 一支工程队要修一条水渠,第一天修了全长的5分之1,第二天修了全长的4分之1,第二天比第一天多修了25千米,这条水渠全长多少米?(注意单位) 工程队修一条路每天修72米,28天可以修完,如每天修96米,多少天能修完?以---为等量关系,设X天修完,方程是: 工程队计划3天修完一条路,第一天修了200米,第二天修了全长的2/5,第3天修了前两天总和的一半.这条路有几米? 修一条路 第一天修了全长的2分之1 第二天修了余下的2分之1,这条路还剩几分之几没有修? 修路队用两天时间完成一条公路,第一天修了全程的50%还多72米,第二天修的相当于第一天修的1/3这条公路长多少米(方程) 甲队计划3天修完一条水渠.第一天修200米,第二天修全长的2/5,第三天修全长的一半.这条 水渠长多少米? 一条路100米,第一天修了这条路的2分之1,第2天修的是第一天的3分之1,还剩这条路的几分之几没有修 工程队修一条路,第一天修了全长的5分之2,第二天修了全长的百分之25,还剩154米没修,这条路全长多少米? 一个工程队计划修一条水渠,第一天修了九分之二,第二天修了二分之一,还剩200米没修完,这条水渠长多少米 一条路100米,第一天修了全长的二分之一,第二天修了全长的三分之一,还剩这条路的几分之几没修? 王师傅要加工一批零件,第一天完成计划的58 ,第二天完成计划的712 ,实际完成的超过原计划的几分之几?怎怎么做 工程队修一条路,第一天修5分之1,第二天修4分之1,第二天比第一天少修25米这条路有多少米?工程队修一条路,第一天修总路程的5分之1,第二天修总路程的4分之1,第二天比第一天少修630米这条路 工程队计划修一条水渠,第一个月完成了全长的五分之二,第二天完成了全长的七分之三,这条水渠全长21km1.两个月一共修了多少km2.第二个月比第一个月多修多少km3.还剩多少km没修 红旗车间三天生产了一批零件,第一天生产了总数的 ,第二天比第一天多生产20个,第三天生产了55个.这批零 工程队修一条路,第一天修了全长的5分之1,第二天与第一天所修的长度比是4比3,这时还剩下600米没修,这条路全长多少? 先不加分,等回答完加 修一条水渠用了3天,第一天修了全长的25%,第一天比第三天少修21米,第二、三天的比是7:8,这条水渠长多少 红旗车间三天生产了一批零件,第一天生产了总数的七分之二,第二天比第一天多生产了20个,第三天生产了55个这批零件宫有多少个? 工程队已修了一条路的3/8,还剩下1000米没修,要修的这条路长多少米? 修一条水渠用了三天第一天修了全长的25%,第一天比第三天少修21天第2、3天的比是7比8,这条水渠长多少米? 李师傅计划三天内运完一批货物,第一天运了42吨,占这批货物的五分之二,第二天与第三天的运货量之比是4:3.李师傅第二天运货多少吨. 工程队修一条路,第一天修了全长的8分之3,第二天修了剩下的5分之2,第三天比第二天多修640米,这条路长多少米 长顺工程师三天修完一条水渠,第一天修了全长的25%,第二天与第三天的比是7:8,第一天比第三天少21水渠多长? 搬运工计划三天内运完一批货物,第一天运了42吨,占这批货物的5分之2,第二天与第三天的运量比是4比3,第二天运多少吨 某工程队修一条路,第一天修了全长的5/27,第二天修了余下的3/11,第三天修了第二天余下的5/6,第四天修8千米, 某队修一条水渠,第一天修了全场的25%,第二天与第三天的比是7:8,第一天修的比第三天修的少21米,这条水渠全长多少米? 青年运输队计划3天运完一批货物.第一天运480吨,占这批货物的40%.第二天运的和第三天运的比是3比5.问:第三天的货物有多少吨? 工程队修一条路,第一天修了240米,第2天修了余下的40%,其余的第2天修完,已知第三天修的与全长的比是1:3.这条路有多少米 某队修一条水渠,第一天修了全场的25%,第二天与第三天的比是7:8,第一天修的比第三天修的少21米,这条水渠全长多少米?不要用2个未知数方程 某建筑队计划3天修完一条公路,第一天修了全长的五分之二,第二天修的是第一天的百分之八十,第二天比第一天少修120米问这条路长多少米?第三天修了多少米?怎么列式谢谢 某工程队修一条路,第一天修了全长的27分之15第二天修了余下的11分之3,第三天修了第二天余下的6分之5,第四天修了8千米,正好修完,求这条路的长度. 工程队修一条路,第一天修了全长的25%,第2天与第3天修的比是7:8,第一天比第3天少修21米,这条路全长多少 修路队计划修一条长1500m的公路,第一天修了全长的五分之二,第二天修了全长三分之一,还剩下多少米 工程队两天修完一条路,第一天修了5分之3千米,比第二天多修了8分之1千米,这条路 工程队修一条路第一天修的比全长的三分之一少100米第二天修了300米两天共修了全长的40%这条路全长多少米 市公路管理计划修一条全长200千米的公路,第一天计划修全长的五分之二,余下的第二修完,第二天计划修多少千 某工程队修一条路,第一天修了全长的27分之5,第二天修了余下的7分之3,第二天修了8千米,求这条路的长度.尽量用算术法,不然我不懂,也可以用方程, 工程队3天修一条水渠第一天修全长的25%第二天与第三天修的比是7:8第一天比第二天少21米这水渠全长多少 王师傅计划3天内运完一批货物,第一天运了42吨,占这批货物的2/5,第二天与第三天的重量比是4:3第二天运货多少吨(要有详细的算式) 工程队修完一段公路,第一天修了全长的30%,第二天修了150米,第三天修了全长的2/5,第三天正好完成,这段公路长多少米 工程队修一条水渠,第一天修了全长了四分之一,第二天修了全长的百分之三十,还剩下900米没修.这水渠全长 码头上有一批货物,计划三天运完.第一天运走了全部的五分之三,第二天运走了五分之三吨,第三天还要运四分之三吨.第二天和第三天共运了多少吨?第二和第三天共运的是这批货物的几分之几? 工程队修公路,第一天修全长的4分之1,第二天修150米,第三天修8分之1,三天完成,这段公路长多少米 工程队修一条水渠,第一天修了全长了四分之一,第二天修了全长的百分之三十,还剩下900米没修水蕖全长不要方程 王师傅计划3天内运完一批货,第一天运了42吨,占这批货的5分之2,第二天与第三天运的重量比是4:3,第二天运多少吨?(上下接着的)急, 工程队修公路,第一天修了公路全长的8分之1,第二天修了后已修的长度与未修的比是3:5,工程队第二天公路修了全长的几分之几?(用比例来列)2.一个零件长2cm,它的长度与模型的长度比是1:5,模 工程队修一条水渠,第一天修了全长了1/4,第二天修了全长的30%,还剩下900米没修.这条水渠全场多少米? 某工人计划在3天内加工完一批零件,第一天加工480个,占这批零件的40%,第二天与第三天加工零件数的比是2: 某个工程队修一条路,第一天修了全长的3分之一.第二天修了全长的4分之一 工程队修一条水渠,第一天修了全长的25%,第二天修了全长的30%,还剩下900米没修,这条渠全长多少米?今天就要 某工厂计划在3天内加工完一批零件,第2天加工了480个,占这批零件的五分之二,第二天与第三天加工的个数比是3比5,第二天加工了几个? 工程队修一条公路,第一天修了公路全长的1/8,第二天修了后,已修的长度与未修的比是3:5,工程队第二天公路全长的几分之几?(用比例解) 工程队修一条水渠,第一天修了全长的15%,第二天修了全长的40%,还剩下900米没修,这道水渠全长多少米 某工程队修一条路,第一天修了全长的5/27;第二天修了某工程队修一条路,第一天修了全长的5/27,第二天修了余下的3/11,第三天修了第二天余下的5/6,第四天修了8千米,正好修完.求这条路全长多 某工程队修一条公路,第一天修了全长的5分之1,第二天修了全长的8分之3,___________.这条公路长多少千米1、第一天修了3.2千米.列式:.2、两天一共修了9.2千米.列式:.3、第二天比第一天多修2.8 某工程队挖一条水渠.第一天挖了全长的5分之1,第二天又挖了全长的5分之1,第三天挖了全长的6分之1.这条水渠(要算式)
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn