百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

Access数据库、Excel表格与VB编程完美结合实现Excel表格透视功能

haoteby 2025-02-28 15:51 6 浏览

现有9个班级的学生成绩表,包括三门课的成绩:

要求在Excel中画出每个班级每科平均成绩柱状图。

如果单纯的用Excel整理数据很是麻烦,一共九个班级,每个班级都要求三门课的平均成绩,费时费力。

可以借助Access数据库将数据统计出来,然后回到Excel进行成图。

第一步:将数据直接粘贴到Access数据库

复制Excel表格中的学生成绩数据→打开已有的Access数据库→创建表→粘贴保存

第二步:创建查询,统计数据

创建→查询设计→写语句→运行:

select 班级,avg(语文),avg(英语),avg(数学) 
from 表1 
group by 班级

运行结果:

第三步:复制到Excel表格中,进行成图

点击左上角→右键复制→打开Excel表格→粘贴→成图

粘贴到Excel表格中:

成图:

点击插入→图表→柱状图

结果:

其实,在实际工作中有很多问题是可以通过Access数据库与Excel表格结合来解决的,这样很能够节省时间,虽然在Excel表格当中也提供了很多函数能够分组求得我们想要的结果,但是步骤繁琐。

能通过这种结合的方式可以很好的解决不同的难题,一个是利用了Access数据库处理数据的优势,一个是利用了Excel表格成图的优势,两个优势结合,必然事半功倍。

VB程序自动数据处理Access数据库与Excel表格数据

VB程序设计比较容易学习,一些非计算机专业的人士也能够轻松学好VB程序设计,VB程序设计来应付你日常工作中的问题,是完全可以胜任的,有一些比较复杂的数据需要进行处理运算,如果单纯的有表格或者数据库,整个操作是相当麻烦的,不仅浪费了时间,还容易出错,下面来介绍一下利用VB程序如何读取Access数据库中的数据与Excel表格中的数据。

VB程序读取Excel表格数据

首先打开VB6.0程序设计,打开后是这个界面:

这是一个空的程序窗口,我们还没添加任何控件和代码,我们先不细介绍VB6.0的界面,我们现在只用到它的按钮控件,就是上面圈起来的东东。它在里面叫做“commandbutton”,我们双击它,它就跳到我们的窗口界面了:

再来继续双击,就可以编写代码啦:

其实和Access数据库与Excel表格的VBA宏是差不多的,只不过语法上略有差别,VB6.0可以很灵活的去做一个小的软件程序,而VBA宏只能作为插件使用。

写读取Excel表格数据的程序,其实读取的代码基本是固定的,只要大家把这个固定的程序代码直接复制进去就好,根本不用自己亲自动手去敲代码的。

大家可以看一下这些代码,都表示什么意思呢?

我们来看定义的内容:

Dim xlApp As Excel.Application
Dim xlBook As Excel.Workbook
Dim xlSheet As Excel.Worksheet
Dim xlSheet1 As Excel.Worksheet

这几个定义都是固定的模式,我们使用VB程序对Excel表格数据进行读取时,都要对Excel进行定义,这样VB程序才能够识别出所要读取的文件。

Set xlApp = CreateObject("Excel.Application")

是建立Excel文件用的,它表示建立一个Excel对象,对象建立完了之后,我们就可以打开指定的文件了,就是下面这个:

Set xlBook = xlApp.Workbooks.Open("F:\报表运行表.xls")
xlApp.Visible = True//表示让对象可见,就是在读取的时候,我们能看到文件的打开,
Set xlSheet1 = xlBook.Worksheets("表1")//表示要读取文件中的哪个表,这里面是读取"表1"
xlSheet1.Activate//表示激活要读取的表,只有激活了,才能保证操作在当前表进行

以上都是固定的模式,大家可以复制即可,不用敲代码。

紧接着,For i = 4 To 89....Next i就是我们读取数据和处理数据的过程了,具体要根据实现什么样的功能,来编写程序。

再往下还是固定的模式,就是读取完文件内容后,要把文件关闭掉,要不它会始终占据内存的:

xlBook.Close
xlApp.Quit
Set xlApp = Nothing

上面就是关闭文件,释放对象的过程。

MsgBox "good job"

就是程序运行完之后会弹出小的对话框,对话框显示的文字就是“good job”,当然也可以显示“程序已经运行完毕”,比较灵活。

代码写完之后,我们来运行程序,就是点击这个小三角号:

运行之后,会弹出:

可以看到,这窗体上面只有一个按钮,我们要想运行我们刚刚写的代码,只需要点击上面这个按钮就可以啦,就是点击“Command1”。

VB程序读取Access数据库数据

