项目遇到奇葩问题,优化工票打印增加二维码的功能时发现用户的电脑不支持EXCEL的二维码控件,但是二维码是车间MES APP 派工的必要条件而且现在的打印程序已经是EXCEL打印,excel模板有四个sheet页,通过SMARTFORM打印开发的工作量太大,给用户重装软件风险也是太大。因手里刚好有一个C语言编写的画二维码程序,被逼无奈用了一个奇葩思路,通过EXCEL的VBA调用EXE程序,生成一个图像,再通过VBA将图像插入EXCEL。

第一步,更改SMW0可以上传EXE类型文件。将可以绘制二维码的EXE文件类型上传至ERP服务器。

第二步,在代码中实现下载exe程序的逻辑,将exe文件放在固定文件夹。代码逻辑要控制判断文件路径是否存在,不存在则创建。exe程序同理,不存在则下载。


FORM DOWNLOAD_BARCODE.DATA: LV_OBJDATA LIKE WWWDATATAB,LV_OBJ_NAME LIKE WWWDATATAB-OBJID,LV_DESTINATION LIKE RLGRAP-FILENAME,LV_OBJID LIKE SY-REPID,LV_SUBRC LIKE SY-SUBRC.DATA:L_RET TYPE ABAP_BOOL,LV_ANSWER.DATA:LV_FILE TYPE STRING.DATA:L_PATH TYPE CHAR128,            " 下载后存放路径G_FILEN LIKE WWWDATATAB-OBJID.CLEAR L_PATH.CONCATENATE 'C:\ERP-DATA\'  'QRmake.exe' INTO L_PATH.MOVE L_PATH TO LV_FILE.CALL METHOD CL_GUI_FRONTEND_SERVICES=>FILE_EXISTEXPORTINGFILE                 = LV_FILERECEIVINGRESULT               = L_RETEXCEPTIONSCNTL_ERROR           = 1ERROR_NO_GUI         = 2WRONG_PARAMETER      = 3NOT_SUPPORTED_BY_GUI = 4OTHERS               = 5.IF SY-SUBRC <> 0.MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNOWITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.EXIT.ENDIF.IF L_RET <> 'X'.G_FILEN = 'ZQRMAKE'.
*    IFMOVE G_FILEN TO LV_OBJ_NAME.SELECT RELID OBJIDFROM WWWDATAINTO  CORRESPONDING FIELDS OF LV_OBJDATAUP TO 1 ROWSWHERE SRTF2 = 0 AND RELID = 'MI'AND OBJID = LV_OBJ_NAME.ENDSELECT.CALL FUNCTION 'DOWNLOAD_WEB_OBJECT'EXPORTINGKEY         = LV_OBJDATADESTINATION = L_PATHIMPORTINGRC          = LV_SUBRC.IF LV_SUBRC = 0.ENDIF.ENDIF.
ENDFORM 

第三步,ABAP打印工票程序中打印时调用VBA宏:

CALL METHOD DOCUMENT->EXECUTE_MACROEXPORTINGMACRO_STRING = 'GP.MakeQRCode'
*                param1       = line_count
*                param_count  = 1IMPORTINGERROR        = ERRORS.

第四步,在execl模板中编写VBA代码,调用绘制二维码的程序,并将图片插入excel。


