利用Visual Basic实现对Excel的输出控制

来源 :电脑知识与技术 | 被引量 : 0次 | 上传用户:nfx0123
下载到本地 , 更方便阅读
声明 : 本文档内容版权归属内容提供方 , 如果您对本文有版权争议 , 可与客服联系进行内容授权或下架
论文部分内容阅读
  摘要:本文主要讨论如何利用Microsoft Visual Basic程序来调用Microsoft Excel对象,把数据库文件转换为Microsoft Excel电子表格进行打印输出的方法,并给出部份源代码。
  关键词:Visual Basic;Excel;VBA
  中图分类号:TP31 文献标识码:A 文章编号:1009-3044(2007)05-11303-03
  
  1 引言
  为了在程序中输出符合用户需要的报表,可以采用“水晶报表”(Crystal Report)或其他第三方报表输出控件来编程。本文要讨论的是在Visual Basic程序中使用微软电子表格软件(MS Excel)强大的报表输出功能来输出报表。
  我们知道,MS Office的每一组件都具有VBA(Visual Basic for Application)功能,可以在组件中利用内嵌的Visual Basic拓展该应用程序的功能,以适应用户更复杂、更特殊的需求。微软电子表格软件(Excel)除具有强大的计算功能外,还具有灵活的报表打印输出功能,我们可以在应用程序中调用Excel对象,利用此对象内嵌的VBA对输出报表进行控制。在计算机中安装有Excel的前提下,此方法可以满足大多数情况下的需要,具有一定的灵活性,在打印输出时也较为方便。本文将介绍如何用Visual Basic来对电子表格的输出进行控制,并给出一实例及其部份VB代码。
  
  2 在VB中调用Excel对象
  在VB中创建Excel对象的语句为:
  Dim ExcelApp As Object
  Set ExcelApp = CreateObject("Excel.Application")
  对象创建后,打开工作薄进行设置,可用如下的语句:
  With ExcelApp
  '打开工作薄
   .Workbooks.Add
  '工作薄设置为可见
  .Visible = True
   '设置工作表的名称
   .Worksheets(1).Name = "成绩表"
   .Worksheets(2).Name = "论文表"
   .Worksheets(3).Name = "课程表"
  '选中第二个工作表
  .Worksheets(2).Select
  End With
  这样,程序就开始打开Excel,三个工作表的名称分别为:“成绩表”、 “论文表”、 “课程表”,并且令当前工作表为“论文表”。需要插入一个新的工作表时,可以使用下面的语句:
  ExcelApp.Workbooks.Add
  
  3VB中Excel单元格的表达
  ExcelApp.Range("A1") = "姓名"
  这个语句设置单元格A1的内容为字符串"姓名",依此类推,只要知道了单元格的标号,就可以
  往这个单元格中写入内容了。例:
  Dim Txt as String
  Txt = "A2"
  ExcelApp.Range(Txt) = "职务"
  此外,还有一种方法来表示单元格:
  ExcelApp.Cells(5, 1)=100
  这个语句表示位于第5行第1列的单元格的值是100。
  还可以对固定范围内的单元格进行函数运算。例如:
  '对B10之上的第一到第四个单元格求和,即对B6:B9求和
  ExcelApp.Cells(10, 2)="=SUM(R[-4]C:R[-1]C)"
  '对B10之上的第一到第四个单元格求平均值,即对B6:B9求平均值
  ExcelApp.Cells(10, 2)="=AVERAGE(R[-4]C:R[-1]C)"
  
  4VB中Excel单元格属性的表达
  单元格的属性主要是指单元格内文字的字体类型,字体的大小,单元格高度和宽度,单元格的对齐属性等等。例如:
  With ExcelApp
  '设置字体名称
  .Range("A1").Font.Name = "黑体"
  '设置字体大小
  .Range("A1").Font.Size = 14
  '设置是否为粗体
  .Range("A1").Font.Bold = True
  '设置单元格高度
  .Range("A1").RowHeight = 24.75
   '单元格水平对齐方式,3表示水平居中对齐
  .Range("A1").HorizontalAlignment = 3
  '单元格垂直对齐方式,2表示垂直居中对齐
  .Range("A1").VerticalAlignment = 2
  '设置单元格内文字是否自动换行
  .Range("A1").WrapText = True
  '设置单元格边框类型,1为实线
  .Range("A1").Borders.LineStyle = 1
  '选中A2到A5范围内的单元格
  .Range("A2:A5").Select
  '合并选中的单元格
  .Selection.merge
  End With
  
  5VB中Excel页面属性的设置
  在使用Excel时,为确保打印的结果符合要求,我们通常会进行页面属性的设置,在VB中可以使用如下的语句来设置Excel页面:
  With ExcelApp.ActiveSheet.PageSetup
   '设置页边距(括号中的数字为距离),分别是左、右、上、下边距
   .LeftMargin = ExcelApp.InchesToPoints(0.3)
   .RightMargin = ExcelApp.InchesToPoints(0.3)
   .TopMargin = ExcelApp.InchesToPoints(0.3)
   .BottomMargin = ExcelApp.InchesToPoints(0.3)
   '打印页面是否水平居中
  .CenterHorizontally = True
   '是否垂直居中
  .CenterVertically = False
  '设置打印方向:1为纵向打印,2为横向打印
  .Orientation =1
  '设置打印纸的类型,例如A3为8,A4为9
  .PaperSize = 9
   '设置页面缩放的百分比
  .Zoom = 100
   End With
  
  6生成学生成绩单的部份VB代码
  假设一数据库(chenjidan.mdb)中的学生成绩表(chenji)由以下8个字段构成,分别是:学号、姓名、班级、数学、外语、哲学、物理、语文字段,以下的代码可以从该数据表中读取数据,在Excel中生成图1样式的成绩单,并自动计算平均分。
  图1
  Private Sub ChenJiDan()
   Dim Db As Database
   Dim rsChenji as Recordset
   Dim DbPath as String
   DbPath = App.Path + "\chenjidan.mdb"
   '打开数据库和有成绩数据的表
   Set Db = OpenDatabase(DbPath, True, False, Pass)
  Set rsChenji = Db.OpenRecordset("chenji", dbOpenDynaset)
  '计算学生的数量,用变量I表示
  Dim I as Integer
   rsChenji.MoveFirst
  I=0
  If rsChenji.EOF Then Exit Sub
  While Not rsChenji.EOF
   I=I+1
   rsChenji.MoveNext
  Wend
  '打开Excel,在电子表格中导入数据
  Dim ExcelApp As Object
  Set ExcelApp = CreateObject("Excel.Application")
  With ExcelApp
   .Workbooks.Add
  .Visible = True
   .Worksheets(1).Name = "成绩表"
  .Worksheets(1).Select
  '表的第一行是标题
   .Range("A1") = "2005级期末考试成绩表"
   .Range("A1").Font.Size = 14
   .Range("A1").Font.Name = "黑体"
   .Range("A1").Font.Bold = True
   .Range("A1").RowHeight = 24.75
  .Range("A1:H1").Merge
   .Range("A1:A8").HorizontalAlignment = 3
   .Range("A1:A8").VerticalAlignment = 2
  '第二行是字段名称
   .Range("A2") = "学号"
   .Range("B2") = "姓名"
   .Range("C2") = "班级"
   .Range("D2") = "数学"
   .Range("E2") = "外语"
   .Range("F2") = "哲学"
   .Range("G2") = "物理"
   .Range("H2") = "语文"
  rsChenji.MoveFirst
  'RowNow是当前数据要写入的行标,从第三行开始写入数据
  Dim RowNow as Integer
   RowNow = 3
  '开始写入数据
   While Not rsChenji.EOF
  .Cells(RowNow, 1) = rsChenji!学号
  .Cells(RowNow, 2) = rsChenji!姓名
  .cells(RowNow, 3) = rsChenji!班级
  .Cells(RowNow, 4) = rsChenji!数学
  .Cells(RowNow, 5) = rsChenji!外语
  .Cells(RowNow, 6) = rsChenji!哲学
  .Cells(RowNow, 7) = rsChenji!物理
  .Cells(RowNow, 8) = rsChenji!语文
  '行标加1,以便数据写入下一行
  RowNow = RowNow + 1
   rsChenji.MoveNext
   Wend
   .Cells(RowNow, 1) = "平均分"
  '计算每一科的平均分,从第四列开始,到第八列结束
   For x = 4 To 8
  .Cells(RowNow, x) = "= AVERAGE(R[-" + Trim(Str(I)) + "]C:R[-1]C)"
   Next
   '为表格画边框,P表示范围,起始为A2,终止单元格由RowNow决定行,所在列为H
   Dim P as String
   P="A2"+":H"+Trim(Str(RowNow))
  .Range(P).Borders.LineStyle = 1
  '设置表格的属性
  .Range(P).Font.Size = 12
  .Range(P).Font.Name = "宋体"
  .Range(P).HorizontalAlignment = 3
  .Range(P).VerticalAlignment = 2
  .Range(P).WrapText = True
  .Range(P).RowHeight = 25
  End With
  '进行打印前的页面设置
  With ExcelApp.ActiveSheet.PageSetup
   .LeftMargin = ExcelApp.InchesToPoints(0)
   .RightMargin = ExcelApp.InchesToPoints(0)
   .TopMargin = ExcelApp.InchesToPoints(0.3)
   .BottomMargin = ExcelApp.InchesToPoints(0.3)
   .PrintHeadings = False
   .PrintGridlines = False
   .CenterHorizontally = True
   .CenterVertically = False
   .Orientation = 2
   .Draft = False
   .PaperSize = 9
   .Order = 1
   .BlackAndWhite = False
   .Zoom = 100
   End With
  rsChenji.Close
  Db.Close
  End Sub
  程序运行后,即在Excel中生成如图一样式的表格,并自动计算各科的平均分,选择Excel中的“打印”菜单即可打印。上述程序只是起到一个抛砖引玉的作用,如果要让Excel生成其他符合用户需求的表格,只要修改程序代码即可。
  
  7结束语
  本文介绍了VB调用 Excel对象的基本方法,通过VBA的编程,可以轻松地将数据写入电子表
  格中,不仅可以将数据以格式化方式保存成文件,也使得打印输出更加得心应手。VBA中的属性及方法众多,有的不方便记忆,我们可以通过调用VBA宏的方法来查看。具体方法是:在Excel中录制一段宏,这段宏是与所编程序的操作有关系的,然后可以编辑此宏,就得到Visual Basic代码,再查找相对应的属性或方法,复制下来粘贴到VB程序中去。利用此法是学习VBA的一个捷径,可以起到事半功倍的效果。我们可以举一反三,利用上述录制宏的方法,学习到更多Office组件的VBA编程,例如Word,Access,PowerPoint等,有了这些VBA代码,就可以在VB程序中操作相应的Office对象了,从而使我们的程序如虎添翼。
  参考文献:
  [1][美]Evangelos Petroutsos,邱仲潘等译.Visual Basic 5从入门到精通[M].北京:电子工业出版社,1997.
  [2]许舜渊编著,周晓津改编,Visual Basic数据库程序设计——提高篇[M]. 北京:人民邮电出版社,1997
  [3]赵栋伟,松蕊等,Excel2000中文版速成[M].北京:机械工业出版社,1999
  [4]孙敬杰,Excel VBA入门与实例演练[M].北京:中国青年出版社,2005
  本文中所涉及到的图表、注解、公式等内容请以PDF格式阅读原文。
