ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 有关Code 128字体文件、条码的问题

  [复制链接]

TA的精华主题

TA的得分主题

发表于 2009-8-20 12:29 | 显示全部楼层 |阅读模式
本贴只考虑使用字体文件,在Office中生成条码的方式——虽然控件的方式不错,但实施起来,尤其是涉及多个不同地域的机构时,其实施成本不小。

请教,各位有无使用Code 128字体文件,在Office中生成条码、激光打印机打印出来、能够正确识别的例子?
我下载了多个字体文件(包括那个流传很广的Code128.ttf,2K左右,以及其它Free、商业Demo字体),都不能正常识别。

备注:不是扫描枪的问题,条码打印机打出得Code  128码就可以正常识别;也不是前后缀的问题,已经试验了*、!、不加等多个字符,都不能识别;此外,无论是条码机还是激光机打出得Code 39码,均可识别无误。

TA的精华主题

TA的得分主题

发表于 2009-8-20 13:14 | 显示全部楼层
我们公司只用39条码,条码机激光打印机都打(不同产品哦)均可用条码枪识别入计算机
其他不知道了
学习下

TA的精华主题

TA的得分主题

 楼主| 发表于 2009-8-20 16:32 | 显示全部楼层
谢谢biaotiger1!

找了些资料,好好研究了一下,才知道Code 128码原来很复杂。
具体来说,出了正常的字符外,尚需要加入起始码、结束码、校验码三个字符,和正常字符一起作为一个字符串。这个字符串再设置为相应的Code 128字体,扫描设备才能准确识别。

这点和Code 39有点类似,只不过不像Code 39那么方便(前后加*或!即可),计算更复杂而已。

TA的精华主题

TA的得分主题

发表于 2009-8-20 16:38 | 显示全部楼层
那如何才能正确实施呢
期待lz答案

TA的精华主题

TA的得分主题

发表于 2009-8-24 16:44 | 显示全部楼层
LZ的问题我今天也遇到了,在EXCEL里用CODE128字体显示是条形码,但打印出来就是不能扫描。无论是用专业条码打印机还是普通激光打印机打印都不能扫描。期待高手解答。

TA的精华主题

TA的得分主题

发表于 2010-1-23 17:58 | 显示全部楼层
我实现了99%的工作,打印出来的条码,可以识别.我用的是128B码.
但这1%决定了无法使用.我也是今天才意识到(当时做了10个条码,9个能用).
就是计算校验码时,它的值刚好是128,搜索之后才明白code(128)和code(129),在word和excel下不显示,被系统吃掉了.我是用自定义函数做的,在代码里能看到正确地返回了校验位和休止位,可在excel下,明显短了.
最后只能认定,那个校验位连带休止位,一同被吃了(一般情况下,休止位可以正常显示).
很郁闷,还没想到变通的办法.

TA的精华主题

TA的得分主题

发表于 2010-1-23 17:59 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
你们直接用字体做,是不行的,缺少开始位,校验位和休止位.

TA的精华主题

TA的得分主题

发表于 2010-1-24 18:35 | 显示全部楼层
总算解决了.原来网上有的资料说得不够充分.即:当待转换字符的asc值超过127的,必须要处理.
我的函数没处理非有效字符,请注意.
附件代码有误.下面是修改后的.主要是asc值不能直接引用,以及休止位的码值是206,而不是附件中的205.
Function code128b(Tar As Range)   '128B码:ChrW(204).
Dim s$, i%, ss$, j%, curR%, checkB%
curR = Tar.Row
s = Tar.Value
checkB = 1  '开始位的码值为104 mod 103 =1
For i = 1 To Len(s)
    ss = Mid(s, i, 1)
    j = Asc(ss) '不过滤无效字符,比如汉字.
    If j < 135 Then
        j = j - 32
    ElseIf j > 134 Then
        j = j - 100
    End If
    checkB = (checkB + i * j) Mod 103   '计算校验位
Next
If checkB < 95 And checkB > 0 Then  '有的资料直接求103的模,解说不充分,因为有的校验位超过127时,系统会"吃"掉它们(连带休止符).
    checkB = checkB + 32
ElseIf checkB > 94 Then '字体设置时,字模被定义了2个值.观察字体文件时能发现.
    checkB = checkB + 100
End If
code128b = ChrW(204) & s & IIf(checkB, ChrW(checkB), Chr(32)) & ChrW(206)
End Function

[ 本帖最后由 shuyee 于 2010-1-25 09:57 编辑 ]

code128函数和字体.rar

2.4 KB, 下载次数: 4695

TA的精华主题

TA的得分主题

发表于 2011-3-22 23:22 | 显示全部楼层
具体怎么操作啊,谁能详细说下,新手

TA的精华主题

TA的得分主题

发表于 2010-4-16 01:15 | 显示全部楼层
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-21 22:17 , Processed in 0.037579 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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