ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
300集Office 2010微视频教程 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 119|回复: 8

[分享] JS宏通过fetch写入文本访问sqlite3

[复制链接]

TA的精华主题

TA的得分主题

发表于 2024-6-13 17:05 | 显示全部楼层 |阅读模式
之前分享的帖子,吹过20年前的cgi方式,说是可以方便的给JS宏提供接口,但举的例子不直观,看不出效果
今天正好试试JS通过cgi接口,写入utf8文本,以及读写sqlite3数据库

  1. function tt()
  2. {
  3.         Shell(`cmd /c cd "${ThisWorkbook.Path}" && busybox ash -c "pgrep -x httpd > /dev/null || httpd -p 8080"`, jsHide)
  4.         fetch('http://localhost:8080/cgi-bin/tee.sh?a.txt', {
  5.                 method: 'POST',
  6.                 body: 'utf8文本内容'
  7.         }).then(r=>{console.log(r.status)})
  8. }

  9. function sql()
  10. {
  11.         Shell(`cmd /c cd "${ThisWorkbook.Path}" && busybox ash -c "pgrep -x httpd > /dev/null || httpd -p 8080"`, jsHide)
  12.         fetch('http://localhost:8080/cgi-bin/sql.sh', {
  13.                 method: 'POST',
  14.                 body: 'create table t1 (x int);insert into t1 values (123);select * from t1;'
  15.         }).then(r=>r.json()).then(e=>{console.log(JSON.stringify(e))})
  16. }
复制代码
JS宏这里其实就干两件事,用Shell启动cgi服务,用fetch发送请求
Shell这一句都一样,大概意思是,判断httpd是否已经启动,如果没有就启动httpd(它提供cgi服务)
然后就是fetch发送请求:
tt这个宏,是要写入文本,url问号后面是要写入的文件名,body是要写入的内容,完成后只返回个状态
sql这个宏,是要读写sqlite3,body里是要执行的语句,完成后会收到json数据

然后看一眼cgi脚本具体是啥
tee.sh的内容如下:
第一行声明用sh执行这个脚本(如果你喜欢,可以改成python等其他)
第二行声明返回的是纯文本,utf8编码
第三行,将请求里的body写入上一级目录里,以url问号后面的值作为文件名

  1. #!/bin/sh
  2. echo -e 'Content-type: text/plain; charset=utf-8\n'
  3. tee "../${QUERY_STRING##*\?}"
复制代码
sql.sh的内容如下:
第一行声明用sh执行
第二行声明返回json
第三行用sqlite3.exe处理body里传递过来的命令,返回json,数据库在上级目录里的a.db

  1. #!/bin/sh
  2. echo -e 'Content-type: application/json; charset=utf-8\n'
  3. ../sqlite3 -json ../a.db
复制代码


总的来说,写的代码很少,cgi方面就三行,也可以灵活更改,比如,需要写入gbk文件,那就把tee命令改成iconv -f utf-8 -t gbk -c | tee这样,就是转码后保存gbk文本;再比如,sqlite3改成duckdb也是一样,参数都一样


动画.gif

test.7z

1.43 MB, 下载次数: 3

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2024-6-13 17:33 来自手机 | 显示全部楼层
Shell启动cgi服务,用fetch发送请求

post发送http请求,个人感觉cgi不如asp .net dotnet 或者node php灵活

TA的精华主题

TA的得分主题

发表于 2024-6-13 17:39 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2024-6-13 17:44 | 显示全部楼层
公司没有shell的执行权限。。看来原生JSA还是太局限了

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-6-13 17:44 | 显示全部楼层
xd3210 发表于 2024-6-13 17:39
已下载学习,测试报错

新版wps需要在设置里关闭沙箱保护,才可以用shell执行外部命令
所以,我也在想,shell这句干脆删掉,手动在外面开启httpd服务

TA的精华主题

TA的得分主题

发表于 2024-6-13 17:47 | 显示全部楼层
wanghan519 发表于 2024-6-13 17:44
新版wps需要在设置里关闭沙箱保护,才可以用shell执行外部命令
所以,我也在想,shell这句干脆删掉,手 ...

俺们的wps直接没有沙箱这个设置了,阉割掉了

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-6-13 17:51 | 显示全部楼层
liu0wei2008 发表于 2024-6-13 17:47
俺们的wps直接没有沙箱这个设置了,阉割掉了

可以试试删除shell那一句
然后在这个文件夹里开启cmd,执行busybox httpd -p 8080
linux的终端里也是一样

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-6-13 17:58 来自手机 | 显示全部楼层
zpy2 发表于 2024-6-13 17:33
Shell启动cgi服务,用fetch发送请求

post发送http请求,个人感觉cgi不如asp .net dotnet 或者node php灵 ...

是的,这个cgi只是为了偷懒
灵活还得是自己写的这些

TA的精华主题

TA的得分主题

发表于 2024-6-13 18:38 来自手机 | 显示全部楼层
wanghan519 发表于 2024-6-13 17:58
是的,这个cgi只是为了偷懒
灵活还得是自己写的这些

也在想,shell这句干脆删掉,手动在外面开启httpd服务
各有利弊。
这样也可以把服务部署在网络上,远程服务。
也不需要啥权限了。
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

关闭

最新热点上一条 /1 下一条

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-6-18 19:13 , Processed in 0.042798 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表