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

相关内容

  • SQLyog导入excel数据的使用方法
  • 前言在数据管理和分析过程中,往往需要将Excel数据导入到数据库中以便进行更高效的查询和操作。SQLyog是一款强大的MySQL数据库管理工具,支持多种数据导入...
  • 2024-08-17 12:20:43

    2

  • win11 的excel语言怎么设置为中文
  • Win11的Excel语言设置为中文方法Excel是微软公司开发的一款强大的电子表格软件,广泛应用于处理数据和进行数据分析。在使用Excel时,设置语言为中文可...
  • 2024-08-15 12:40:43

    4

  • spss和excel有哪些不同?
  • 概述SPSS和Excel是两种广泛使用的数据分析工具,它们各自具有不同的功能和应用场景。本文将详细探讨这两者之间的主要差异,帮助用户更好地选择适合自己的工具。功...
  • 2024-08-15 11:19:35

    3

  • Project将数据导出到Excel的详细教程
  • 引言在现代的项目管理中,数据导出和共享是非常重要的环节。Microsoft Project作为一种流行的项目管理工具,能够帮助用户有效地组织和规划项目数据。而E...
  • 2024-08-03 14:35:40

    1

  • PPT插入的Excel表格设置同步显示的操作方法
  • 引言在制作PPT演示文稿时,插入Excel表格并实现同步显示是一个非常实用的功能。这样可以确保你的数据始终是最新的,无需每次手动更新。本文将详细介绍如何在PPT...
  • 2024-08-01 12:43:37

    1