ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[分享] jsa读写流,txt读写示例

[复制链接]

TA的精华主题

TA的得分主题

发表于 2023-12-29 09:28 来自手机 | 显示全部楼层 |阅读模式
案例需求:

JS宏读写流
函数说明

1. FreeFile 提供一个尚未使用的文件号
2. Open 打开文件
3. Write/LineInput 文本方式
4. Put/Get 二进制方式
5. Close 关闭文件
代码实现

//测试代码
function main(){
        write("d:/1.txt","测试输出\n测试换行")
        read("d:/1.txt")
}

/**
* 写出文件
* @author Li Zuxian
* @param {*} path  路径
* @param {*} content 内容
*/
function write(path, content) {
        Kill(path) //删除文件
        var no = FreeFile()
        //Debug.Print(no)
       
        var fn = Open(path, no, jsBinary, jsWrite, jsLockReadWrite, 10000)   //第五个参数Len,表示写入的字符串长度
        Put(no, content)
        //var fn = Open(path, no, jsOutput, jsWrite, jsShared, 10000)
        //Write(no, content)
        Close(no)
}


/**
* 读入文件
* @author Li Zuxian
* @param {*} path 文件路径
*/
function read(path) {
        var no = FreeFile()
        var fn = Open(path, no, 4, jsReadWrite, jsLockWrite, 10000)
        //Debug.Print(no)
        var data = "";
        while (!EOF(no)) {
                data += LineInput(no);
                data += '\r\n';
        }
        Close(no)
        data = data.substring(0, data.length-2);
        Console.log(`${data}`)
        return data;
}

评分

2

查看全部评分

TA的精华主题

TA的得分主题

发表于 2023-12-30 23:09 | 显示全部楼层
wps开发文档中找不到这些内容?

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-12-31 14:36 来自手机 | 显示全部楼层
一江春水1688 发表于 2023-12-30 23:09
wps开发文档中找不到这些内容?

就是官方的,分享下

TA的精华主题

TA的得分主题

发表于 2024-1-2 08:51 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
ruirui5015 发表于 2023-12-31 14:36
就是官方的,分享下

Get和Write的示例没有啊?

TA的精华主题

TA的得分主题

发表于 2024-1-2 17:00 | 显示全部楼层
  1. function main(){
  2.         path = "d:/1.txt";
  3.         try {Kill(path)}catch{};
  4.         str1 = "第一行\r\n第二行";
  5.         str2 = "\r\n追究加第三行";
  6.         myWrite(path,str1);
  7.         myWrite(path,str2);
  8.         alert(myRead(path));
  9. }
  10. function myWrite(path,str){
  11.         let fNum = FreeFile();
  12.         Open(path,fNum,jsBinary,jsWrite,jsShared);
  13.         pos = LOF(fNum)+1;
  14.         if( pos == 1 ) {
  15.                 Put(fNum,str);
  16.         }else{
  17.                 Put(fNum,str,pos);//参数顺序与VBA不一样
  18.         }       
  19.         Close(fNum);
  20. }
  21. function myRead(path){
  22.         let fNum = FreeFile();
  23.         let res = "";
  24.         Open(path,fNum,jsInput,jsRead,jsLockReadWrite);
  25.         while(!EOF(fNum)){
  26.                 res += LineInput(fNum) + "\r\n";
  27.         }
  28.         Close(fNum);
  29.         return res;       
  30. }
复制代码

原来是和VBA参数不一样,这样可以解决写入带引号的问题了。

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-1-2 19:52 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
Again123456 发表于 2024-1-2 17:00
原来是和VBA参数不一样,这样可以解决写入带引号的问题了。

A佬牛逼!!!!!!

TA的精华主题

TA的得分主题

发表于 2024-1-12 08:18 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
抄了一下大佬的代码

TA的精华主题

TA的得分主题

发表于 2024-2-7 13:53 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
各位大佬,能发如何用GET 读取图片类二进制文件的实例吗?GET的参数里面存储变量怎么才能定义成BYTE数组变量?
我写了一个读取文件的程序,但是GET不到数据,结果老是显示取到一些”00000"的数据,而不是我想要的二进制数据,不知错在哪里?请大佬们指正。
function read(path) {
        var no = FreeFile()

        var fn = Open(path, no,jsBinary, jsRead, jsLockWrite, 10000)
        sl=LOF(no)//文件长度字节数
        var bf=new ArrayBuffer(sl)//设定存储缓存区
        var zf=new Uint8Array(bf) //设定TypedArray读取数据
        Get(no,zf)//本来这一句想获取文件内容存入TypedArray即zf变量中,运行了一下zf存储变量没有Get到任何数据
        Close(no)
        Console.log(zf.join(""))//显示获取的文件内容
}


TA的精华主题

TA的得分主题

发表于 2024-2-8 10:04 | 显示全部楼层
本帖最后由 Again123456 于 2024-2-8 10:36 编辑
xx6000 发表于 2024-2-7 13:53
各位大佬,能发如何用GET 读取图片类二进制文件的实例吗?GET的参数里面存储变量怎么才能定义成BYTE数组变 ...
这是要读取图片,画图么?我这边读出来全部是零。成功后,共享一下方法

复制代码

TA的精华主题

TA的得分主题

发表于 2024-2-8 10:52 | 显示全部楼层
我的本意是想读取图片文件转成BASE64格式,所以要获取图片的二进制数据转换,但是一直没取到我想要的结果。

/**
* CommandButton1_Click Macro
*/
function CommandButton1_Click()
{
  Range("E1").Value2=readPicData("e:/2.jpg").join("")
}



function readPicData(path){
        let fNum = FreeFile();
        Open(path,fNum,jsBinary,jsRead,jsLockWrite,10000)
        n = LOF(fNum);
        let data =new Uint8Array(n);
        Get(fNum,data)
        Close(fNum)
        return data      
}
运行结果如图,取到的数据依然全是零,感觉Get函数根本没起到作用,不知是啥原因?
image.jpg
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-21 16:43 , Processed in 0.036030 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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