|
本帖最后由 仙女配凡人 于 2023-5-9 20:53 编辑
Excel vba 或者 WPS JavaScript 要批量生成二维码或者条形码,一般通过网络请求的方式从网站上获取,对于不能联网的电脑非常麻烦。
另类的解决办法:利用bwip-js包,通过node.js环境搭建本地服务器 ,将其打包成exe可执行文件,就可以通过本地获取二维码、条形码图片,实测扫码枪、盘点机可以正确识别。支持win7 64位及以上系统,32位系统没测试过不清楚。
bwip-js支持:Code11、Code128、Code39、Code93、EAN-13、QR Code(二维码)、ISBN、ISMN、PDF417 、Datamatrix等105种类型
bwip-js文档地址:https://www.npmjs.com/package/bwip-js
案例文件及jsbar.exe下载链接:https://share.weiyun.com/BdtDs8zw 密码:ij7bk5
使用方法
运行jsbar.exe,就会在本地搭建服务器,主机地址为:http://localhost:3031/
然后加上必要的参数即可返回需要的图片,例如生成 ISBN 码
http://localhost:3031/?bcid=isbn&text=978-1-56581-231-4+52250&includetext&guardwhitespace
| | | | | | | | | | | | | | | | | | | | | | | 文本水平对齐位置center、left、right | | | | 文本垂直对齐位置center、below、above | | | | | | | | | | | | y轴缩放比例,必须大于0,默认值为scaleX参数的值 | | | | | | | | 旋转方向,N正常默认值;R顺时针90;L逆时针90;I水平翻转 | | | | | | | | | 其他参数请参考bwip-js文档
在WPS宏编辑器、VBA编辑器中,用 Shapes.AddPicture 方法即可向工作表插入需要的条形码、二维码图片
例如在WPS宏编辑器中,制作code128条形码的标签,并导出为PDF文件:
- function CommandButton1_Click() {
- let wb = ThisWorkbook,
- sht1 = wb.Sheets(1),
- sht2 = wb.Sheets(2),
- data = sht1.Range('A2').CurrentRegion.Value2,
- today = dateFormat('yyyy-mm-dd'),
- path = ThisWorkbook.Path + '\\',
- fileName = path + `lable${dateFormat('yyyymdHMS')}.pdf`,
- pid = Shell(path + 'jsbar.exe', jsHide); //启动jsbar.exe
- //删除原条形码
- for (let i of sht2.Shapes) i.Delete();
- //处理标签样式
- sht2.Range('A1:H20').Value2 = '';
- sht2.Range('A1:H20').Copy(sht2.Range('I1'));
- sht2.Columns('A:H').Delete();
- let rng = sht2.Range('A1:H20');
- //数组迭代
- data.forEach((i, o) => {
- if (o == 0) return; //索引为0则结束函数执行
- let j = 20 * o + 1,
- top = 270 * o + 15,
- link = `http://localhost:3031/?bcid=code128&text=${i[0]}&textsize=12&height=9`;
- rng.Copy(sht2.Range('A' + j));
- sht2.Range(`B${j + 5}`).Value2 = i[0];
- sht2.Range(`A${j + 9}`).Value2 = `${today}, ${i[4]}, ${i[5]}`;
- sht2.Range(`A${j + 14}`).Value2 = `${i[1]}, ${i[2]}, ${i[3]}`;
- sht2.Shapes.AddPicture(link, true, true, 65, top, 300, 50);
- })
- sht2.Rows('1:20').Delete();
- sht1.Visible = false; //隐藏Sheet1工作表
- wb.SaveAs(fileName, 103); //当前工作簿另存为PDF
- sht1.Visible = true;
- sht1.Select();
- Shell(`cmd /c taskkill /pid ${pid} -f`, jsHide); //结束进程
- Shell('cmd /c start ' + fileName, jsHide); //打开PDF
- }
- //日期格式化
- function dateFormat(fmt, date) {
- fmt = fmt || 'yyyy-mm-dd HH:MM:SS';
- date = date || new Date;
- const opt = {
- 'y+': date.getFullYear().toString(),
- 'm+': (date.getMonth() + 1).toString(),
- 'd+': date.getDate().toString(),
- 'H+': date.getHours().toString(),
- 'M+': date.getMinutes().toString(),
- 'S+': date.getSeconds().toString()
- };
- for (let k in opt) {
- let ret = new RegExp('(' + k + ')').exec(fmt);
- if (ret) {
- fmt = fmt.replace(ret[1], (ret[1].length == 1) ? (opt[k]) : (opt[k].padStart(ret[1].length, '0')))
- }
- };
- return fmt
- }
复制代码
动图效果
jsbar.exe源码,在node.js环境下,用pkg模块打包成exe可执行文件
- //bwip-js呈现条形码图像的简单HTTP服务器
- const http = require('http');
- const server = http.createServer();
- const bwipjs = require('bwip-js');
- //这显示如何加载bwip js发行版提供的Inconsolata字体
- //bwipjs.loadFont('Inconsolata', 100, require('fs').readFileSync('./fonts/Inconsolata.otf', 'binary'));
- server.on('request', (req, res) => {
- // If the url does not begin /?bcid= then 404. Otherwise, we end up
- // returning 400 on requests like favicon.ico.
- if (req.url.indexOf('/?bcid=') != 0) {
- res.writeHead(404, { 'Content-Type': 'text/plain' });
- res.end('BWIPJS: Unknown request format.', 'utf8');
- } else {
- bwipjs.request(req, res); // Executes asynchronously
- }
- });
- server.listen(3031, () => {
- let a = '\n条形码与二维码服务已启动:http://localhost:3031/'
- let b = '\n示例:http://localhost:3031/?bcid=isbn&text=978-1-56581-231-4+52250&includetext&guardwhitespace'
- console.log(a + b)
- })
复制代码
|
评分
-
2
查看全部评分
-
|