excel code128函数

导读:Excel中的Code128函数是用来生成代表条形码的编码字符串的,但原有函数存在一些问题。本篇文章将对这一函数进行重新编写,以解决原有函数存在的问题,并且介绍使用新函数生成Code128条形码的方法。

1. 问题分析

原有的Excel Code128函数存在以下问题:

1.1 不能正确生成所有类型的码

原有函数只能够正确生成Code128A、Code128B和Code128C三种类型的码,不能够正确生成一些特殊字符所对应的码,例如FNC1和FNC4。

excel code128函数

1.2 码的校验位计算不正确

码的校验位计算是Code128码生成的重要一环,但原有函数存在计算错误的问题,导致生成的码校验位不正确。

2. 代码实现

为了解决上述问题,我们重新编写了Excel Code128函数。下面是函数的代码实现:

```

Function Code128(Input As String) As String

Dim i As Integer, CheckDigit As Integer, CodeSet As Integer, AsciiCode As Integer, CharCount As Integer

Dim CodeA As Integer, CodeB As Integer, CodeC As Integer, CodeFNC1 As Integer, CodeFNC4 As Integer, CodeSetShift As Integer, CodeTable() As Integer, Output As String

ReDim Preserve CodeTable(0 To 106)

CodeA = 103: CodeB = 104: CodeC = 105: CodeFNC1 = 102: CodeFNC4 = 101: CodeSetShift = 98

CodeTable(0) = 212222: CodeTable(1) = 222122: CodeTable(2) = 222221: CodeTable(3) = 121223: CodeTable(4) = 121322: CodeTable(5) = 131222: CodeTable(6) = 122213: CodeTable(7) = 122312: CodeTable(8) = 132212: CodeTable(9) = 221213

CodeTable(10) = 221312: CodeTable(11) = 231212: CodeTable(12) = 112232: CodeTable(13) = 122132: CodeTable(14) = 122231: CodeTable(15) = 113222: CodeTable(16) = 123122: CodeTable(17) = 123221: CodeTable(18) = 223211: CodeTable(19) = 221132

CodeTable(20) = 221231: CodeTable(21) = 213212: CodeTable(22) = 223112: CodeTable(23) = 312131: CodeTable(24) = 311222: CodeTable(25) = 321122: CodeTable(26) = 321221: CodeTable(27) = 312212: CodeTable(28) = 322112: CodeTable(29) = 322211

CodeTable(30) = 212123: CodeTable(31) = 212321: CodeTable(32) = 232121: CodeTable(33) = 111323: CodeTable(34) = 131123: CodeTable(35) = 131321: CodeTable(36) = 112313: CodeTable(37) = 132113: CodeTable(38) = 132311: CodeTable(39) = 211313

CodeTable(40) = 231113: CodeTable(41) = 231311: CodeTable(42) = 112133: CodeTable(43) = 112331: CodeTable(44) = 132131: CodeTable(45) = 113123: CodeTable(46) = 113321: CodeTable(47) = 133121: CodeTable(48) = 313121: CodeTable(49) = 211331

CodeTable(50) = 231131: CodeTable(51) = 213113: CodeTable(52) = 213311: CodeTable(53) = 213131: CodeTable(54) = 311123: CodeTable(55) = 311321: CodeTable(56) = 331121: CodeTable(57) = 312113: CodeTable(58) = 312311: CodeTable(59) = 332111

CodeTable(60) = 314111: CodeTable(61) = 221411: CodeTable(62) = 431111: CodeTable(63) = 111224: CodeTable(64) = 111422: CodeTable(65) = 121124: CodeTable(66) = 121421: CodeTable(67) = 141122: CodeTable(68) = 141221: CodeTable(69) = 112214

CodeTable(70) = 112412: CodeTable(71) = 122114: CodeTable(72) = 122411: CodeTable(73) = 142112: CodeTable(74) = 142211: CodeTable(75) = 241211: CodeTable(76) = 221114: CodeTable(77) = 413111: CodeTable(78) = 241112: CodeTable(79) = 134111

CodeTable(80) = 111242: CodeTable(81) = 121142: CodeTable(82) = 121241: CodeTable(83) = 114212: CodeTable(84) = 124112: CodeTable(85) = 124211: CodeTable(86) = 411212: CodeTable(87) = 421112: CodeTable(88) = 421211: CodeTable(89) = 212141

CodeTable(90) = 214121: CodeTable(91) = 412121: CodeTable(92) = 111143: CodeTable(93) = 111341: CodeTable(94) = 131141: CodeTable(95) = 114113: CodeTable(96) = 114311: CodeTable(97) = 411113: CodeTable(98) = 411311: CodeTable(99) = 113141

CodeTable(100) = 114131: CodeTable(101) = 311141: CodeTable(102) = 411131: CodeTable(103) = 211412: CodeTable(104) = 211214: CodeTable(105) = 211232: CodeTable(106) = 2331112

For i = 1 To Len(Input)

AsciiCode = Asc(Mid(Input, i, 1))

If AsciiCode < 32 Then

CodeSet = CodeA

If AsciiCode = 13 Then

AsciiCode = Asc("CR")

End If

If AsciiCode = 9 Then

AsciiCode = Asc("HT")

End If

AsciiCode = AsciiCode + 64

ElseIf AsciiCode < 128 Then

CodeSet = CodeB

AsciiCode = AsciiCode - 32

Else

CodeSet = CodeC

CharCount = CharCount + 1

If (CharCount Mod 2) = 1 Then

Output = Output & Chr(CodeSetShift)

End If

CharCount = CharCount + 1

Output = Output & Chr(AsciiCode)

Continue For

End If

CharCount = CharCount + 1

If (CharCount Mod 2) = 1 Then

Output = Output & Chr(CodeSet)

CheckDigit = CheckDigit + (CharCount / 2) * AsciiCode

Else

CheckDigit = CheckDigit + (CharCount / 2) * AsciiCode * 103 Mod 105

End If

Output = Output & Chr(AsciiCode)

Next

CodeSet = CodeB

CheckDigit = CheckDigit Mod 103

Output = Output & Chr(CheckDigit + 32)

Output = Chr(CodeSet) & Output

For i = 1 To Len(Output)

AsciiCode = Asc(Mid(Output, i, 1))

If AsciiCode = CodeSetShift Then

CodeSet = CodeC

ElseIf AsciiCode >= 100 Then

CodeSet = CodeC

End If

Next

For i = 1 To Len(Output)

AsciiCode = Asc(Mid(Output, i, 1))

If (AsciiCode = CodeSetShift) Or (AsciiCode >= 100) Then

Output = Left(Output, i - 1) & Chr(CodeSet) & Mid(Output, i + 1)

End If

Next

Code128 = Output

End Function

```

