ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[讨论] 关于nativex不成熟的想法

[复制链接]

TA的精华主题

TA的得分主题

发表于 2022-8-27 09:10 来自手机 | 显示全部楼层 |阅读模式
ahk功能蛮多的,还可以调用com对象,github上又有可以编译成dll的版本,而wps又提供了nativex,就想着能不能把ahk编译成wps能用的dll,那jsa的createobject不就有用武之地了,鄙人不熟悉vs,正在研究,有没有感兴趣的朋友讨论一下

TA的精华主题

TA的得分主题

发表于 2022-8-27 09:12 | 显示全部楼层
完全不懂,等你研究出来,我来白瞟

TA的精华主题

TA的得分主题

 楼主| 发表于 2022-8-30 18:56 | 显示全部楼层
用gitee上的jsdemo照猫画虎,弄了个dll,只改了一个方法,Exec可以执行一个shell命令并返回stdout内容。初学c++肯定很多bug,不过总算能在jsa里用CreateObject了
先用powershell注册一下dll
  1. & 'C:\Users\Administrator\AppData\Local\Kingsoft\WPS Office\11.1.0.12313\office6\ksomisc.exe' -regnativex .\jsdemo.dll -i $false
复制代码
然后,jsa里面可以写
  1. function NativeDemo_OnBtn1Click()
  2. {
  3.         let rootObj = CreateObject("JsDemo")
  4.         alert(rootObj.Exec("cmd /c echo fd你好sa"))
  5. }
复制代码




jsdemo.7z

8.37 KB, 下载次数: 14

评分

2

查看全部评分

TA的精华主题

TA的得分主题

发表于 2022-8-31 14:42 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2022-8-31 14:44 | 显示全部楼层
wanghan519 发表于 2022-8-30 18:56
用gitee上的jsdemo照猫画虎,弄了个dll,只改了一个方法,Exec可以执行一个shell命令并返回stdout内容。初 ...

看不懂这个CreateObject是干什么用的,和VBA大不一样?

TA的精华主题

TA的得分主题

 楼主| 发表于 2022-8-31 15:26 | 显示全部楼层
LIUZHU 发表于 2022-8-31 14:44
看不懂这个CreateObject是干什么用的,和VBA大不一样?

大概是提供了js数据格式和c++数据格式之间的转换,然后就可以调用各种库,比如jsa没法网抓,那写个调用libcurl的dll,只需要正确的转换参数的类型,即可在js里调用libcurl库网抓
不是加载项,大概是对js环境的扩展

TA的精华主题

TA的得分主题

发表于 2022-9-4 18:49 | 显示全部楼层
wanghan519 发表于 2022-8-30 18:56
用gitee上的jsdemo照猫画虎,弄了个dll,只改了一个方法,Exec可以执行一个shell命令并返回stdout内容。初 ...

厉害,如何编译dll的?

TA的精华主题

TA的得分主题

 楼主| 发表于 2022-9-4 18:57 来自手机 | 显示全部楼层
Again123456 发表于 2022-9-4 18:49
厉害,如何编译dll的?

就是照着gitee上wpsnativex的说明弄的,框架结构没看懂,但只是改了rootobject的一个方法,还行。
而且这个写的不太好,会弹出cmd窗口,有搜到文章c++用createprocess和createpipe不弹窗且能接收stdin的,改成那个更好

TA的精华主题

TA的得分主题

发表于 2022-9-5 02:24 | 显示全部楼层
WPS 推出 这个 nativex 应该主要是给C++开发者用的吧。普通JSA开发用这个太麻烦,而且自己开发的dll,可移植性差啊

TA的精华主题

TA的得分主题

 楼主| 发表于 2022-9-5 17:51 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
优化了一下:1. 不再弹cmd的黑框框
2. Exec之前可以先设置Stdin
3. 可以循环检测Active属性,判断进程是否正在运行,循环中用DoEvents避免卡住
4. 也可以直接取Stdout的值,但会卡住直到读出数据
5. 不要传递二进制内容,因为用的char*遇到\0后面的数据会丢掉。。。

比如,从bai度上抓所有<a>容器:
  1. function NativeDemo_OnBtn1Click()
  2. {
  3.         let cmd = CreateObject("RunCMD")
  4.         cmd.Exec(`busybox bash -c "curl -s www.baidu.com | pup 'a' | iconv -f utf-8 -t gbk"`)
  5.         while (cmd.Active) {
  6.                 DoEvents()
  7.         }
  8.         alert(cmd.Stdout)
  9. }
复制代码


RunCMD.7z

8.06 KB, 下载次数: 20

您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-22 03:47 , Processed in 0.057259 second(s), 13 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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