其他文献
关键词:EXCEL;题录文摘;文献;应用  中图分类号:TP39文献标识码:A文章编号:1009-3044(2007)05-11331-01  题录文摘型文献是我们常用的一种二次文献。我们在文献资料的利用过程中常需将题录文摘型文献转换成数据表格式,如果用EXCEL处理这种过程,将会给我们带来极大的便利、提高工作的效率。本文以实例对此进行阐述。    1 材料  以《中国生物医学文献光盘数据库(CB
期刊
摘要:介绍了如何在VB中调用SetWindowPos函数制作TopMost窗体的过程,详细描述了怎样声明SetWindowPos函数和SetWindowPos函数的具体功能,并给出了程序代码。  关键词:VB;SetWindowPos函数;TopMost窗体  中图分类号:TP312文献标识码:A文章编号:1009-3044(2007)05-11326-01    1 引言  有时应用程序需要一个
期刊
摘要:从传统XML数据流查询处理中存在的问题出发,设计了XML数据流主动服务系统的框架模型,并提出了系统的实现策略,为用户快速、准确的找到所需信息提供了途径。  关键词:XML;XML数据流;主动服务;查询处理  中图分类号:TP311文献标识码:A 文章编号:1009-3044(2007)05-11275-02    1 引言  随着XML逐渐成为信息描述和数据交换的事实标准,网络数据流信息会以
期刊
摘要:本文介绍了射频识别技术,以沃尔玛为例分析了在供应链中应用RFID技术会极大提高物流的效率,指出了它是现代物流信息化建设中基础数据获取的重要手段,并分析了RFID技术在供应链应用中的优势及前景。   关键词:RFID技术;射频识别;供应链   中图分类号:TP391文献标识码:A 文章编号:1009-3044(2007)05-11309-02    1 引言  RFID是Radio Frequ
期刊
摘要:数字视频的同步不同于模拟视频的同步。传统的同步分离技术具有其局限性,不适用于数字视频。本文以ITU-656为例,简要介绍了其数据格式和同步原理,并分析了如何用VERILOG HDL编程提取其行、场同步信息,最后给出了部分核心代码和结果的波形图。  关键词:同步;数据流;SAV;EAV;状态机  中图分类号:TP391.4文献标识码:A文章编号:1009-3044(2007)05-11329-
期刊
摘要:文章从当前对软件开发过程的需求及动向出发,提出了UML 柔性软件开发过程的概念,并给出了相应的UML柔性软件开发模型。  关键词:UML;柔性软件;开发过程  中图分类号:TP311.52 文献标识码:A文章编号:1009-3044(2007)05-11312-02    1 引言  统一建模语言UML是一种直观化、明确化、构建和归档软件系统产品的通用可视化建模语言。它捕捉了构建系统的有关决
期刊
摘要:远程调试是调试嵌入式系统的基本方式。GDB是一款被广泛使用的调试器,但是GDB的远程调试方案不能完全满足调试系统开发中的调试需求。文中介绍了一种利用ARM处理器硬件调试模块,扩展GDB远程调试功能的方案。并以ARM920T处理器为例,描述了该方案的设计与关键功能实现原理。  关键词:嵌入式开发;调试;GDB;ARM  中图分类号:TP368文献标识码:A文章编号:1009-3044(2007
期刊
摘要:RED算法采用随机丢弃策略,避免传统尾部丢弃方式而引起的TCP全局同步,同时通过控制队列的长度来抑制拥塞的发生  关键词:尾部丢弃;早期随机检测;拥塞避免  中图分类号:TP393.01 文献标识码:A文章编号:1009-3044(2007)05-11342-01    1 IP网络中的拥塞问题  拥塞避免技术通过监控网络流量负载情况,尽力在网络拥塞发生之前预计并且避免在普通的网路上拥塞的发
期刊
摘要:分析了以API接口函数形式编写驱动程序的方法,根据嵌入式操作系统Small RTOS51和51系列单片机特点,使用面向对象的软件设计思想,编写了一种能够提供常用的Windows API中一些接口函数的VRAM液晶显示器[1]的驱动程序。本文分别从驱动的设计、移植和安装等方面对该驱动程序及其设计思想进行了介绍。  关键词:驱动程序;嵌入式操作系统;液晶显示器;面向对象  中图分类号:TP27文
期刊
摘要: 本文介绍了μCOS-II的概况和ARM体系结构中与移植工作相关的一些概念,并在此基础上分析了基于ARM的移植工作。  关键词:μCOS-II嵌入式实时操作系统;ARM;移植  中图分类号:TP311.54文献标识码:A文章编号:1009-3044(2007)05-11316-02    1 引言  随着微电子技术、通信技术的发展,嵌入式系统设计及其应用在后PC时代对人类生活产生了巨大的影响
期刊