Shell脚本(11)——写入csv文件
创作者俱乐部成员
今天看到论坛里,有需要保留数字开头的0,写入csv文件的问题。
其实,之前发过的第3个Shell脚本的帖子,就是解决这种问题的,这里稍微说详细一点:
首先需要下载busybox-w32.exe,把它放到环境变量PATH里
然后在当前xlsm文件相同目录下,建立cgi-bin文件夹,里面建立tee.sh文件,内容是
💡 | #!/bin/sh echo -e 'Content-type: text/plain; charset=utf-8\n' tee "../${QUERY_STRING##*\?}" echo ok |
这里如果需要存为gbk编码的csv,则在tee前面加上iconv -f utf-8 -t gbk -c |这一句
如果需要带bom的utf8,则在echo前加一行,unix2dos "../${QUERY_STRING##*\?}"
然后在xlsm里编辑JS宏,内容是
📌 | function tt() { Shell(`busybox httpd -p 8080 -h ${ThisWorkbook.Path}`, jsHide) let ret = "" for (let i of ActiveSheet.UsedRange.Value2) { ret += i.map(x=>`="${x}"`).join(",") + "\n" } fetch("http://localhost:8080/cgi-bin/tee.sh?a.csv", { method: "POST", body: ret }).then(r=>{console.log(r.status)}) } |
意思是通过fetch方法,把ret的内容,写入a.txt
其中ret,是读取表格,用逗号和回车连接行列得到的文本
如果需要双击打开csv时,保留前面的0,需要在数字外面套一层=""
没办法,现在JS宏里只有fetch方法最稳定,open、put老出问题,加载项又变来变去,不如busybox开个web接口。从上面也能看出,想要什么编码就什么编码,想怎么改样式就怎么改,web接口还是比较灵活的,凑活用吧。。。
创作者俱乐部成员