EXCEL和aardio交互:利用httpserver功能(学习记录)

By 周山下樵夫 at 2021-07-15 • 2人收藏 • 1980人看过

借宝地,留一下学习记录.

学习原因:

用aar处理excel已经学过com.exlcel库,这个像vba一样处理excel,坏处是必须要有依赖,另外excel有进程,代码有问题容易有残留进程

然后群内大佬做的libxl免依赖处理excel,非常好用,两位大佬封装了库,目前我用到的不多,也就是提取数据和生成数据.


后来陆陆续续学了aar的iis功能,又知道了get和post方法,因此有一个联想.先用aar生成一个单文件的http服务器,然后用excel的vba进行调用.这样vba相当于ui了,并且从我个人习惯excel的加载项,总比再打开一个exe软件进行处理excel更方便.

说干就干开始记录自己学习过程

10 个回复 | 最后更新于 2021-07-17
2021-07-15   #1

(

题外话:为什么用http服务器进行交互

一:我是银行内网用户,固然可以系统开启iis但是以后换电脑还要重新搭建,有点麻烦.

另外只要局域网用户,还能调用我http服务器.比如我有2台电脑,这样a电脑就从b电脑读取数据了

二:因为别的方法我也不会啊,估计还有进程通信啥的方法,但是我不会也没听过O(∩_∩)O哈哈~

)

第一步就是先用aar开启服务器

这个代码库里有很多种,这里我选用<多线程HTTP服务器>的例子,因为这个最短..我能看懂

//多线程HTTP服务器
import console;
import process;
import wsock.tcp.simpleHttpServer;
var server = wsock.tcp.simpleHttpServer("192.168.31.188",/*8081*/);

console.setTitle("web服务器已启动");
console.log( server.getUrl() )
process.execute( server.getUrl() );

server.run(
	function(response,request,session){
		response.write('
		<!doctype html>
		<html>
		<body>
		<p>hello world</p>
		</body>
		<html>
		')

)

直接进行抄袭,如果是本机使用的话,服务器地址直接是127.0.0.1就好了.因为我excel装在虚拟机里.所以我这里用局域网的ip地址


这里我有一个疑问run()是什么函数,例子有点少有点不明,手册上说

也可以传入一个表参数,键为页面相对路径,值为响应数据或回调函数,

希望有好心人给个例子.


上面代码就是我开启了一个http服务器,然后该网站返回一个hell word


2021-07-15   #2

示例很成功,直接hello world了image.png



然后是excel端,这个网上有很多vba用get进行爬虫的例子.这里也直接进行抄袭

Sub test()
    Dim http
    Set http = CreateObject("Microsoft.XMLHTTP")
    Dim url
    url = "http://192.168.31.188:63876"
    http.Open "GET", url, False
    http.send
Debug.Print http.responsetext
End Sub

image.png

非常成功也能用vba访问了自己搭建的网站/并且是虚拟机里的excel 相当于是跨计算机了

2021-07-15   #3

下一步就要实现一些小功能,有什么东西是aar处理方便,vba比较麻烦的呢.

我这里选用我最常用的中文金额 也就是大写金额.

先用aar实现中午大写金额.嗯,这个也有示例所以进行抄抄抄

server.run(
	function(response,request,session){
		import string.chineseNumber; 
		var zh = string.chineseNumber(); 
		if(request.get["api"]=="chineseNumber"){		
			response.write(zh.number(request.get["num"]))
		}
	}
)

把run里面改成这样.

必须在run里面要重新导入chineseNumber库,这里有2个参数,一个指明api的功能,另一个数值

这样我可以加入不同的api


image.png


由于随机端口很麻烦..直接指定8888端口了

非常成功直接大写数字100了


2021-07-15   #4

继续写vba这端的代码

Sub test()
    Dim http
    Set http = CreateObject("Microsoft.XMLHTTP")
    Dim url
    url = "http://192.168.31.188:8888?api=chineseNumber&num=100"
    http.Open "GET", url, False
    http.send
Debug.Print http.responsetext
End Sub

image.png


非常成功调用aar的功能,进行了中文化的一个数值


那开始思索下一步应该做什么.那应该做出excel的一个自定义函数了,这样可以随时随地在使用

2021-07-15   #5

vba当中,模块里面的function是可以直接被调用的,因此把test函数改写成

Function test(num)
    Dim http
    Set http = CreateObject("Microsoft.XMLHTTP")
    Dim url
    url = "http://192.168.31.188:8888?api=chineseNumber&num=" & num
    http.Open "GET", url, False
    http.send
Debug.Print http.responsetext
test = http.responsetext
End Function

image.png


非常成功test函数,就像excel里的一个普普通通的函数,对单元格的数字进行了中文化



2021-07-16   #6

可是没想到问题来的这么快


因为在银行工作,在金额栏位.100肯定要叫100元整

那run里面继续改成

server.run(
	function(response,request,session){
		import string.chineseNumber; 
		var zh = string.chineseNumber(); 
		if(request.get["api"]=="chineseNumber"){		
			response.write(zh.money(request.get["num"],true,true))
		}
	}
)


然后我就碰到了一个问题,

我excel表格里居然不更新!

100还是翻译成了一百

试了好几次后,突然想起.可能是缓存的问题...

好吧,以后要留心,百度下怎么样get不使用缓存


今天就到这里.希望有朋友教我更厉害的方法

2021-07-16   #7

QQ图片20210716000617.png

补图

最新的105和100结果不一样,就是因为上面的连接已经变成了缓存..

2021-07-16   #8

XMLHTTP是使用在客户端的组件,它是有缓存的。比如,我们用 Msxml2.XMLHTTP 发送 HTTP POST 请求模拟登陆了某个网站,它会把登陆时的 Cookie 和 Session 缓存下来,当我们想获取网站的数据时直接 HTTP GET 就行了,不需要人工发送 Cookie 和 Session。从这个角度上来说,有缓存也是它的优点。


但是,在有些时候,缓存会给我们造成麻烦。打比方说我们要写一个 VBS 脚本暴力破解某个网站的账号,假设我们已经破解了一个账号,继续破解时,由于缓存的关系,网站会认为我们已经登陆了,这样会干扰我们判断账号是否破解成功。也就是说,当成功破解一个账号后,需要多加几行代码登出这个账号。在这种情况下,就应该使用没有缓存的 Msxml2.ServerXMLHTTP。


即,如果需要缓存,则用 Msxml2.XMLHTTP;否则应该用 Msxml2.ServerXMLHTTP。

————————————————

试了一下

vba里直接替换Msxml2.ServerXMLHTTP会失败的..暂时没办法.今天先这样了



2021-07-16   #9

这种方式我倒是第一次见,学习了,赞一个。

2021-07-16   #10

缓存问题可以考虑用 POST ,或者 GET 的请求参数加个时间戳或者随机值比如 /api?t=xxx /api?r=xxx,还有就是请求头或者返回头加个 Cache-Control:no-cache 应该也是可以的

登录后方可回帖

登 录
信息栏
 私人小站

本站域名

ChengXu.XYZ

投诉联系:  popdes@126.com



快速上位机开发学习,本站主要记录了学习过程中遇到的问题和解决办法及上位机代码分享

这里主要专注于学习交流和经验分享.
纯私人站,当笔记本用的,学到哪写到哪.
如果侵权,联系 Popdes@126.com

友情链接
Aardio官方
Aardio资源网


才仁机械


网站地图SiteMap

Loading...