下面再来看看VB如何操作Access数据库,其实VB操作Access数据库的代码理简单,看看下面这个就知道啦:

可以看到,前三行是定义:

Dim conn As New ADODB.Connection
Dim strConn As String
Dim sql As String

是固定的模式,直接复制进去即可。

strConn = "Provider=microsoft.ace.oledb.12.0;Data Source=D:\0基础资料\data.accdb"

这条语句是读取路径,找到文件的位置,也是固定的模式,只要把文件名改了即可。

再往下是一条查询语句:

sql2 = 
"
select b.* 
into yj1 
from (select jh,min(rqx) as rqx1 from yjs07 group by jh) a 
left join yjs07 b on (a.jh=b.jh and a.rqx1=b.rqx)
"

这条查询语句就是我们要实现的复杂操作,当然我们在程序里面可以上百条的查询语句,只要遇到同样的工作,我们可以直接运行程序即可。

再往下:

conn.Open strConn
conn.Execute (sql1)

这两条语句就是执行我们前面写的的查询语句啦,也是固定的,只要把查询语句的名称改了就好。

Set conn = Nothing//这是释放文件,用完了要关掉。

再往下就是MsgBox "good job",就是和上面操作Excel表格一样,程序运行完了之后会弹出一个对话框:

其实非计算机专业的人士也能够很好的学会编程,只要掌握技巧是很容易掌握的,小编身边有不少非计算机专业的人都在学习编程,只要掌握了编程,手头的工作会变的如此轻松。

VB程序存取Excel数据实例讲解

先来看一个VB程序存取Excel表格数据的例子,我们要把“sheet1”表中一班的学生语文成绩用VB程序存取到“sheet2”表里面去。

首先打开安装好的VB6.0程序,然后保存到一个指定的文件夹下面,这样我们就有了一个空的VB程序,我们双击按钮控件,按钮控件就会自动跳到窗体上面:

在进入代码窗口之前我们简单把这个控件设计成好看的样式,点击属性窗口图标,就会弹出一个属性窗口,在这个窗口下,就能对我们的按钮进行设计啦:

然后点击按钮控件,在右边的属性窗口找到“Caption”字样,它就是控件要显示的名字,我们可以任意修改,改完后的效果是这样的:

再来改一下它的色彩吧,这样看起来漂亮些,就改成下面这样吧:

可以看到按钮变颜色,如果选上色彩后,没有变色,那一定有一个选项没选,就是下面这个要点Style选项的第二个类型,就允许我们对控件的色彩进行改变:

好了,继续双击这个设计完的按钮吧,这样就进入到编写代码的窗口了,就是下面这个样子:

先把昨天的固定代码复制过来,就是读取Excel表格数据固定引用的代码,在代码窗口的开始部分:

Dim xlApp As Excel.Application
Dim xlBook As Excel.Workbook
Dim xlSheet As Excel.Worksheet
Dim xlSheet1 As Excel.Worksheet
Dim xlSheet2 As Excel.Worksheet
Set xlApp = CreateObject("Excel.Application")
Set xlBook = xlApp.Workbooks.Open("F:\成绩表.xlsx")
xlApp.Visible = True
Set xlSheet1 = xlBook.Worksheets("Sheet1")
xlSheet1.Activate

上面的"F:\成绩表.xlsx"和"Sheet1"是我们要读取数据的目标文件和目标表,一定要和我们的数据一致。

在代码窗口的结尾部分是这些固定的代码:

xlBook.Close
xlApp.Quit
Set xlApp = Nothing

MsgBox "主人,黑猫警长向您报告,程序已运行完毕"

MsgBox后面的内容是可以随便修改的。

准备的代码都已经完工,就等着在上面中间的空白部分去实现我们要实现的工作,我们的目标是要把“sheet1”表中一班的学生语文成绩自动存取到“sheet2”表里面去。

我们先来把“sheet1”表中一班的数据读到变量里面去:

m = 1
For i = 2 To 121【一共有121条学生数据】
If Trim(xlSheet.Cells(i, "a")) = "一班" Then【条件判定】
gs = gs + 1【记录一班学生数量】
a1(m) = xlSheet1.Cells(i, "a")【读班级】
b1(m) = xlSheet1.Cells(i, "b")【读姓名】
c1(m) = xlSheet1.Cells(i, "c")【读语文成绩】
m = m + 1
End If
Next i

我们已经读完数据啦,下面我们来把从“sheet1”表中读取的一班数据写到“sheet2”表中去:

m = 1
For i = 2 To gs【gs表示一班的学生人数】
xlSheet2.Cells(i, "a")= a1(m) 【写班级】
xlSheet2.Cells(i, "b")= b1(m) 【写姓名】
xlSheet2.Cells(i, "c")= c1(m) 【写语文成绩】
m = m + 1
Next i

