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

相关内容

  • 高中信息技术会考Excel必考点有哪些
  • 在高中信息技术的学习中,Excel作为一款重要的电子表格软件,扮演着极其关键的角色。它不仅在日常生活中发挥着重要作用,还是信息技术会考中的一个必考点。本文将详细...
  • 2024-12-22 16:05:50

    1

  • 高中信息技术会考之Excel函数
  • 在现代信息技术课程中,Excel作为一款强大的电子表格软件,凭借其丰富的函数功能,成为了学生们学习和应用数据处理的重要工具。为了帮助高中生在信息技术会考中取得好...
  • 2024-12-22 16:00:36

    1

  • 饼图的简单制作「以EXCEL为例」
  • 饼图是一种常用的数据可视化工具,能够帮助我们直观地展示各部分在整体中所占的比例。在众多数据处理软件中,Excel因其强大的功能和易于使用的界面,成为了制作饼图的...
  • 2024-12-22 15:49:39

    1

  • 高中信息技术之会考Excel公式。
  • 在现代教育中,信息技术的学习已经成为高中生的重要课程之一,尤其是Excel公式的应用,更是提升学生数据处理能力的重要工具。本文将围绕《高中信息技术之会考Exce...
  • 2024-12-22 15:28:11

    1

  • 高亮重复项怎么用excel
  • 在日常工作中,我们常常需要处理大量的数据,而在这些数据中,重复项的存在往往会影响我们的分析和判断。为了帮助用户更高效地处理数据,Excel提供了高亮显示重复项的...
  • 2024-12-22 15:27:06

    1

  • 高中信息技术会考Excel操作题常考点汇总
  • 在现代教育中,信息技术的普及使得Excel等办公软件的使用变得越来越重要。高中信息技术会考中,Excel操作题作为核心内容之一,考察学生在实用技能上的熟练程度和...
  • 2024-12-22 15:13:09

    1