Private Point01 As Long, Point02 As Long, Point03 As Long
Private i As IntegerSub MakeQRCode()If Dir("C:\ERP-DATA\QRmake.exe") = "" ThenMsgBox "QRmake.exe文件丢失,请确认!", vbCritical, "外部程序调用"Exit SubEnd IfSheets("GP").SelectRange("I4:J7").Selecti = MK_QR(ActiveCell.Value, "10", "5")
End SubFunction MK_QR(Enc_Dat, ECL, SIZ)Dim F_Name As StringF_Name = "[" & ActiveWorkbook.Name & "]" & ActiveSheet.Name & "!" & ActiveCell.AddressPoint01 = Shell("""" & "C:\ERP-DATA\QRmake.exe""" & " /S" & SIZ & " /L" & ECL + 1 & " /O""" & ThisWorkbook.Path & "\" & F_Name & ".bmp"" /T""" & Enc_Dat & """")Point02 = OpenProcess(&H100000, 1, Point01)Point03 = WaitForSingleObject(Point02, &HFFFFFFFF)Point03 = CloseHandle(Point02)Point01 = EmptyPoint02 = EmptyPoint03 = EmptyActiveCell.Offset(0, 0).SelectWith ActiveSheet.Pictures.Insert(ThisWorkbook.Path & "\" & F_Name & ".bmp").Left = ActiveCell.Left.Top = ActiveCell.TopEnd WithActiveSheet.Shapes(1).Select    '选中第1个图形'ActiveSheet.Shapes("Picture 1").Select '或选中名称为Picture 1的图片With Selectionrh = ActiveCell.MergeArea.Height '读取当前单元格(或合并单元格)的高度rw = ActiveCell.MergeArea.Width '读取当前单元格(或合并单元格)的宽度ph = .Height  '读取当前图形的高度pw = .Width  '读取当前图形的宽度'f = IIf(rh / ph < rw / pw, rh / ph, rw / pw) '计算不超出格子的允许最大的放大/缩小比例.Height = .Height * 0.7    '按该比例调整图形高度.Width = .Width * 0.7      '按该比例调整图形宽度.Top = ActiveCell.Top + (ActiveCell.MergeArea.Height - .Height) / 2 '设置图片顶位置.Left = ActiveCell.Left + (ActiveCell.MergeArea.Width - .Width) / 2 '设置图片左位置End With'将已经生成的二维码图像删除Kill (ThisWorkbook.Path & "\" & F_Name & ".bmp")ActiveCell.Offset(0, -1).Select
End Function

效果与EXCEL控件打印效果一致:

欢迎关注公众号:总钻风来巡山~~~~~

二维码打印-非EXCEL控件和非SmartForm方式相关推荐

  1. 金蝶k3 wise 15.0单据序时簿二维码打印后打印预览时提示没有注册类

    金蝶K3 wise 15.0 销售出库单打开二维码打印后这个界面在点击布局设计或打印预览时提示没有注册类,提示如下: 解决方案: 请在K3安装目录C:\Program Files (x86)\King ...

  2. TSPL指令二维码打印无效?我搜集的TSPL中文文档

    设备:tec相关打印机 开发语言:javascript nodejs环境 TSCLIB.dll(详细资料需要去TSC官网下载,不要花RMB) 近日又在做标签打印相关,软件的开发,遇到一个以前已解决的问 ...

  3. [原创]解决某物流企业二维码打印问题

    [原创]解决某物流企业二维码打印问题 参考文章: (1)[原创]解决某物流企业二维码打印问题 (2)https://www.cnblogs.com/ruochen/archive/2012/06/28 ...

  4. java生成二维码打印到浏览器

    java生成二维码打印到浏览器 解决方法: pom.xml的依赖两个jar包: <!-- https://mvnrepository.com/artifact/com.google.zxing/ ...

  5. 量具管理-量具生成和二维码打印

    量具管理-量具生成和二维码打印 只要选择量具分类,按下"生成新量具"按钮可以自动生成量具并能打印二维码 建立文件createclass.py # -*- coding: utf-8 -*- impor ...

  6. c#生成图片、生成二维码、读取excel、自动匹配路径

    以下是个园林树牌信息生成程序,是使用c#语言编写的控制台程序,包含了生成图片.生成二维码.读取excel.自动匹配路径等功能,可作为以上功能的demo.注意只有系统中已有的字体才可以使用,如果使用系统 ...

  7. Android 蓝牙二维码打印,打印图片,二维码加文字布局,蓝牙连接

    蓝牙二维码打印,工厂物料条码,绝对好用 资源下载地址:点击下载 扫描,显示蓝牙列表 public class DeviceListActivity extends AppCompatActivity ...

  8. 条码打印以及二维码打印

    条码打印 function setFlowCardCodeHtml(rows, order){if(!isEmpty(rows) && rows.length>0){ //deb ...

  9. excel 调用barTender打印条码 VBA 调用BarTender打印标签BarTender二次开发 VBA 条码打印 VBA二维码打印 Excel条码打印 Excel二维码打印

    制造业使用二维码标签的原因有很多,以下是一些主要的原因: 1. 商品跟踪:二维码标签可让制造商和供应商跟踪货物的生产和出货情况.二维码中可以包含有关商品的所有必要信息,如生产日期.批次号.产品型号等. ...

最新文章

  1. 插入10000条数据测试DB性能
  2. 云+网+端 技术架构
  3. 以太坊节点布置(4) geth节点互联
  4. 数据分析师免费课程网址
  5. 腾讯开源最大规模多标签图像数据集,刷新行业数据集基准
  6. Steve Jobs Said
  7. 应届生应聘软件开发岗位推荐书籍
  8. winrar.msi_如何使WinRAR自动化以从setup.exe和MSI文件制作单个文件安装程序
  9. nexmo - 电话报警Alert
  10. python模拟登陆抖音_抖音模拟登陆的实现
  11. 30天自制操作系统 (一个操作系统的实现)
  12. 【今日CV 计算机视觉论文速览 第140期】Wed, 3 Jul 2019
  13. MSSQL数据库一对多和多对一查询的转换
  14. 如何在百度地图上标注坐标点?
  15. 解决图片不显示的问题
  16. IT后端技术学习路线图(初阶)
  17. 分支定界方法(branch and cut,branch and price的基础)
  18. 全球前十大一致性最好的交易系统之一Aberration(附源码)
  19. GitHub申请账号
  20. 如何用MathType编辑化学等式

热门文章

  1. 计算一元一次方程Y=kX+b
  2. 史上最强蝴蝶效应 - 都是道士惹的祸
  3. 程序猿媳妇儿注意事项
  4. Flutter Could not resolve com.android.tools.build:gradle:xx.xx.xx
  5. 为什么不喜欢人工智能建筑设计?
  6. 趁火打劫!“疫情做饵”的网络攻击来了
  7. 银行接口开发记录(招商银行,工商银行,建设银行)
  8. flash-connect模块
  9. MS9288C 视频转换IC VGA 转 HDMI
  10. Win10重装系统提示:在efi系统上windows只能安装到gpt磁盘