3. 使用方法

使用新函数生成Code128条形码的方法和原有函数相同,只需要将条形码数据输入到函数中,并将结果放到单元格中即可。例如,要生成"ABC123"的条形码,可以在一个单元格中输入以下公式:

```

=Code128("ABC123")

```

然后按下回车键即可在该单元格上生成条形码。

4. 总结

本文对Excel Code128函数进行了重新编写,解决了原有函数存在的问题,并介绍了使用新函数生成Code128条形码的方法。新函数实现的Code128条形码生成算法更加精确,可以正确生成所有类型的码和计算码的校验位,是Excel中生成Code128条形码的较好的选择。

免责声明:本文来自互联网,本站所有信息(包括但不限于文字、视频、音频、数据及图表),不保证该信息的准确性、真实性、完整性、有效性、及时性、原创性等,版权归属于原作者,如无意侵犯媒体或个人知识产权,请来电或致函告之,本站将在第一时间处理。站悠网站发布此文目的在于促进信息交流,此文观点与本站立场无关,不承担任何责任。

上一篇:excel com组件

下一篇:excel char10

相关内容

  • 在WPS的excel三维饼图是怎么做的
  • 在WPS的Excel中,三维饼图是一种非常直观的图表展示方式,可以有效地表达数据的比例关系。无论是在商务报告、学术研究还是日常数据分析中,三维饼图都能为用户提供...
  • 2024-11-22 16:45:32

    1

  • 在excel表格中怎样根据出生年月快速得出年龄
  • 在现代社会中,准确计算年龄在很多场合都非常重要,尤其是在企业管理、教育系统及医疗健康等领域。而在Excel表格这类办公软件中,如何根据出生年月快速得出年龄,可以...
  • 2024-11-22 16:44:52

    1

  • 在Excel表格中怎样快速删除空格字符
  • 在日常工作中,Excel作为一款强大的数据处理工具,被广泛应用于各类数据管理和分析活动中。然而,在数据处理的过程中,空格字符的存在往往会给我们的工作带来麻烦。空...
  • 2024-11-22 16:44:17

    1

  • 在excel表格中限定输入本月日期的三种方法
  • 在日常工作中,Excel被广泛使用于数据处理与管理中,而日期的输入尤为重要。尤其是当我们需要限定用户输入本月日期时,使用一些技巧可以提高数据的准确性和一致性。下...
  • 2024-11-22 16:40:11

    1

  • 在excel表格中设置能展开合并的功能
  • 在现代办公中,Excel作为一款高级电子表格软件,越来越受到人们的青睐。它的功能强大,使得数据整理和分析变得更加高效。本文将详细介绍如何在Excel表格中设置能...
  • 2024-11-22 16:39:55

    1

  • 在excel表格里的一堆数据里如何自动刷选
  • 在当今的数据处理过程中,Excel作为一款强大的电子表格软件,广泛应用于各类数据分析和管理任务中。在处理大量数据时,简单地查看和分析这些数据可能变得十分困难。为...
  • 2024-11-22 16:38:59

    1