这样,我们的程序就差不多啦,不过还要修改几处,就是前面要加上变量的定义,否则程序就会报错,定义加在前面即可:

Dim a1(1 To 50), b1(1 To 50), c1(1 To 50)//【定义数组,装数据用的】
Dim gs, i, m//【定义变量】

最后,编完的程序是这样的:

来点击上面的小三角运行吧,运行之后是这样的:

点击按钮,看看有什么反应:

直接弹出这个文件啦,程序瞬间完成了我们的工作,问是否保存呢,我们点击取消就行,文件就会打开着,之后我们再保存。

点完取消会弹出这个信息框:

就是我们在程序里面做的提示信息,告诉我们工作已经完成。

VB程序操纵Access数据库

先来创建一个空的VB程序,当然也可以用昨天做好现成的,只不过我们在旁边再加一个“按钮控件”而已,我们按照昨天的设置,对今天新加的这个按钮显示的内容“Caption”改成“逆天操纵Access”,和背景色“BackColor”改成“粉色”,以及字体改成“楷体”和字体大小改成“小四”号,完成了相应的设置之后,就是下面这个样子:

可以看到这个窗体多了一个按钮,双击它进入到编写代码窗口:

可以看到,上面的代码就是我们昨天编写的存取Excel文件数据用的代码,下面这个模块是空的:

Private Sub Command2_Click()
End Sub

我们需要编写程序代码,前半部分是固定模式的代码:

Dim conn As New ADODB.Connection//【定义一个数据库连接】
Dim strConn As String//【定义一个字符串变量存放数据库所在路径】

前半部分一切搞定,再来看后半部分:

Set conn = Nothing//【工作完成后释放数据库连接】
MsgBox "您的程序运行完毕"//【弹出消息框示意工作已经完成】

中间开始写我们要实现具体工作的代码。

现在就对下面这个学生成绩表,求三门成绩的总分放在新的字段中:

写代码:

Dim sql1, sql2 As String//【定义两个字符串,用来装查询语句】
strConn = "Provider=microsoft.ace.oledb.12.0;Data Source=F:\1文章\个人数据库.accdb"//【读取数据库所在路径】
sql1 = "alter table xscj add column 总分数 float"//【增加一个“总分数”字段的语句】
sql2 = "update xscj set 总分数=yy+yw+sx"//【算三门总分的语句】
conn.Open strConn//【打开数据库】
conn.Execute (sql1)//【执行语句1】
conn.Execute (sql2)//【执行语句2】
conn.Close//【关闭数据库】

好了,写完了,放在程序里面就是这样的:

运行之后,就是这样了:

点击下面新增加的这个按钮,就是刚刚我们编写代码的控件,程序就开始运行:

可以看到,我们刚刚编写的程序瞬间运行完成,点击确定,来看看我们的数据库里面有什么变化吧:

总分算出来了,并且还在我们的数据库里面增加了一个字段,就是我们在程序里面已经添加的。其实,这是最简单的,只有更复杂的工作才会动用我们去编程序,所以先把简单的学会,复杂的自然而然慢慢就学会。

Access数据库对字段进行分类查询

有时,我们想要对数据库中的某类数据进行分类整理,使得结果一目了然,下面这个学生成绩表的总分,我们已经算出来了,我们想要很直观的表达哪个学生三门的平均成绩及格啦,哪些没有及格:

那么有什么方法可以实现呢?下面我们来看看这两种方法:

一是使用update语句对字段进行更新修改

第一步,进入设计视图,新建一个字段,字段名是成绩分类

回到数据表视图吧。

第二步,创建一个查询,写查询语句:

update xscj 
set 成绩分类='及格' 
where 总分数>=180

运行结果:

第三步,再创建一个查询,查询语句为:

update xscj 
set 成绩分类='及格' 
where 总分数<180

运行结果:

再来看看第二种方法

二是使用iif函数直接对表进行查询

创建一个查询,查询语句为:

select 姓名,iif(总分数<180,'不及格','及格') as 平均成绩 
from xscj

运行结果:

第一种方法以前接触过,就是对已有的学生成绩表进行更新查询,也就是对原表进行了增加字段的改动,这里面我们使用的是update语句,这个语句有固定的语法格式:

update 表名 
set 字段名 
where 条件

第二种方法中的iif函数,我们并不经常接触到,但是这个函数对我们平常是非常有用的,它能够在不修改表的情况下,查询出我们想要的结果,它实际并没有对原来存在的学生成绩表进行改动。

所以,两种方法,当需要改动时,我们用第一种方法,当不需要对原表进行改动时,我们选择第二种方法,你记住这个iff函数的语法格式:

