VB通用数据表格输出程序的设计.
- 格式:doc
- 大小:51.50 KB
- 文档页数:6
基于VB下的Excel表格设计及其打印输出的研究
李文华;焦启民
【期刊名称】《湖南科技学院学报》
【年(卷),期】2006(27)11
【摘要】Excel具有强大的报表处理功能和报表输出功能,Visual Basic中的Excel 对象为我们提供了利用编程方式访问和控制Excel表格的手段,本文给出了在Visual Basic环境下调用Excel的方法,实现了利用Excel进行报表处理和报表输出.【总页数】5页(P247-251)
【作者】李文华;焦启民
【作者单位】湖北省仙桃职业学院,湖北,仙桃,433000;湖北教育学院,计算机系,湖北,武汉,430205
【正文语种】中文
【中图分类】TP391.13
【相关文献】
1.基于VBA的Auto CAD打印输出环境定制与开发 [J], 周虹
2.VB环境下的打印输出 [J], 查源卿;冯正进
3.基于Excel数据源表的记账凭证打印输出 [J], 张永禄
4.基于C#的Excel-VBA编程批量数据表格设计与实现 [J], 王大龙;张慧娟;
5.基于VBA编程的财务数据汇总表格设计 [J], 孙东;郭伟;吴元军
因版权原因,仅展示原文概要,查看原文内容请购买。
利用V isual Basic 实现对Excel 的输出控制1 引言为了在程序中输出符合用户需要的报表,可以采用“水晶报表”( Crystal Report )或其他第三方报表输出控件来编程。
本文要讨论的是在Visual Basic 程序中使用微软电子表格软件 ( MS Excel )强大的报表输出功能来输出报表。
我们知道,MSOffice 的每一组件都具有VBA(Visual Basic for Application )功能,可以在组件中利用内嵌的Visual Basic 拓展该应用程序的功能,以适应用户更复杂、更特殊的需求。
微软电子表格软件( Excel )除具有强大的计算功能外,还具有灵活的报表打印输出功能,我们可以在应用程序中调用Excel 对象,利用此对象内嵌的VBA对输出报表进行控制。
在计算机中安装有Excel 的前提下,此方法可以满足大多数情况下的需要,具有一定的灵活性,在打印输出时也较为方便。
本文将介绍如何用Visual Basic 来对电子表格的输出进行控制,并给出一实例及其部份VB代码。
2 在VB 中调用Excel 对象在VB中创建Excel对象的语句为:Dim ExcelApp As ObjectSet ExcelApp = CreateObject("Excel.Application")对象创建后,打开工作薄进行设置,可用如下的语句:With ExcelApp' 打开工作薄.Workbooks.Add' 工作薄设置为可见.Visible = True' 设置工作表的名称.Worksheets(1).Name = " 成绩表".Worksheets(2).Name = " 论文表".Worksheets(3).Name = " 课程表"' 选中第二个工作表.Worksheets(2).SelectEnd With这样,程序就开始打开Excel ,三个工作表的名称分别为:“成绩表”、“论文表”、“课程表”,并且令当前工作表为“论文表”。
在设计一个99乘法表的VB程序时,首先需要明确的是,这是一个非常基础的编程任务,主要涉及到循环结构和条件语句的使用。
以下是一个简单的VB程序,用于生成一个99乘法表:```vbOption ExplicitPrivate Sub Command1_Click()Dim i As Integer, j As IntegerFor i = 1 To 9 Step 1For j = 1 To iDebug.Print "*",If j = 1 ThenDebug.Print j & "×" & i & "="ElseDebug.Print ""End IfNext jDebug.Print vbNewLineNext iEnd Sub```这段代码首先定义了两个变量i和j,分别用于表示乘法表的行数和列数。
然后使用两个嵌套的For循环来生成乘法表。
外层循环控制行数,内层循环控制每行的列数。
在每次内层循环中,都会打印出一个星号(*)和一个乘法符号(如果这是当前行的第一个数字),然后打印出当前的乘积(如果这是当前列的第一个数字)。
当内层循环结束后,会打印一个换行符,以便开始下一行的打印。
这个程序的主要功能就是生成一个99乘法表,用户可以通过点击按钮来触发这个功能。
当运行这个程序时,它会在VB的调试窗口中打印出乘法表的内容。
对于标题部分,可以根据您的需要来添加。
比如:"99乘法表" 或者"趣味数学:99乘法表"。
您可以在程序的开始部分添加这个标题,或者在程序运行时动态地添加这个标题。
具体实现方式取决于您的具体需求和代码环境。
以上就是一段简单的VB代码,用于生成一个99乘法表。
如果您需要更复杂的功能或者有特定的需求,欢迎提出,我会尽力提供帮助。
实验的总体要求与方法实验是巩固课堂所学知识、掌握可视化程序设计的方法、提高分析问题和解决问题能力的最重要的途径。
因此明确实验目的、内容与要求、实验步骤及实验规则,一方面有助于实验任务的顺利完成,另一方面也有利于养成严谨科学的作风。
每个实验都要遵循认真预习准备、认真做好实验、认真写好实验报告三个阶段进行。
1.实验的基本目的(1)通过实验熟悉面向对象程序设计的基本概念。
(2)通过实验熟练掌握利用VB进行可视化程序设计的基本方法。
(3)通过实验掌握应用程序的调试方法,加强应用能力的训练与培养,从而具有计一般应用程序和解决事务管理问题的能力。
2.实验的基本要求(1)上机实验之前,应认真预习有关实验内容及相应教材。
(2)实验过程中应记录实验中的有关数据(包括出错信息等),以便课后进行分析。
(3)上机时要遵守实验室的规章制度,爱护实验设备。
3.实验报告每个实验结束后都应写出实验报告,报告中应包括下列内容:(1)实验目的(2)实验内容与要求(3)实验步骤(4)实验结果及分析讨论、实验心得体会等。
实验一熟悉vb的开发环境、程序设计的基本步骤【实验目的】1.熟悉Visual Basic 6.0集成开发环境。
2. 学习怎样启动和退出VB3.掌握开发一个简单程序的基本步骤。
4.掌握简单代码的编写。
【实验内容】1.启动和退出VB2.开发一个简单程序。
3.将Visual Basic工程编译生成可执行文件。
【实验要求及操作步骤】一、启动和退出VB1、进入VB集成开发环境要进入VB应用程序,首先要运行VB的集成开发环境。
启动VB的方法如下:[方法1]◇单击任务栏上的“开始”按钮;◇选择“程序”文件夹,接着选取“Microsoft Visual Basic 6.0中文版”文件夹,再选取“Microsoft Visual Basic 6.0中文版”项,如图1-1所示;图1-1 启动VB的方法1◇单击鼠标左键。
[方法2]◇单击任务栏上的“开始”按钮;◇选择“程序”文件夹;◇使用“Windows 资源按理器”查找VB可执行文件 VB6.exe;◇双击图标。
使用VB将SQLServer数据导出生成Excel表格作者:杨晓峰张茁来源:《硅谷》2009年第10期[摘要]使用VB将SQL Server和Excel结合起来处理数据会得到事半功倍的效果。
介绍设计一个VB程序将SQL Server中查询到的数据导出生成Excel表格的方法。
以解决非专业人员处理数据和阅读数据的问题,也解决SQL Server数据发布需要使用专用的SQL Server管理工具的不便之处。
[关键词]VB SQL Server Excel表格数据库中图分类号:TP3文献标识码:A文章编号:1671-7597(2009)0520058-01SQL Server作为微软在Windows系列平台上开发的数据库,一经推出就以其易用性得到了很多用户的青睐。
Excel是微软公司出品的Office系列办公软件中的一个组件,确切地说,它是一个电子表格软件,可以用来制作电子表格、完成许多复杂的数据运算,进行数据的分析和预测并且具有强大的制作图表的功能。
使用VB将SQL Server和Excel结合起来处理数据会得到事半功倍的效果。
下面将介绍如何设计一个VB程序将SQL Server中查询到的数据导出生成Excel表格。
一、利用ADO的数据库访问组件获取SQL Server中的数据1.在VB工程中新建一个模块LocalInfo,在模块中定义SqlConn的公共函数用以建立与SQL Server数据库的连接SqlCn对象,函数代码如下:Public Function SqlConn(ByVal Ser As String, Data As String, User As String, Pass As String) As BooleanOn Error Resume NextSet SqlCn = New ADODB.ConnectionSqlCn.CursorLocation = adUseClientSqlCn.ConnectionString = "Provider=SQLOLEDB;Server=" + Ser + ";Database=" + Data + ";User ID='" + User + "';Password='" + Pass + "';"SqlCn.OpenIf Err ThenErr.ClearSqlConn = False '数据库连接失败MsgBox "数据库连接失败!系统不能正常运行!" & Chr(13) & Chr(10) & "请进入“数据库设置”重新设定数据库参数!" & Chr(13) & Chr(10) & "或与系统管理员联系,完成后请重新启动该系统。
VB是常用的应用软件开发工具之一,由于VB的报表功能有限,而且一但报表格式发生变化,就得相应修改程序,给应用软件的维护工作带来极大的不便。
因此有很多程序员现在已经充分利用EXECL的强大报表功来实现报表功能。
但由于VB与EXCEL由于分别属于不同的应用系统,如何把它们有机地结合在一起,是一个值得我们研究的课题。
一、 VB读写EXCEL表:VB本身提自动化功能可以读写EXCEL表,其方法如下:1、在工程中引用Microsoft Excel类型库:从"工程"菜单中选择"引用"栏;选择Microsoft Excel 9.0 Object Library(EXCEL2000),然后选择"确定"。
表示在工程中要引用EXCEL类型库。
2、在通用对象的声明过程中定义EXCEL对象:Dim xlApp As Excel.ApplicationDim xlBook As Excel.WorkBookDim xlSheet As Excel.Worksheet3、在程序中操作EXCEL表常用命令:Set xlApp = CreateObject("Excel.Application") '创建EXCEL对象Set xlBook = xlApp.Workbooks.Open("文件名") '打开已经存在的EXCEL工件簿文件xlApp.Visible = True '设置EXCEL对象可见(或不可见)Set xlSheet = xlBook.Worksheets("表名") '设置活动工作表xlApp.Cells(row, col) =值 '给单元格(row,col)赋值XLApp.Cells(i, 1).Interior.ColorIndex = i'设计单元格颜色i=1--56xlSheet.PrintOut '打印工作表xlBook.Close (True) '关闭工作簿xlApp.Quit '结束EXCEL对象Set xlApp = Nothing '释放xlApp对象xlBook.RunAutoMacros (xlAutoOpen) '运行EXCEL启动宏xlBook.RunAutoMacros (xlAutoClose) '运行EXCEL关闭宏自己用代码就可以获取颜色列表了Sub yansecode()For i = 1 To 56XlApp.Cells(i, 1) = ixlapp.Cells(i, 1).Interior.ColorIndex = iNextEnd Sub4、在运用以上VB命令操作EXCEL表时,除非设置EXCEL对象不可见,否则VB程序可继续执行其它操作,也能够关闭EXCEL,同时也可对EXCEL进行操作。
Visual Basic 程序设计Visual Basic 程序设计文档范本1.简介1.1 目的1.2 背景1.3 目标受众2.安装和配置环境2.1 和安装 Visual Basic2.2 设置开发环境2.3 配置第三方工具和插件3.程序基础3.1 Visual Basic 的基本语法3.2 变量和数据类型3.3 控制流和循环3.4 函数和子程序3.5 错误处理4.用户界面设计4.1 使用窗体设计器4.2 添加控件和布局4.3 设置控件属性4.4 响应用户事件4.5 实现用户输入和输出5.数据库操作5.1 连接到数据库5.2 创建数据库表5.3 查询和过滤数据5.4 插入、更新和删除数据5.5 数据库事务处理6.文件操作6.1 读取和写入文本文件 6.2 读取和写入二进制文件 6.3 文件和文件夹操作6.4 错误处理和异常情况7.网络编程7.1 创建网络连接7.2 通过网络发送和接收数据 7.3 实现客户端和服务器7.4 使用 HTTP 和 Web API8.测试和调试8.1 单元测试8.2 调试工具和技巧8.3 性能调优和内存管理8.4 错误日志记录9.发布和部署9.1 编译和打包应用程序9.2 创建安装程序9.3 部署到不同平台和环境 9.4 更新和升级应用程序附件:________在本文档中涉及到的示例代码、演示视频等附件,请参考附件文件。
法律名词及注释:________1.版权:________指对创作性作品的独占控制权,包括复制、分发、展示和修改等权利。
2.许可证:________法律授权证书,规定了其他人对著作的使用方式和限制条件。
3.开源:________指软件源代码向公众开放,允许他人查看、修改和分发的许可。
4.商标:________法律保护下的标识,用于区分产品或服务提供者。
5.法律责任:________依法需要承担的法律后果,如违反软件许可协议可能面临民事诉讼。
VB通用数据表格输出程序的设计做为一种简捷、系统的Windows应用程序开发工具,Visual Basic具有强大的数据处理能力,提供了多种数据访问方法,可以方便地存取Microsoft SQL Server、Oracle、XBase等多种数据库,被广泛应用于建立各种信息管理系统。
但是,VB缺乏足够的、符合中文习惯的数据表格输出功能。
虽然使用Crystal Report控件及Crystal Reports程序可以输出报表,但操作很麻烦,中文处理能力也不理想,特别是不能够用来制作不确定内容的表格。
笔者在用VB开发淮北市医疗保险信息管理系统时,需要对任意的查询结果进行表格输出,为此,编制了一个通用的数据表格输出控件,能够根据查询的结果自动生成二维中文表格,并打印输出,在此介绍给大家,共同探讨。
一.VB中的结果集VB提供的数据访问方法有数据询问对象(DAO)、Data控件、远程数据对象(RDO)、RemoteData控件(RDC)、ODBC API、VB SQL等,其中ODBC API比较复杂,开发、调试和支持非常困难;VB SQL是针对Microsoft SQL Server的,这两种方法使用的比较少,这里不做讨论。
比较常用的方法是DAO、Data控件、RDO、RDC,其中DAO和Data控件使用的结果集(又叫纪录集) 包含在Recordset 对象中,RDO和RDC使用的结果集包含在rdoResultset对象中。
通用表格输出的实现方法就是根据任意的Recordset对象或rdoResultset对象自动生成表格并输出。
二.表格的自动生成1. Recordset对象下面以Data控件为例,介绍Recordset对象的表格自动生成方法。
假设有Data控件名称为MyData,首先说明相关的内容及用法:(1) Data控件的结果集包含在它的Recordset对象中,引用方法为: MyData.Recordset。
(2) Recordset 对象的RecordCount属性为结果集的行数,它决定了表格的长度,该属性引用方法为: MyData.Recordset.RecordCount。
(3) Recordset 对象包含一个Fields集合,通过Fields集合的Count属性可以得到结果集中字段的个数,用做表格的列数,该属性引用方法为: MyData.Recordset.Fields.Count。
(4) Fields集合包括结果集合全部Field对象,这些Field对象引用方法为:MyData.Recordset.Fields(i),其中i是该Field对象在中的位置序号,从0开始计数。
(5) Field 对象的Name属性是该字段的名称,用做表格对应列的名称,引用方法为:MyData.Recordset.Fields(i).Name。
(6) Field 对象的Size属性是该字段数据的最大尺寸,引用方法为:MyData.Recordset.Fields(i).Size。
(7) Field 对象的Type属性是该字段数据的类型,引用方法为:MyData.Recordset.Fields(i).Type。
用Field 对象的Size和Type属性可以计算出表格对应列的宽度。
(8) Field 对象的Value属性是该字段的值,这是表格对应列的内容,引用方法为:MyData.Recordset.Fields(i).Value。
以上引用在VB中都可有多种引用方法,这里使用的是比较明了的一种,便于说明问题。
注意:表格的自动生成可分为两个步骤。
第一步,根据结果集中各字段的Size和Type属性,生成表格各对应列的宽度,用Format函数使用的格式字符串表示。
下面的Function getFmt()用来生成表格各列的格式字符串,调用时把Field 对象的Type和Size属性值分别赋给形式参数intType和logSize。
Private Function getFmt(intType As Integer, logSize As Long) As StringDim i As IntegergetFmt = ""'返回的结果串初始置空Select Case intTypeCase dbBooleangetFmt = getFmt & "\ \ \ \0;\ \ \ \1"'Boolean 型值转换为0、1,Case dbBytegetFmt = "@@@@"Case dbIntegergetFmt = "@@@@@@"Case dbLonggetFmt = "@@@@@@@@@@"Case dbCurrencygetFmt = "@@@@@@@@@@"Case dbSinglegetFmt = "@@@@@@@@@@"Case dbDoublegetFmt = "@@@@@@@@@@"Case dbDategetFmt = "@@@@@@@@@@"Case dbBinarygetFmt = "@@@@"Case dbTextIf logSize >= 40 Then'限制一列最多打印40个半角字符getFmt = "@@@@@@@@@@@@@@@@@@@@@@@ _@@@@@@@@@@@@@@@@@"ElseFor i = 0 To CInt(logSize / 2) * 2 - 1getFmt = getFmt & "@"Next '调整数值长度为偶数,以适应汉字制表符End IfCase dbLongBinarygetFmt = "@@@@"Case dbMemogetFmt = "@@@@@@@@@@@@@@@@"Case dbGUIDgetFmt = "@@@@"Case dbBigIntgetFmt = "@@@@@@@@@@"Case dbVarBinarygetFmt = "@@@@"Case dbCharFor i = 0 To CInt(logSize / 2) * 2 - 1getFmt = getFmt & "@"NextCase dbNumericFor i = 0 To CInt(logSize / 2) * 2 - 1getFmt = getFmt & "@"NextCase dbDecimalFor i = 0 To CInt(logSize / 2) * 2 - 1getFmt = getFmt & "@"NextCase dbFloatgetFmt = "@@@@@@@@@@"Case dbTimegetFmt = "@@@@@@@@"Case dbTimeStampgetFmt = "@@@@@@@@@@"End SelectEnd Function第二步,取结果集的内容并根据各列的格式字符串生成表格,生成的表格存放在字符串数组strDy()中,下面用Sub Dy()例示这一步骤。
Dim strDy() As String'存放格式化后的表格内容Dim Fmt() As String'存放表格各列的格式字符串'以上二个数组变量的元素个数根据结果集的行数和列数在程序中设定Dim str,str0,str1,str2 As String'临时使用的串变量Dim i,j As Integer'临时使用的整型变量Dim intDc As Integer '存放表格行数,实际上即是strDy()的元素个数Private Sub Dy()With MyData.Recordset.MoveLastReDim strDy(.RecordCount + 8)'需存放标题、表框等,所以加8ReDim Fmt(.Fields.Count)For i = 0 To .RecordCount + 7strDy(i) = "" '初始置空NextFor i = 0 To .Fields.Count - 1Fmt(i) = getFmt(.Fields(i).Type, .Fields(i).Size)'生成表格各列的格式字符串j = Len(.Fields(i).Name)If j > Len(Fmt(i)) ThenFmt(i) = String$(Int((j / 2) + 0.5) * 2, "@")'标题(字段名) 字多则增大列宽End IfNextstr = "┃"str0 = "┏"str1 = "┠"str2 = "┗" '设定表格为粗框细线,可根据需要改变For i = 0 To .Fields.Count - 1For j = 1 To Len(Fmt(i)) / 2str0 = str0 & "━"str1 = str1 & "─"str2 = str2 & "━"NextIf (i = .Fields.Count - 1) Thenstr = str & Format(.Fields(i).Name, Fmt(i)) & "┃"Elsestr = str & Format(.Fields(i).Name, Fmt(i)) & "│"End IfIf (i = .Fields.Count - 1) Thenstr0 = str0 & "┓"str1 = str1 & "┨"str2 = str2 & "┛"Elsestr0 = str0 & "┯"str1 = str1 & "┼"str2 = str2 & "┷"End IfNextstrDy(0) = "表格标题"'通过在标题前增加空格可使标题居中strDy(1) = ""strDy(2) = Format(Now, " 打印日期:yyyy年m月d日")strDy(3) = str0strDy(4) = strstrDy(5) = str1intDc = 6.MoveFirstDo While Not .EOFstr = "┃"For i = 0 To .Fields.Count - 1If IsNull(.Fields(i).Value) Then'处理Null 值If i = .Fields.Count - 1 Thenstr = str & Format(" ", Fmt(i)) & "┃"Elsestr = str & Format(" ", Fmt(i)) & "│"End IfElseIf i = .Fields.Count - 1 Thenstr = str & Format(Left$(.Fields(i).Value, Len(Fmt(i))), Fmt(i)) & "┃"Elsestr = str & Format(Left$(.Fields(i).Value, Len(Fmt(i))), Fmt(i)) & "│"End IfEnd IfNextstrDy(intDc) = strDy(intDc) & strintDc = intDc + 1.MoveNextLoopstrDy(intDc) = str2End WithEnd Sub在实际编程中还要排除二进制数据字段,全角与半角字符的匹配调整,处理数据中出现的换行符、回车符、制表符,等等,限于篇幅,这里不于介绍。