【iif(条件,结果1,结果2)】,当条件满足时,即为真时,那么就返回结果1,否则返回结果2,上面的查询表示当总分数满足小于180分的时候,我们就返回“不及格”的结果,否则返回“及格”的结果。

喜欢的读者请关注、转发!

相关推荐

Python爬虫进阶教程(二):线程、协程

简介线程线程也叫轻量级进程,它是一个基本的CPU执行单元,也是程序执行过程中的最小单元,由线程ID、程序计数器、寄存器集合和堆栈共同组成。线程的引入减小了程序并发执行时的开销,提高了操作系统的并发性能...

A320-V2500发动机系统FADEC介绍(2)

目的全权数字发动机控制(FADEC)系统在所有飞行和运行阶段提供全范围发动机控制。...

三国志战棋版:玩家“二叔”用这套群DOT在比武中拿下31胜5负

声明:本文首发于今日头条,而后发布于“鼎叔闯三棋”的微信公众号、抖音、哔哩哔哩和小红书平台,如果在其他平台就是抄袭。...

真正的独一无二:Dot One 推出 DNA 定制系列 139英镑起

相信很多人在挑选衣物时有着这样的困扰,综合了性价比、面料等因素后好不容易找到了心仪的款式,还要担心是否会撞衫,不管是擦肩而过的陌生人还是身边的熟人,都令人尴尬。小部分人为此热衷于购买少量的古着或者限量...

崩铁:周年庆福利再升级,老角色加强时间确定,3.xdot体系反转

#埃安UT大一圈高级很多#...

Dotgo推出RBMHub,扩大了CPaaS提供商的覆盖范围和功能

据telecompaper网7月15日报道,用于商业消息传递的RichCommunicationServices(RCS)解决方案的领先提供商Dotgo宣布推出RBMHub。RBMHub的推出扩大了C...

深度解析:快照取消Dot职业的将何去何从

写在前面曾几何时,术士的出现便被冠以dot大师的名头,从远古时期的献祭腐蚀虹吸不如暗牧一个痛,到TBC上满dot=荣誉击杀+1,到wlk接近全暴击的冰晶腐蚀,再到CTM就算了吧MOP的各种变态吸x放...

星穹铁道:抽卡芙卡之前,你必须了解什么是dot!

卡妈终于上线了,可还是有很多人不明白什么是dot伤害,抽了卡妈直接玩起了直伤流,把一个持续伤害的引爆器玩成了打手,卡妈打dot伤害是远高于直伤的,有了卡妈的玩家一直了解dot,不然这卡妈就真被玩成四不...

游戏界的闪耀星辰陨落:悼念知名游戏博主″dotα牛娃″

无尽哀思!在数字时代浪潮中,游戏不仅是消遣娱乐的代名词,更是连接心灵的桥梁,构筑了无数人的青春回忆。在这片浩瀚无垠的游戏宇宙中,有这样一位博主,他以独特的风采、深邃的洞察力和无尽的热情,成为了玩家心中...

直击2017新加坡同性恋聚会Pink Dot,自由爱!

今年的“粉红点”又来啦~这个支持LGBT群体(男女同志、双性恋、跨性别等)群体的活动,从2009年起,已经在新加坡举办8年了!”这个非营利的同性恋权益活动,主要是希望大家了解到,不管一个人的性倾向或...

python-dotenv,一款超级实用处理环境变量python库

python-dotenv,一款超级实用处理环境变量python库python-dotenv概述:...

亚马逊语音助手毫无征兆发笑 诡异至极吓坏用户

来源:新华网美国电商亚马逊7日承诺,将更改名下“亚历克萨”语音系统设置,令它不会莫名发笑,免得吓坏用户。“亚历克萨”是亚马逊开发的语音助手软件,可服从用户语音指令完成对话、播放音乐等任务。依照原来设计...

2022最火英文网名男女生

精选好听英文昵称带翻译1.moveon(离开)2.Monster(怪物)3.Solo吉他手4.Finish.(散场)...

智能家具 RecycleDot 的出现给传统家具厂商带来新的挑战

从可穿戴手环、手表到智能衣服,智能硬件逐步渗透到每一个领域。最近有一对父子MikeSandru和JohnSandru在自家的车库中设计了一款智能家具RecycleDot,给日渐萧条的家具行...

欧洲通信卫星公司 OneWeb 敦促印度DoT尽早批准提供卫星宽带服务

据telecomtalk2月17日报道,欧洲通信卫星公司EutelsatOneWeb近日敦促印度电信部(DoT)尽快批准其在印度部署双地球站网关的计划,以便连接其近地轨道(LEO)全球卫星星座,并...