Code128 generator, calc, barcode, macro, GS1, GPL .

Gotowe szablony, skrypty, makropolecenia i rozszerzenia. Tutaj możesz pochwalić i podzielić się swoją twórczością z innymi użytkownikami

Code128 generator, calc, barcode, macro, GS1, GPL .

Postprzez OOoUser46 » N maja 13, 2012 2:23 am

Witam.
Ponieważ nie znalazłem nic podobnego i darmowego,
w ramach edukacji napisałem generator kodów kreskowych dla OpenOffice Calc.
Może komuś jeszcze się przyda.

Jest to generator kodu kreskowego Code128.
Darmowa czcionka : http://user.services.openoffice.org/pl/ ... php?id=429 którą sam zrobiłem.
W tym makro zestaw znaków został przeniesiony do makro.
Eliminuje to problem niewyświetlania się poprawnie wszystkich znaków
w zależności od wersji językowej systemu operacyjnego.
Generator wraz z czcionką generuje kody typu slim (niskie),
bez cyfr czytelnych dla człowieka, tylko kod kreskowy.
Skrypt testowałem u siebie i działa 100% (OOo3.2,win7) ewentualne błędy będę starał się poprawić.
Generowane kody zawierające cyfry , znaki i mieszane odczytywane były bez problemu przez czytnik PSC QuickScan 1000.
Makro instalujemy metodą "kopiuj wklej" w menadżerze makr OpenOffice .

Działa polecenie CODE128("test") lub CODE128("test";0) .
Pierwszy argument to zawartość kodu liczba lub znaki, drugi opcjonalny to wymuszona długość kodu
pomocna przy np numerach seryjnych, dodaje zera wiodące lub przycina od lewej za długi ciąg.
Zero oznacza automatyczną długość .
Kod automatycznie przełącza się po między zastawem znaków B i C co czyni kod zwartym i krótkim.

Kod: Zaznacz cały   Rozszerz widokZwiń widok
REM  *****  BASIC  *****
REM V1.4 14-11-2012
REM Barcode creator code128 by TN
REM Funkcja generuje kod code128 z zestawem znaków B i C.
REM Przełącznie pomiędzy zestawem B i C jest automatyczne
REM co czyni wygenerowany kod optymalnym i zwartym.
REM
REM GNU GPL General Public Licence
REM Free to commercial and private use.
REM
REM code128(znaki ASCII, cyfry, liczba ; staly wymuszony rozmiar 0=auto size, max=50)
REM
REM ! UWAGA !
REM Do poprawnego działania wymagana jest odpowiednia czcionka barcode.ttf
REM http://user.services.openoffice.org/pl/forum/download/file.php?id=429
REM -----------------------------------------------------------------------------------
Private weight as integer
Function code128(Optional data$, Optional size%) As String
code128=""
if IsMissing(data) or data="" then goto errend
if IsMissing(size) then size=0
if size > 50 then size = 50   'definiuje długość gdy za durzo
DIM sizedata As Integer
DIM c As Integer
c=0
if data="0" and size=0 then goto errend   'przerywa gdy brak danyh
sizedata = Len(data)   'liczy ilość znaków
if sizedata=0 then goto errend
if sizedata > 50 then      'przycina zbyt długi ciąg
   data = Mid(data,sizedata-49)
   sizedata = 50
end if
if size <> 0 then          'dostosowuje długość ciągu
   if sizedata < size then   'gdy za krutki
      for c = 1 to size-sizedata
         data = "0" & data
      Next c
   end if
   if sizedata > size then   'gdy za długi
      data = Mid(data,sizedata-size+1)
   end if
end if
sizedata = Len (data)   'liczy ilość znaków
for c=1 to sizedata   'przerywa gdy nieobsługiwany znak
   if Asc(Mid(data,c,1)) < 32 then goto errend   'przerywa gdy nieobsługiwany znak
   if Asc(Mid(data,c,1)) > 126 then goto errend   'przerywa gdy nieobsługiwany znak
Next c

DIM digit as integer
DIM tryb as string
DIM a as integer
DIM checksum as long
DIM p_step as integer
p_step=0
c=1
if check4(data) > 3 then
   code128 = "HBEAFCF"   'start C
   tryb = "C"
   checksum = 105
else
   code128 = "HBEAFAH"   'start B
   tryb = "B"
   checksum = 104
End if
Do while c<sizedata+1
   digit = check4(mid(data,c))
   if digit > 3 then
      if digit mod 2 <> 0 then digit = digit - 1
      if tryb = "B" then
         code128 = code128 & "AECEDE"   'code C
         p_step=p_step+1   'nastepny znak
         checksum=checksum+(99*p_step)
         tryb = "C"
      End if
      a=c+digit
      Do while c<a
      '-------------------------------------------------------------
         code128 = code128 & znak_c128(cint(mid(data,c,2))+32)
         p_step=p_step+1   'nastepny znak
         checksum=checksum+(weight*p_step)
         c = c + 2
      Loop
   else
      if tryb = "C" then
         code128 = code128 & "AEDECE"   'code B
         p_step=p_step+1   'nastepny znak
         checksum=checksum+(100*p_step)
         tryb = "B"
      End if
      code128 = code128 & znak_c128(asc(mid(data,c,1)))
      p_step=p_step+1   'nastepny znak
      checksum=checksum+(weight*p_step)
      c = c + 1
   End if
Loop
code128 = code128 & znak_c128((checksum mod 103)+32) & "BGCEAEBH"   'stop
errend:
End Function

Function check4(d1 as string) as integer
   DIM d2 as integer
   DIM d3 as integer
   check4=0
   for d2=1 to Len(d1)
      d3 = asc(mid(d1,d2,1))
      if d3>47 and d3<58 then check4=check4+1
      if d3<48 or d3>57 then Exit For
   Next d2
End Function

Function znak_c128(z128%) as string
Select Case z128
   case 32
   znak_c128 = "BEBFBF"
   weight = 0
   case 33
   znak_c128 = "BFBEBF"
   weight = 1
   case 34
   znak_c128 = "BFBFBE"
   weight = 2
   case 35
   znak_c128 = "AFAFBG"
   weight =  3
   case 36
   znak_c128 = "AFAGBF"
   weight = 4
   case 37
   znak_c128 = "AGAFBF"
   weight = 5
   case 38
   znak_c128 = "AFBFAG"
   weight = 6
   case 39
   znak_c128 = "AFBGAF"
   weight = 7
   case 40
   znak_c128 = "AGBFAF"
   weight = 8
   case 41
   znak_c128 = "BFAFAG"
   weight = 9
   case 42
   znak_c128 = "BFAGAF"
   weight = 10
   case 43
   znak_c128 = "BGAFAF"
   weight = 11
   case 44
   znak_c128 = "AEBFCF"
   weight = 12
   case 45
   znak_c128 = "AFBECF"
   weight = 13
   case 46
   znak_c128 = "AFBFCE"
   weight = 14
   case 47
   znak_c128 = "AECFBF"
   weight = 15
   case 48
   znak_c128 = "AFCEBF"
   weight = 16
   case 49
   znak_c128 = "AFCFBE"
   weight = 17
   case 50
   znak_c128 = "BFCFAE"
   weight = 18
   case 51
   znak_c128 = "BFAECF"
   weight = 19
   case 52
   znak_c128 = "BFAFCE"
   weight = 20
   case 53
   znak_c128 = "BECFAF"
   weight = 21
   case 54
   znak_c128 = "BFCEAF"
   weight = 22
   case 55
   znak_c128 = "CEBECE"
   weight = 23
   case 56
   znak_c128 = "CEAFBF"
   weight = 24
   case 57
   znak_c128 = "CFAEBF"
   weight = 25
   case 58
   znak_c128 = "CFAFBE"
   weight = 26
   case 59
   znak_c128 = "CEBFAF"
   weight = 27
   case 60
   znak_c128 = "CFBEAF"
   weight = 28
   case 61
   znak_c128 = "CFBFAE"
   weight = 29
   case 62
   znak_c128 = "BEBEBG"
   weight = 30
   case 63
   znak_c128 = "BEBGBE"
   weight = 31
   case 64
   znak_c128 = "BGBEBE"
   weight = 32
   case 65
   znak_c128 = "AEAGBG"
   weight = 33
   case 66
   znak_c128 = "AGAEBG"
   weight = 34
   case 67
   znak_c128 = "AGAGBE"
   weight = 35
   case 68
   znak_c128 = "AEBGAG"
   weight = 36
   case 69
   znak_c128 = "AGBEAG"
   weight = 37
   case 70
   znak_c128 = "AGBGAE"
   weight = 38
   case 71
   znak_c128 = "BEAGAG"
   weight = 39
   case 72
   znak_c128 = "BGAEAG"
   weight = 40
   case 73
   znak_c128 = "BGAGAE"
   weight = 41
   case 74
   znak_c128 = "AEBECG"
   weight = 42
   case 75
   znak_c128 = "AEBGCE"
   weight = 43
   case 76
   znak_c128 = "AGBECE"
   weight = 44
   case 77
   znak_c128 = "AECEBG"
   weight = 45
   case 78
   znak_c128 = "AECGBE"
   weight = 46
   case 79
   znak_c128 = "AGCEBE"
   weight = 47
   case 80
   znak_c128 = "CECEBE"
   weight = 48
   case 81
   znak_c128 = "BEAGCE"
   weight = 49
   case 82
   znak_c128 = "BGAECE"
   weight = 50
   case 83
   znak_c128 = "BECEAG"
   weight = 51
   case 84
   znak_c128 = "BECGAE"
   weight = 52
   case 85
   znak_c128 = "BECECE"
   weight = 53
   case 86
   znak_c128 = "CEAEBG"
   weight = 54
   case 87
   znak_c128 = "CEAGBE"
   weight = 55
   case 88
   znak_c128 = "CGAEBE"
   weight = 56
   case 89
   znak_c128 = "CEBEAG"
   weight = 57
   case 90
   znak_c128 = "CEBGAE"
   weight = 58
   case 91
   znak_c128 = "CGBEAE"
   weight = 59
   case 92
   znak_c128 = "CEDEAE"
   weight = 60
   case 93
   znak_c128 = "BFAHAE"
   weight = 61
   case 94
   znak_c128 = "DGAEAE"
   weight = 62
   case 95
   znak_c128 = "AEAFBH"
   weight = 63
   case 96
   znak_c128 = "AEAHBF"
   weight = 64
   case 97
   znak_c128 = "AFAEBH"
   weight = 65
   case 98
   znak_c128 = "AFAHBE"
   weight = 66
   case 99
   znak_c128 = "AHAEBF"
   weight = 67
   case 100
   znak_c128 = "AHAFBE"
   weight = 68
   case 101
   znak_c128 = "AEBFAH"
   weight = 69
   case 102
   znak_c128 = "AEBHAF"
   weight = 70
   case 103
   znak_c128 = "AFBEAH"
   weight = 71
   case 104
   znak_c128 = "AFBHAE"
   weight = 72
   case 105
   znak_c128 = "AHBEAF"
   weight = 73
   case 106
   znak_c128 = "AHBFAE"
   weight = 74
   case 107
   znak_c128 = "BHAFAE"
   weight = 75
   case 108
   znak_c128 = "BFAEAH"
   weight = 76
   case 109
   znak_c128 = "DECEAE"
   weight = 77
   case 110
   znak_c128 = "BHAEAF"
   weight = 78
   case 111
   znak_c128 = "AGDEAE"
   weight = 79
   case 112
   znak_c128 = "AEAFDF"
   weight = 80
   case 113
   znak_c128 = "AFAEDF"
   weight = 81
   case 114
   znak_c128 = "AFAFDE"
   weight = 82
   case 115
   znak_c128 = "AEDFAF"
   weight = 83
   case 116
   znak_c128 = "AFDEAF"
   weight = 84
   case 117
   znak_c128 = "AFDFAE"
   weight = 85
   case 118
   znak_c128 = "DEAFAF"
   weight = 86
   case 119
   znak_c128 = "DFAEAF"
   weight = 87
   case 120
   znak_c128 = "DFAFAE"
   weight = 88
   case 121
   znak_c128 = "BEBEDE"
   weight = 89
   case 122
   znak_c128 = "BEDEBE"
   weight = 90
   case 123
   znak_c128 = "DEBEBE"
   weight = 91
   case 124
   znak_c128 = "AEAEDG"
   weight = 92
   case 125
   znak_c128 = "AEAGDE"
   weight = 93
   case 126
   znak_c128 = "AGAEDE"
   weight = 94
   case 127
   znak_c128 = "AEDEAG"
   weight = 95
   case 128
   znak_c128 = "AEDGAE"
   weight = 96
   case 129
   znak_c128 = "DEAEAG"
   weight = 97
   case 130
   znak_c128 = "DEAGAE"
   weight = 98
   case 131
   znak_c128 = "AECEDE"
   weight = 99
   case 132
   znak_c128 = "AEDECE"
   case 133
   znak_c128 = "CEAEDE"
   case 134
   znak_c128 = "DEAECE"
   Case Else
   znak_c128 = "none"
End Select
End Function



GS1-128 (EAN128) makro dla czcionki BARcoce.
Generator kodów kreskowych dla arkusza kalkulacyjnego OpenOffice Calc.
Darmowa czcionka : http://user.services.openoffice.org/pl/ ... php?id=429 którą sam zrobiłem.
GS1-128 to odmiana kodu128 zaadoptowana na potrzeby organizacji GS1.
Działa polecenie GS1_128(0;123456) .
Pierwszy argument to Identyfikator Zastosowania drugi to wartość.
Można dodać jeszcze drugi Identyfikator Zastosowania i wartość jako trzeci i czwarty argument.
Zostanie wygenerowany wtedy połączony ciąg dwóch kodów GS1.
Generator wraz z czcionką generuje kody typu slim (niskie),
bez cyfr czytelnych dla człowieka, tylko kod kreskowy.

Edit:31-08-2012. Makro GS1_128 v2
Poprawiłem kilka drobnych błędów.
Możliwość zsumowania do czterech symbolik i jednym kodzie.
Kod: Zaznacz cały   Rozszerz widokZwiń widok
REM  *****  BASIC  *****
REM V2.1 14-11-2012
REM Barcode creator GS1-128 by TN
REM This function generates a code GS1-128 (EAN128) with a set of characters B and C.
REM Switchable between a set of B and C is automatic.
REM
REM GNU GPL General Public Licence
REM Free to commercial and private use.
REM
REM Running the command:
REM GS1_128(IZ1 ; Data1 ; IZ2 ; Data2 ; IZ3 ; Data3 ; IZ4 ; Data4)
REM GS1 specification provides the ability to use all ASCII characters.
REM
REM ! NOTE !
REM For proper operation requires the correct font barcode.ttf
REM http://user.services.openoffice.org/pl/forum/download/file.php?id=429
REM -----------------------------------------------------------------------------------

Function GS1_128$(optional iz1%, optional data1$, optional iz2%, optional data2$, optional iz3%, optional data3$, optional iz4%, optional data4$)
   
   GS1_128=""
   
   dim iz_size%,fnc1%,pos%,mode%,data_tab%(1 to 48)
   
   fnc1=0
   pos=1
   
   if not IsMissing(iz1) and not IsMissing(data1) and data1<>"" and data1<>"0" then
      if iz1<0 or iz1>9999 then goto errend
      if len(data1)>80 then goto errend
      if iz_set(iz1,iz_size) then goto errend
      if data_set(iz1,data1,iz_size,pos,mode,data_tab) then goto errend
      if iz_size=0 then fnc = 1
   end if
   
   if not IsMissing(iz2) and not IsMissing(data2) and data2<>"" and data1<>"0" then
      if iz2<0 or iz2>9999 then goto errend
      if len(data2)>80 then goto errend
      if fnc=1 then
         data_tab(pos) = 102
         pos = pos + 1
         fnc = 0
      end if
      if iz_set(iz2,iz_size) then goto errend
      if data_set(iz2,data2,iz_size,pos,mode,data_tab) then goto errend
      if iz_size=0 then fnc = 1
   end if
   
   if not IsMissing(iz3) and not IsMissing(data3) and data3<>"" and data1<>"0" then
      if iz3<0 or iz3>9999 then goto errend
      if len(data3)>80 then goto errend
      if fnc=1 then
         data_tab(pos) = 102
         pos = pos + 1
         fnc = 0
      end if
      if iz_set(iz3,iz_size) then goto errend
      if data_set(iz3,data3,iz_size,pos,mode,data_tab) then goto errend
      if iz_size=0 then fnc = 1
   end if
   
   if not IsMissing(iz4) and not IsMissing(data4) and data4<>"" and data1<>"0" then
      if iz4<0 or iz4>9999 then goto errend
      if len(data4)>80 then goto errend
      if fnc=1 then
         data_tab(pos) = 102
         pos = pos + 1
         fnc = 0
      end if
      if iz_set(iz4,iz_size) then goto errend
      if data_set(iz4,data4,iz_size,pos,mode,data_tab) then goto errend
      if iz_size=0 then fnc = 1
   end if
   
   if pos>1 then
      pos = pos - 1
   else
      goto endend:
   end if
   
   dim bar_tab$()
   bartab = array("BEBFBF","BFBEBF","BFBFBE","AFAFBG","AFAGBF","AGAFBF","AFBFAG","AFBGAF","AGBFAF","BFAFAG","BFAGAF","BGAFAF","AEBFCF","AFBECF","AFBFCE","AECFBF","AFCEBF","AFCFBE","BFCFAE","BFAECF","BFAFCE","BECFAF","BFCEAF","CEBECE","CEAFBF","CFAEBF","CFAFBE","CEBFAF","CFBEAF","CFBFAE","BEBEBG","BEBGBE","BGBEBE","AEAGBG","AGAEBG","AGAGBE","AEBGAG","AGBEAG","AGBGAE","BEAGAG","BGAEAG","BGAGAE","AEBECG","AEBGCE","AGBECE","AECEBG","AECGBE","AGCEBE","CECEBE","BEAGCE","BGAECE","BECEAG","BECGAE","BECECE","CEAEBG","CEAGBE","CGAEBE","CEBEAG","CEBGAE","CGBEAE","CEDEAE","BFAHAE","DGAEAE","AEAFBH","AEAHBF","AFAEBH","AFAHBE","AHAEBF","AHAFBE","AEBFAH","AEBHAF","AFBEAH","AFBHAE","AHBEAF","AHBFAE","BHAFAE","BFAEAH","DECEAE","BHAEAF","AGDEAE","AEAFDF","AFAEDF","AFAFDE","AEDFAF","AFDEAF","AFDFAE","DEAFAF","DFAEAF","DFAFAE","BEBEDE","BEDEBE","DEBEBE","AEAEDG","AEAGDE","AGAEDE","AEDEAG","AEDGAE","DEAEAG","DEAGAE","AECEDE","AEDECE","CEAEDE","DEAECE","HBEAHAF","HBEAFAH","HBEAFCF","BGCEAEBH")
               '0        1        2        3        4        5        6         7       8        9        10       11       12       13       14       5555     6666     7777     8888     9999     00000   11111     2222     3333    44444     5555     6666     7777     8888     9999     00000   11111     2222     3333    44444     5555     6666     7777     8888     9999     00000   11111     2222     3333    44444     5555     6666     7777     8888     9999     00000   11111     2222     3333    44444     5555     6666     7777     8888     9999     00000   11111     2222     3333    44444     5555     6666     7777     8888     9999     00000   11111     2222     3333    44444     5555     6666     7777     8888     9999     00000   11111     2222     3333    44444     5555     6666     7777     8888     9999     00000   11111     2222     3333    44444     5555     6666     7777     8888     99       100       101   102 FNC1  START A   STERT B   START C   106 STOP
   for fnc1=1 to pos
      GS1_128 = GS1_128 & bartab(data_tab(fnc1))
   next fnc1
   
   dim check&
   check = data_tab(1)
   for fnc1=2 to pos
      check = check + data_tab(fnc1)*(fnc1-1)
   next fnc1
   check = check mod 103
   
   GS1_128 = GS1_128 & bartab(check) & bartab(106)   ' STOP
   
   goto endend:
   errend:
   GS1_128 = "err"
   endend:
End Function

Function iz_set%(iz%,iz_size%)
   iz_set=1
   iz_size=0
   
   dim iz_tmp%
   iz_tmp = iz
   
   if iz_tmp>99 then iz_tmp=fix(iz_tmp/10)
   if iz_tmp>99 then iz_tmp=fix(iz_tmp/10)
   
   if iz_tmp=0 then
      iz_size = 20
      if iz<100 then iz_set=0
   elseif iz_tmp=1 or iz_tmp=2 or iz_tmp=3 or iz_tmp=41 then
      iz_size = 16
      if iz<100 then iz_set=0
   elseif iz_tmp=4 then
      iz_size = 18
      if iz<100 then iz_set=0
   elseif iz_tmp>10 and iz_tmp<20 then
      iz_size = 8
      if iz<100 then iz_set=0
   elseif iz_tmp=20 then
      iz_size = 4
      if iz<100 then iz_set=0
   elseif iz_tmp>30 and iz_tmp<37 then
      iz_size = 10
      if iz<100 then iz_set=0
   else
      iz_set=0
      iz_size=0
   end if
   
End Function

Function data_set%(iz%,data$,iz_size%,pos%,mode%,data_tab)
   
   data_set=1
   dim c%,p%,si%,sd%,sa%
   
   si = len(cstr(iz))
   sd = len(data)
   
   if iz_size=0 then
      if si=1 then
         sa = si + sd + 1
      else
         sa = si + sd
      end if
   else
      sa = iz_size
   end if
   
   dim tmp_tab%(1 to 100)
   
   if si=1 then
      tmp_tab(1) = 48
      tmp_tab(2) = asc(iz)
      p = 3
   else
      for c=1 to si
         tmp_tab(c) = asc(mid(iz,c,1))
      next c
      p = si+1
   end if
   
   if iz_size=0 or sd<=iz_size-2 then
   
      if si+sd<iz_size then
         for c=3+sd to iz_size
            tmp_tab(p) = 48
            p = p + 1
         next c
      end if
      
      for c=1 to sd
         tmp_tab(p) = asc(mid(data,c,1))
         if tmp_tab(p)<32 then goto end_data_set:
         if tmp_tab(p)>126 then goto end_data_set:
         p = p + 1
      next c
      
   else
      goto end_data_set:
   end if
   
   for c=1 to sa
      
      if mode=0 then
         p = 0
         for si=c to sa
            if tmp_tab(si)>47 and tmp_tab(si)<58 then p=p+1
            if tmp_tab(si)<48 or tmp_tab(si)>57 then exit for
         next si
         if p>3 then
            data_tab(1) = 105   ' START C
            mode = 3
         else
            data_tab(1) = 104   ' START B
            mode = 2
         end if
         data_tab(2) = 102   ' FNC1
         pos = 3
      end if
      
      
      p = 0
      for si=c to sa
         if tmp_tab(si)>47 and tmp_tab(si)<58 then p=p+1
         if tmp_tab(si)<48 or tmp_tab(si)>57 then exit for
      next si
      
      if mode=2 and p>3 then
         data_tab(pos) = 99   ' CODE C
         pos = pos + 1
         if pos>48 then goto end_data_set:
         mode = 3
      end if
      
      if mode=3 and p>1 then
         data_tab(pos) = (tmp_tab(c)-48)*10 + (tmp_tab(c+1)-48)
         pos = pos + 1
         c = c + 1
         if pos>48 then goto end_data_set:
      end if
      
      if mode=3 and p<2 then
         data_tab(pos) = 100   ' CODE B
         pos = pos + 1
         if pos>48 then goto end_data_set:
         mode = 2
      end if
      
      if mode=2 and p<4 then
         data_tab(pos) = tmp_tab(c)-32
         pos = pos + 1
         if pos>48 then goto end_data_set:
      end if
   next c

   data_set=0
   end_data_set:
End Function





Starsze wersje.-----------------------

Makro dla innej czcionki, gdzie zestaw znaków jest zawarty w czcionce.
Aby kod wyświetlał się poprawnie potrzeba czcionkę code128 np stąd:
http://www.dafont.com/code-128.font albo http://www.dafont.com/fr/code-128.font albo http://grandzebu.net/index.php .
Czcionka jest na licencji GPL.
Skrypt testowałem u siebie i działa 100% (OOo3.2,win7) ewentualne błędy będę starał się poprawić.
Generowane kody zawierające cyfry , znaki i mieszane odczytywane były bez problemu przez czytnik PSC QuickScan 1000.
Makro instalujemy metodą "kopiuj wklej" w menadżerze makr OpenOffice .
Działa polecenie CODE128BC("jakis kod";0) .
Pierwszy argument to zawartość kodu liczba lub znaki, drugi to wymuszona długość kodu
pomocna przy np numerach seryjnych, dodaje zera wiodące lub przycina od lewej za długi ciąg.
Zero oznacza automatyczną długość .
Kod automatycznie przełącza się po między zastawem znaków B i C co czyni kod zwartym i krótkim.


Kod: Zaznacz cały   Rozszerz widokZwiń widok
REM  *****  BASIC  *****
REM V1.8 14-11-2012
REM Barcode creator code128bc by TN
REM Funkcja generuje kod code128 z zestawem znaków B i C.
REM Przełącznie pomiędzy zestawem B i C jest automatyczne
REM co czyni wygenerowany kod optymalnym i zwartym.
REM
REM GNU GPL General Public Licence
REM Free to commercial and private use.
REM
REM code128bc(znaki ascii lub liczba; wymuszona stała długość, 0 = automatyczna długość, max=50)
REM
REM ! UWAGA !
REM Do poprawnego działania wymagana jest odpowiednia czcionka code128 dostępna na licencji GPL
REM -------------------------------------------------------------------------------------------

Function code128bc(Optional data$, Optional size%) As String
code128bc=""
if IsMissing(data) or data="" then goto errend
if IsMissing(size) then size=0
if size > 49 then size = 50   'definiuje długość gdy za durzo
DIM count As Integer      'licznik do pętli
DIM count2 As integer      'licznik do pętli
DIM sizedata As integer
DIM codebar As String
DIM datastr As String
codebar=""
datastr=""
code128bc=""
if data="0" and size=0 then goto errend   'przerywa gdy brak danyh
datastr = CStr (data)      'zmienia liczbe na znaki
sizedata = Len (datastr)   'liczy ilość znaków
if sizedata=0 then goto errend
if sizedata > 50 then      'przycina zbyt długi ciąg
   count = sizedata - 49
   datastr = Mid(datastr,count)
end if
if size <> 0 then          'dostosowuje długość ciągu
   if sizedata < size then   'gdy za krutki
      for count = 1 to size-sizedata
         datastr = "0" & datastr
      Next count
   end if
   if sizedata > size then   'gdy za długi
      datastr = Mid(datastr,sizedata-size+1)
   end if
end if
sizedata = Len (datastr)   'liczy ilość znaków
for count=1 to sizedata   'przerywa gdy nieobsługiwany znak
   if Asc(Mid(datastr,count,1)) < 32 then goto errend   'przerywa gdy nieobsługiwany znak
   if Asc(Mid(datastr,count,1)) > 126 then goto errend   'przerywa gdy nieobsługiwany znak
Next count

DIM dc,a As Integer
DIM t As String
for count=1 to sizedata
   dc=0
   For count2 = count to sizedata                  ' liczy cyfry
      a = asc(mid(datastr,count2,1))
      if a>47 and a<58 then dc=dc+1
      if a<48 or a>57 then Exit For
   Next count2
   if dc>3 then                           'jesli 4 cyfry, drukuje
      if dc mod 2 <> 0 then dc=dc-1
      if Len (codebar) = 0 then
         codebar=Chr(205)      'jesli poczatek , start C
         t = "C"
      else
         codebar = codebar & Chr(199)               'jeśli nie , Code C
         t = "C"
      end if
      for count2=1 to dc/2         'drukowanie cyfr
         a = Val(Mid(datastr,count,2))+32
         if a>31 and a<127 then
            codebar = codebar & Chr(a)
            count = count + 2
         else
            codebar = codebar & Chr(a+68)
            count = count + 2
         end if
      Next count2
   end if
   if Len (codebar) = 0 then codebar=Chr(204)         'jesli poczatek , Start B
   if sizedata < count then Exit For
   if t="C" then
      codebar = codebar & Chr(200)               ' Code B
      t="B"
   end if
   codebar = codebar & Mid(datastr,count,1)
Next count
a = 0
dc = Asc(Mid(codebar,1,1)) - 100
sizedata = Len (codebar)   'liczy ilość znaków
for count=2 to sizedata      'obliczanie sumy kontrolnej
   a = Asc(Mid(codebar,count,1))
   if a < 127 then dc = dc + (a-32)*(count-1)
   if a > 194 then dc = dc + (a-100)*(count-1)
Next count
dc = dc mod 103
if dc<95 then
   codebar = codebar & Chr(dc+32)
else
   codebar = codebar & Chr(dc+100)
end if
code128bc = codebar & Chr(206)
errend:
End Function



Stara wersja makra GS1_128:
Kod: Zaznacz cały   Rozszerz widokZwiń widok
REM  *****  BASIC  *****
REM V1.3 01-08-2012
REM Barcode creator GS1-128 by TN
REM Funkcja generuje kod GS1-128 (EAN128) z zestawem znaków B i C.
REM Przełącznie pomiędzy zestawem B i C jest automatyczne
REM co czyni wygenerowany kod optymalnym i zwartym.
REM
REM GNU GPL General Public Licence
REM Free to commercial and private use.
REM
REM Działa polecenie:
REM GS1_128(IZ ; wartosc ; IZ2 ; wartosc2)
REM specyfikacja GS1 przewiduje mozliwosc uzycia wszystkich znakow ASCII
REM
REM ! UWAGA !
REM Do poprawnego działania wymagana jest odpowiednia czcionka barcode.ttf
REM http://user.services.openoffice.org/pl/forum/download/file.php?id=429
REM -----------------------------------------------------------------------------------
Private position as integer
Private checksum as long
Private mode as string
Function GS1_128(optional iz, optional data, optional iz2, optional data2) As String
GS1_128=""
if IsMissing(iz) or IsMissing(data) or iz="" or data="" then goto errend
if iz<1 and data<1 then goto errend   'przerywa gdy brak danyh
data = dataset(iz,data)
if IsMissing(iz2) or IsMissing(data2) or data2="" then
   iz2=0
   data2=0
else
   data2 = dataset(iz2,data2)
   if data2="" then goto errend
   if len(data)+len(data2)>48 then goto errend
end if
if len(data)>48 then goto errend
if check4digit(data)=4 then
   GS1_128 = znak_c128(137)   'Start C
   mode = "C"
else
   GS1_128 = znak_c128(136)   'Start B
   mode = "B"
end if
GS1_128 = GS1_128 & znak_c128(134) & printbar(data)   'FNC1  start gs1-128 data1

if iz2>0 or data2>0 then
   if izset(iz2)=0 then GS1_128 = GS1_128 & znak_c128(134)   'FNC1
   GS1_128 = GS1_128 & printbar(data2)
end if
GS1_128 = GS1_128 & znak_c128((checksum mod 103)+32) & "BGCEAEBH"
errend:
End Function

Sub printbar(printdata as string) as string
   DIM count as integer
   count = 1
   Do while count<=len(printdata)
      if check4digit(mid(printdata,count))=4 then
         if mode="B" then   'set CODE C
            printbar = printbar & znak_c128(131)   'set CODE C
            mode = "C"   'set CODE C
         end if
         Do while check4digit(mid(printdata,count))>1 and count<=len(printdata)
            printbar = printbar & znak_c128(mid(printdata,count,2))
            count = count + 2
         Loop
      else
         if mode="C" then   'set CODE B
            printbar = printbar & znak_c128(132)   'set CODE B
            mode = "B"   'set CODE B
         end if
         printbar = printbar & znak_c128(asc(mid(printdata,count,1)))
         count = count + 1
      end if
   Loop
End Sub

Sub check4digit(d1 as string) as integer
   check4digit = 0
   if d1="" then goto checkexit
   if asc(mid(d1,1,1))>57 or asc(mid(d1,1,1))<48 then goto checkexit
   if len(d1)<2 then goto checkexit
   if asc(mid(d1,2,1))>57 or asc(mid(d1,2,1))<48 then goto checkexit
   check4digit = 2
   if len(d1)<4 then goto checkexit
   if asc(mid(d1,3,1))>57 or asc(mid(d1,3,1))<48 then goto checkexit
   if asc(mid(d1,4,1))>57 or asc(mid(d1,4,1))<48 then goto checkexit
   check4digit = 4            
   checkexit:
End Sub

Sub izset(izs as string) as string
   Select Case mid(izs,1,2)
      case "00"   '20
      izset = 20
      case "01","02","03","41"   '16
      izset = 16
      case "04"   '18
      izset = 18
      case "11","12","13","14","15","16","17","18","19"   '8
      izset = 8
      case "20"   '4
      izset = 4
      case "31","32","33","34","35","36"   '10
      izset = 10
      Case Else
      izset = 0
   End Select
End Sub

Sub dataset(ds_iz, ds_data) as string
   dataset = ""
   ds_iz = CStr(ds_iz)
   if len(ds_iz)=1 then ds_iz = "0" & ds_iz
   if len(ds_iz)>4 then goto dataseterrend
   if izset(ds_iz)=0 and ds_data=0 then goto dataseterrend
   ds_data = CStr(ds_data)
   DIM add0 as string
   DIM dssize as integer
   DIM dssize2 as integer
   add0 = "00000000000000000"
   dssize2 = izset(ds_iz)
   dssize = len(ds_iz) + len(ds_data)
   if dssize2<>0 then
      if dssize>dssize2 then goto dataseterrend
      if dssize<dssize2 then dataset = ds_iz & mid(add0,1,dssize2-dssize) & ds_data
      if dssize=dssize2 then dataset = ds_iz & ds_data
   else
      dataset = ds_iz & ds_data
   end if
   for dssize=1 to len(dataset)
      if Asc(Mid(dataset,dssize,1)) < 32 then
         dataset = ""   'przerywa gdy nieobsługiwany znak
         goto dataseterrend
      end if
      if Asc(Mid(dataset,dssize,1)) > 126 then
         dataset = ""   'przerywa gdy nieobsługiwany znak
         goto dataseterrend
      end if
   Next dssize
   dataseterrend:
End Sub

Sub znak_c128(z128) as string
Select Case z128
   case "00" , 32
   znak_c128 = "BEBFBF"
   case "01" , 33
   znak_c128 = "BFBEBF"
   checksum = checksum + (1*position)
   case "02" , 34
   znak_c128 = "BFBFBE"
   checksum = checksum + (2*position)
   case "03" , 35
   znak_c128 = "AFAFBG"
   checksum = checksum + (3*position)
   case "04" , 36
   znak_c128 = "AFAGBF"
   checksum = checksum + (4*position)
   case "05" , 37
   znak_c128 = "AGAFBF"
   checksum = checksum + (5*position)
   case "06" , 38
   znak_c128 = "AFBFAG"
   checksum = checksum + (6*position)
   case "07" , 39
   znak_c128 = "AFBGAF"
   checksum = checksum + (7*position)
   case "08" , 40
   znak_c128 = "AGBFAF"
   checksum = checksum + (8*position)
   case "09" , 41
   znak_c128 = "BFAFAG"
   checksum = checksum + (9*position)
   case "10" , 42
   znak_c128 = "BFAGAF"
   checksum = checksum + (10*position)
   case "11" , 43
   znak_c128 = "BGAFAF"
   checksum = checksum + (11*position)
   case "12" , 44
   znak_c128 = "AEBFCF"
   checksum = checksum + (12*position)
   case "13" , 45
   znak_c128 = "AFBECF"
   checksum = checksum + (13*position)
   case "14" , 46
   znak_c128 = "AFBFCE"
   checksum = checksum + (14*position)
   case "15" , 47
   znak_c128 = "AECFBF"
   checksum = checksum + (15*position)
   case "16" , 48
   znak_c128 = "AFCEBF"
   checksum = checksum + (16*position)
   case "17" , 49
   znak_c128 = "AFCFBE"
   checksum = checksum + (17*position)
   case "18" , 50
   znak_c128 = "BFCFAE"
   checksum = checksum + (18*position)
   case "19" , 51
   znak_c128 = "BFAECF"
   checksum = checksum + (19*position)
   case "20" , 52
   znak_c128 = "BFAFCE"
   checksum = checksum + (20*position)
   case "21" , 53
   znak_c128 = "BECFAF"
   checksum = checksum + (21*position)
   case "22" , 54
   znak_c128 = "BFCEAF"
   checksum = checksum + (22*position)
   case "23" , 55
   znak_c128 = "CEBECE"
   checksum = checksum + (23*position)
   case "24" , 56
   znak_c128 = "CEAFBF"
   checksum = checksum + (24*position)
   case "25" , 57
   znak_c128 = "CFAEBF"
   checksum = checksum + (25*position)
   case "26" , 58
   znak_c128 = "CFAFBE"
   checksum = checksum + (26*position)
   case "27" , 59
   znak_c128 = "CEBFAF"
   checksum = checksum + (27*position)
   case "28" , 60
   znak_c128 = "CFBEAF"
   checksum = checksum + (28*position)
   case "29" , 61
   znak_c128 = "CFBFAE"
   checksum = checksum + (29*position)
   case "30" , 62
   znak_c128 = "BEBEBG"
   checksum = checksum + (30*position)
   case "31" , 63
   znak_c128 = "BEBGBE"
   checksum = checksum + (31*position)
   case "32" , 64
   znak_c128 = "BGBEBE"
   checksum = checksum + (32*position)
   case "33" , 65
   znak_c128 = "AEAGBG"
   checksum = checksum + (33*position)
   case "34" , 66
   znak_c128 = "AGAEBG"
   checksum = checksum + (34*position)
   case "35" , 67
   znak_c128 = "AGAGBE"
   checksum = checksum + (35*position)
   case "36" , 68
   znak_c128 = "AEBGAG"
   checksum = checksum + (36*position)
   case "37" , 69
   znak_c128 = "AGBEAG"
   checksum = checksum + (37*position)
   case "38" , 70
   znak_c128 = "AGBGAE"
   checksum = checksum + (38*position)
   case "39" , 71
   znak_c128 = "BEAGAG"
   checksum = checksum + (39*position)
   case "40" , 72
   znak_c128 = "BGAEAG"
   checksum = checksum + (40*position)
   case "41" , 73
   znak_c128 = "BGAGAE"
   checksum = checksum + (41*position)
   case "42" , 74
   znak_c128 = "AEBECG"
   checksum = checksum + (42*position)
   case "43" , 75
   znak_c128 = "AEBGCE"
   checksum = checksum + (43*position)
   case "44" , 76
   znak_c128 = "AGBECE"
   checksum = checksum + (44*position)
   case "45" , 77
   znak_c128 = "AECEBG"
   checksum = checksum + (45*position)
   case "46" , 78
   znak_c128 = "AECGBE"
   checksum = checksum + (46*position)
   case "47" , 79
   znak_c128 = "AGCEBE"
   checksum = checksum + (47*position)
   case "48" , 80
   znak_c128 = "CECEBE"
   checksum = checksum + (48*position)
   case "49" , 81
   znak_c128 = "BEAGCE"
   checksum = checksum + (49*position)
   case "50" , 82
   znak_c128 = "BGAECE"
   checksum = checksum + (50*position)
   case "51" , 83
   znak_c128 = "BECEAG"
   checksum = checksum + (51*position)
   case "52" , 84
   znak_c128 = "BECGAE"
   checksum = checksum + (52*position)
   case "53" , 85
   znak_c128 = "BECECE"
   checksum = checksum + (53*position)
   case "54" , 86
   znak_c128 = "CEAEBG"
   checksum = checksum + (54*position)
   case "55" , 87
   znak_c128 = "CEAGBE"
   checksum = checksum + (55*position)
   case "56" , 88
   znak_c128 = "CGAEBE"
   checksum = checksum + (56*position)
   case "57" , 89
   znak_c128 = "CEBEAG"
   checksum = checksum + (57*position)
   case "58" , 90
   znak_c128 = "CEBGAE"
   checksum = checksum + (58*position)
   case "59" , 91
   znak_c128 = "CGBEAE"
   checksum = checksum + (59*position)
   case "60" , 92
   znak_c128 = "CEDEAE"
   checksum = checksum + (60*position)
   case "61" , 93
   znak_c128 = "BFAHAE"
   checksum = checksum + (61*position)
   case "62" , 94
   znak_c128 = "DGAEAE"
   checksum = checksum + (62*position)
   case "63" , 95
   znak_c128 = "AEAFBH"
   checksum = checksum + (63*position)
   case "64" , 96
   znak_c128 = "AEAHBF"
   checksum = checksum + (64*position)
   case "65" , 97
   znak_c128 = "AFAEBH"
   checksum = checksum + (65*position)
   case "66" , 98
   znak_c128 = "AFAHBE"
   checksum = checksum + (66*position)
   case "67" , 99
   znak_c128 = "AHAEBF"
   checksum = checksum + (67*position)
   case "68" , 100
   znak_c128 = "AHAFBE"
   checksum = checksum + (68*position)
   case "69" , 101
   znak_c128 = "AEBFAH"
   checksum = checksum + (69*position)
   case "70" , 102
   znak_c128 = "AEBHAF"
   checksum = checksum + (70*position)
   case "71" , 103
   znak_c128 = "AFBEAH"
   checksum = checksum + (71*position)
   case "72" , 104
   znak_c128 = "AFBHAE"
   checksum = checksum + (72*position)
   case "73" , 105
   znak_c128 = "AHBEAF"
   checksum = checksum + (73*position)
   case "74" , 106
   znak_c128 = "AHBFAE"
   checksum = checksum + (74*position)
   case "75" , 107
   znak_c128 = "BHAFAE"
   checksum = checksum + (75*position)
   case "76" , 108
   znak_c128 = "BFAEAH"
   checksum = checksum + (76*position)
   case "77" , 109
   znak_c128 = "DECEAE"
   checksum = checksum + (77*position)
   case "78" , 110
   znak_c128 = "BHAEAF"
   checksum = checksum + (78*position)
   case "79" , 111
   znak_c128 = "AGDEAE"
   checksum = checksum + (79*position)
   case "80" , 112
   znak_c128 = "AEAFDF"
   checksum = checksum + (80*position)
   case "81" , 113
   znak_c128 = "AFAEDF"
   checksum = checksum + (81*position)
   case "82" , 114
   znak_c128 = "AFAFDE"
   checksum = checksum + (82*position)
   case "83" , 115
   znak_c128 = "AEDFAF"
   checksum = checksum + (83*position)
   case "84" , 116
   znak_c128 = "AFDEAF"
   checksum = checksum + (84*position)
   case "85" , 117
   znak_c128 = "AFDFAE"
   checksum = checksum + (85*position)
   case "86" , 118
   znak_c128 = "DEAFAF"
   checksum = checksum + (86*position)
   case "87" , 119
   znak_c128 = "DFAEAF"
   checksum = checksum + (87*position)
   case "88" , 120
   znak_c128 = "DFAFAE"
   checksum = checksum + (88*position)
   case "89" , 121
   znak_c128 = "BEBEDE"
   checksum = checksum + (89*position)
   case "90" , 122
   znak_c128 = "BEDEBE"
   checksum = checksum + (90*position)
   case "91" , 123
   znak_c128 = "DEBEBE"
   checksum = checksum + (91*position)
   case "92" , 124
   znak_c128 = "AEAEDG"
   checksum = checksum + (92*position)
   case "93" , 125
   znak_c128 = "AEAGDE"
   checksum = checksum + (93*position)
   case "94" , 126
   znak_c128 = "AGAEDE"
   checksum = checksum + (94*position)
   case "95" , 127
   znak_c128 = "AEDEAG"
   checksum = checksum + (95*position)
   case "96" , 128
   znak_c128 = "AEDGAE"
   checksum = checksum + (96*position)
   case "97" , 129
   znak_c128 = "DEAEAG"
   checksum = checksum + (97*position)
   case "98" , 130
   znak_c128 = "DEAGAE"
   checksum = checksum + (98*position)
   case "99" , 131
   znak_c128 = "AECEDE"   'CODE C
   checksum = checksum + (99*position)
   case 132
   znak_c128 = "AEDECE"   'CODE B
   checksum = checksum + (100*position)
   case 133
   znak_c128 = "CEAEDE"   'CODE A
   checksum = checksum + (101*position)
   case 134
   znak_c128 = "DEAECE"   'FNC1
   checksum = checksum + (102*position)
   case 135
   znak_c128 = "HBEAHAF"   'Start A
   checksum = 103
   position = 0
   case 136
   znak_c128 = "HBEAFAH"   'Start B
   checksum = 104
   position = 0
   case 137
   znak_c128 = "HBEAFCF"   'Start C
   checksum = 105
   position = 0
   Case Else
   znak_c128 = "none"
End Select
position = position + 1
End Sub



Pozdrawiam.
Załączniki
BARcode_v2.zip
Czcionka BARcode dla makra CODE128.
(5.86 KiB) Pobrane 128 razy
Ostatnio edytowano Pn paź 10, 2016 7:42 pm przez OOoUser46, łącznie edytowano 18 razy
MrTN. OOo 3.3 , Win7 .
OOoUser46
 
Posty: 21
Dołączył(a): So maja 12, 2012 2:43 pm
Lokalizacja: Olesno Tarn.

Re: Code128 generator, calc, barcode, macro .

Postprzez quest-88 » N maja 13, 2012 12:13 pm

Super, zawsze miło jest mieć coś nowego w zasobach. :-)

A patrzyłeś może na ten artykuł?
http://openofficeorgpl.blogspot.com/201 ... ceorg.html
Standardowa diagnostyka rozwiązuje 90% problemów typu "wcześniej działało, ale już nie działa".
Przepis na LibreOffice
Uzyskałeś pomoc? Poinformuj innych o sprawdzonym rozwiązaniu i podziękuj. Dodaj [SOLVED] w tytule.
Avatar użytkownika
quest-88
 
Posty: 1096
Dołączył(a): N maja 24, 2009 8:12 pm
Lokalizacja: Zabrze

Re: Code128 generator, calc, barcode, macro .

Postprzez OOoUser46 » Pn maja 14, 2012 12:14 am

quest-88 napisał(a):Super, zawsze miło jest mieć coś nowego w zasobach. :-)

A patrzyłeś może na ten artykuł?
http://openofficeorgpl.blogspot.com/201 ... ceorg.html


Tak. Patrzyłem .
Ten generator działa w OOo DRAW i trzeba ręcznie wpisywać każdą wartość.
W przypadku hurtowego generowania setek tysięcy kodów np: numer seryjny produktu,
lub zarządzania i drukowania np zasobów dużego magazynu ręczne wpisywanie każdego kodu jest dość kłopotliwe.
Poza tym w arkuszu kalkulacyjnym taki kod może być dynamiczny i zawierać np: dzisiejszą datę , godzinę lub na bieżąco ilość danego produktu.

Dziękuje za odpowiedź.
Pozdrawiam.
MrTN. OOo 3.3 , Win7 .
OOoUser46
 
Posty: 21
Dołączył(a): So maja 12, 2012 2:43 pm
Lokalizacja: Olesno Tarn.

Re: Code128 generator, calc, barcode, macro, GPL .

Postprzez srodek_86 » Pn cze 11, 2012 4:27 pm

Witam
Jestem zainteresowany tworzeniem kodów z użyciem GS-1 128. Przyda mi się w moim arkuszu w exel. Daj znac jak przebiegają Ci prace, będę bardzo wdzięczny, ponieważ nic nie moge znaleśc na internecie na temat gs-1 128. Jeżeli chodzi o ean 128 to znalazłem kilka dodatków. Ale dla samego kodu gs-128 niestety mi sie nie udało.
Pozdrawiam i życze powodzenia w tworzeniu modułu.
LibreOffice na Windows Vista / LibreOffice Ubuntu 12.04
srodek_86
 
Posty: 7
Dołączył(a): Pn cze 11, 2012 3:33 pm

Re: Code128 generator, calc, barcode, macro, GPL .

Postprzez OOoUser46 » Wt cze 12, 2012 10:36 pm

srodek_86 napisał(a):Witam
Jestem zainteresowany tworzeniem kodów z użyciem GS-1 128.....


Witam.
Dodałem nowe makro GS1_128() .
Mam nadzieje że będzie użyteczne.
Ewentualne błędy będę się starał poprawić.

Pozdrawiam.
MrTN. OOo 3.3 , Win7 .
OOoUser46
 
Posty: 21
Dołączył(a): So maja 12, 2012 2:43 pm
Lokalizacja: Olesno Tarn.

Re: Code128 generator, calc, barcode, macro, GS1, GPL .

Postprzez srodek_86 » Cz cze 14, 2012 11:48 am

Wielkie dzięki. Moduł chodzi bardzo sprawnie. Tylko jeszcze musze troszkę czcionkę przerobic, żeby dostosowac do wymogów poczty.
Pozdrawiam
LibreOffice na Windows Vista / LibreOffice Ubuntu 12.04
srodek_86
 
Posty: 7
Dołączył(a): Pn cze 11, 2012 3:33 pm

Re: Code128 generator, calc, barcode, macro, GS1, GPL .

Postprzez OOoUser46 » Cz cze 14, 2012 12:24 pm

srodek_86 napisał(a):...... Tylko jeszcze musze troszkę czcionkę przerobic, żeby dostosowac do wymogów poczty.
Pozdrawiam


Czcionkę robiłem w kreatorze online: http://fontstruct.com/ .
Wąski pasek (litera A) ma szerokość 2px i wysokość 51px,
drugi pasek (litera B) ma szerokość 4px i wysokość 51px itd.
Litery "ABCD" czarne paski, "EFGH" białe paski.
Dodatkowo dla innych makr litery "N" 2px na 51px i "W" 5px na 51px.
Litery "NW" czarne paski, "nw" białe paski.
Będziesz miał jakiś punkt odniesienia przy edycji.
Pozdrawiam.
MrTN. OOo 3.3 , Win7 .
OOoUser46
 
Posty: 21
Dołączył(a): So maja 12, 2012 2:43 pm
Lokalizacja: Olesno Tarn.

Re: Code128 generator, calc, barcode, macro, GS1, GPL .

Postprzez srodek_86 » Cz cze 14, 2012 5:38 pm

Dzięki wielkie to mi pomoże w edycji. Potrzebuje tylko zwiększyc wysokośc 2 krotnie. Wtedy przy czcionce 39 szerokośc bedzie odpowiadała wysokości i wymaganią poczty. Ja sciagnałem sobie FontForge na ubuntu.
LibreOffice na Windows Vista / LibreOffice Ubuntu 12.04
srodek_86
 
Posty: 7
Dołączył(a): Pn cze 11, 2012 3:33 pm

Re: Code128 generator, calc, barcode, macro, GS1, GPL .

Postprzez srodek_86 » Pt cze 15, 2012 4:12 pm

Czcionkę robiłem w kreatorze online: http://fontstruct.com/ .
Wąski pasek (litera A) ma szerokość 2px i wysokość 51px,
drugi pasek (litera B) ma szerokość 4px i wysokość 51px itd.
Litery "ABCD" czarne paski, "EFGH" białe paski.
Dodatkowo dla innych makr litery "N" 2px na 51px i "W" 5px na 51px.
Litery "NW" czarne paski, "nw" białe paski.
Będziesz miał jakiś punkt odniesienia przy edycji.
Pozdrawiam.


Powiedz mi jeszcze jak w fontstruct zrobic białe odstepy? bo zdecydowałem sie na ten program
LibreOffice na Windows Vista / LibreOffice Ubuntu 12.04
srodek_86
 
Posty: 7
Dołączył(a): Pn cze 11, 2012 3:33 pm

Re: Code128 generator, calc, barcode, macro, GS1, GPL .

Postprzez OOoUser46 » Pt cze 15, 2012 7:14 pm

srodek_86 napisał(a):Powiedz mi jeszcze jak w fontstruct zrobic białe odstepy? bo zdecydowałem sie na ten program


He he. Też miałem ten problem.
Ja zrobiłem to w taki sposób, że przy 'Baseline' zaraz na początku czcionki zrobiłem możliwie najmniejszą kropkę,
aby program nie uznał znaku za pusty, a szerokość uzyskałem klikając na MENU > VIEW > LITTER WIDTH.
Wtedy pojawia się zielona linia Width i nią ustalamy szerokość paska.
Oczywiście w przypadku białych pasków wysokość jest bez znaczenia.
Podczas zapisu/podglądu gdy będzie dostępna opcja SPACING musi być ustawiona na GLOBAL "0" (zero).
Powodzenia. Daj znać jak poszło ;)
MrTN. OOo 3.3 , Win7 .
OOoUser46
 
Posty: 21
Dołączył(a): So maja 12, 2012 2:43 pm
Lokalizacja: Olesno Tarn.

Re: Code128 generator, calc, barcode, macro, GS1, GPL .

Postprzez srodek_86 » Pt cze 15, 2012 9:46 pm

Udało się:) Mam czcionke już dostosowaną do wymogów poczty. Bardzo mi się przydały twoje dane. Podniosłem ją do 100 px i jest ok. W poniedziałek sprawdzę na poczcie na skanerze jak działają kody, ale jestem pewien że będzie dobrze, bo idealnie sie pokrywają. Dzięki za wszystko bardzo ułatwiłeś mi życie. A mam pytanie orientujesz się może jak działa makro na wysyłanie poczty z calc?
Ostatnio edytowano N cze 17, 2012 11:42 pm przez Jan_J, łącznie edytowano 1 raz
Powód: Podział wątku. Bardzo proszę utrzymywać spójność tematyczną wątków.
LibreOffice na Windows Vista / LibreOffice Ubuntu 12.04
srodek_86
 
Posty: 7
Dołączył(a): Pn cze 11, 2012 3:33 pm

Re: Code128 generator, calc, barcode, macro, GS1, GPL .

Postprzez dj55 » Śr lip 18, 2012 11:16 am

Witam

Próbuje przełożyć twoje makra na Crystal Reports i powiedzmy, że mi się udało. Natomiast pojawił się problem jeżeli zacząłem konwertować ciekawsze rzeczy. Twoje makra mają problem na przykład z takim kodem: 119/2012 b30.26t9.18 , zapiszą go w kreskowy natomiast skaner już nie odczyta.
Zaznaczę, że błąd jest w miejscu
Kod: Zaznacz cały   Rozszerz widokZwiń widok

for count2=1 to dc/2       
   a = Val(Mid(datastr,count1,2))+32   
    if a>31 and a<127 then
    codebar = codebar & Chr(a) //Przepełnienie wartości liczbowej
   count1 = count1 + 2
   else
   codebar = codebar & Chr(a+68)
   count1 = count1 + 2
   end if
Next count2

Pozdrawiam
dj55
 
Posty: 1
Dołączył(a): Śr lip 18, 2012 11:14 am

Re: Code128 generator, calc, barcode, macro, GS1, GPL .

Postprzez OOoUser46 » Śr lip 18, 2012 4:18 pm

dj55 napisał(a):Witam
Próbuje przełożyć twoje makra na Crystal Reports i powiedzmy, że mi się udało. Natomiast pojawił się problem ........


Witam.
Znalazłem problem.
Błąd znajdował się w miejscu w którym funkcja ustalała czy cztery kolejne znaki to cyfry i czy zmienić zestaw znaków.
Z powodu błędu znak "/" był traktowany jako cyfra.
Problem dotyczył makra CODE128BC() czcionka code128 i CODE128() czcionka BARcode.
Makra już zostały poprawione.
Wartość "119/2012 b30.26t9.18" drukuje się prawidłowo i jest czytana przez mój czytnik PSC QuickScan 1000.
Nie znalazłem błędu przepełnienia dla zmiennej "codebar". Zaznaczam, że ta zmienna jest typu STRING a nie INTEGER.
Być może została błędnie przekonwertowana.
Jako ciekawostkę dodam , że przed poprawą mój czytnik czytał taki kod lecz zwracał "11092012 b30006t9.18" .

Kod: Zaznacz cały   Rozszerz widokZwiń widok
for count=1 to sizedata
   dc=0
   For count2 = count to sizedata                 
      a = asc(mid(datastr,count2,1))
      if a>47 and a<58 then dc=dc+1
      if a<48 or a>57 then Exit For    ' <<<---  BŁĄD  zamiast 48 było 46  !!!!!!!!!
   Next count2
   if dc>3 then                           

Pozdrawiam.
I dziękuje za zainteresowanie.
MrTN. OOo 3.3 , Win7 .
OOoUser46
 
Posty: 21
Dołączył(a): So maja 12, 2012 2:43 pm
Lokalizacja: Olesno Tarn.

Re: Code128 generator, calc, barcode, macro, GS1, GPL .

Postprzez m0nia » Wt lis 13, 2012 2:47 pm

Witam
Pozwoliłam sobie skorzystać z załacznych przez Pana makr. niestety przy pierwszym(code 128bc) makro się uruchamia ale nie wszystkie kody sa poprawne - mimo zastosowania odpowiedniej czcionki. Przy drugim Code128 otzrymuje błąd - pewnie robię coś nie tak:
ByRef argument type mismatch.
----------------
If check4(data) > 3 Then
-------------------
Czy moge prosic o jakas wskazówkę. będe wdzięczna.
OpenOffice 3.1
m0nia
 
Posty: 3
Dołączył(a): Wt lis 13, 2012 2:43 pm

Re: Code128 generator, calc, barcode, macro, GS1, GPL .

Postprzez OOoUser46 » Wt lis 13, 2012 5:36 pm

m0nia napisał(a):Witam .............


Witam.
Wprowadziłem drobną korektę do makr CODE128BC i CODE128 , która mogła powodować ten błąd.
Ale problemem może być co innego.
Miał bym parę pytań:

Jaki arkusz kalkulacyjny używasz i w jakiej wersji ?
Ja testowałem makra pod OpenOffice.org 3.3.0 i LibreOffice 3.5.5.3 .

Czy każdy kod nie działa, czy tylko niektóre.
Jeżeli część kodów działa a część nie proszę podać kilka tych co nie działają.

Proszę sprawdzić czy np. takie polecenie działa CODE128("test")
Być może wprowadzanie są jakieś znaki których kod nie obsługuje.
Najlepiej wprowadzać wartość jako tekst.

Pozdrawiam.
MrTN. OOo 3.3 , Win7 .
OOoUser46
 
Posty: 21
Dołączył(a): So maja 12, 2012 2:43 pm
Lokalizacja: Olesno Tarn.

Re: Code128 generator, calc, barcode, macro, GS1, GPL .

Postprzez m0nia » Śr lis 14, 2012 12:32 pm

Witam
Mam V.3.3.0. Przekopiowałam makro code128bc jeszcze raz i już działa ok. Dziękuję. Ale nasuwa mi sie jeszcze jedno pytanie. Próbowałam to makro wkleić do excela i nie działają niektóre kody, np: 1234567892 ,1234567895. Natomiast 1234567890 działa. Czy wiesz może dlaczego?
OpenOffice 3.1
m0nia
 
Posty: 3
Dołączył(a): Wt lis 13, 2012 2:43 pm

Re: Code128 generator, calc, barcode, macro, GS1, GPL .

Postprzez OOoUser46 » Cz lis 15, 2012 2:03 am

m0nia napisał(a):Witam
Mam V.3.3.0. Przekopiowałam makro code128bc jeszcze raz i już działa ok. Dziękuję. Ale nasuwa mi sie jeszcze jedno pytanie. Próbowałam to makro wkleić do excela i nie działają niektóre kody, np: 1234567892 ,1234567895. Natomiast 1234567890 działa. Czy wiesz może dlaczego?


Zmodyfikowałem nieco makra CODE128 i CODE128BC.
Powinny lepiej działać na Excelu.
Proponuje używać makra CODE128 i czcionki BarCode.
Ponieważ z czcionką do makra CODE128BC czasem jest taki problem,
że niektóre znaki zamiast wyświetlać paski to pojawiają się zwykłe literki.
Makro CODE128 też ma w sobie zestaw znaków B i C.

Pozdrawiam.
MrTN. OOo 3.3 , Win7 .
OOoUser46
 
Posty: 21
Dołączył(a): So maja 12, 2012 2:43 pm
Lokalizacja: Olesno Tarn.

Re: Code128 generator, calc, barcode, macro, GS1, GPL .

Postprzez m0nia » Pt lis 16, 2012 10:46 am

Ogroniaste dzięki . Bardzo mi pomogłeś.
OpenOffice 3.1
m0nia
 
Posty: 3
Dołączył(a): Wt lis 13, 2012 2:43 pm

Re: Code128 generator, calc, barcode, macro, GS1, GPL .

Postprzez pherman » Cz maja 30, 2013 12:52 am

Witam

Mam problem z uruchomieniem tego macra i barcodu.

Chcę go uruchomić w Office 2010
Przy użyciu czcionki Code 128 - barcod niby jest ale po zmianie symboli z kodem nic się nie dzieje
Natomiast przy czcionce Barcode - są dziwne znaki.


Proszę o pomoc.

Potrzebuje z tego typu ciągu znaków wyciągnąć do barcoda np.
%00333000260238510724B113616

chcę uzyskać takie znaki (pogrubiona czcionka)
Załączniki
Bez tytułu.jpg
code128bc.jpg
code128bc.jpg (5.1 KiB) Przeglądane 29851 razy
OpenOffice 3.1 na Windows 7
pherman
 
Posty: 1
Dołączył(a): Cz maja 30, 2013 12:31 am

Re: Code128 generator, calc, barcode, macro, GS1, GPL .

Postprzez OOoUser46 » Pt cze 07, 2013 6:33 pm

Witam.

Właśnie testowałem makra na Office 2010, WIN732bit.
Z pierwszym makrem, a właściwie czcionką do niego jest taki problem, że nie wszystkie znaczki się wyświetlają.
Ale to zależy od programu np. WordPad wyświetla a Office nie.
Nie bardzo jest na to rada, być może znaczenie ma wersja językowa systemu operacyjnego.

Dlatego napisałem drugie makro CODE128 i specjalną czcionkę dla niego BARcoce.
Wklej do Excela tylko drugie makro i użyj polecenia =CODE128("%00333000260238510724B113616") i czcionki BARcode.
Testowałem u siebie i działa OK. Kod jest czytany przez czytnik.

Makro reaguje też na zmiany wartości.
Czy polecenia w komórkach i odwołania do nich są właściwe?
Sprawdź czy komórki wyświetlają poprawnie same wartości o które Ci chodzi,
i jeśli tak to obejmij je makrem CODE128 i nawiasem oraz zmień czcionkę na BARcode .

P.S:
Polecenie Excela które wyciągnie pogrubione znaki: =FRAGMENT.TEKSTU("%00333000260238510724B113616";9;14)
Polecenie generujące kod: =code128(FRAGMENT.TEKSTU("%00333000260238510724B113616";9;14))
W miejsce ciągu znaków można wstawić adres komórki zawierającej ciąg znaków: =code128(FRAGMENT.TEKSTU(D12;9;14))
W tym przykładzie D12 .
Polecenie FRAGMENT.TEKSTU() w rzeczywistości nie wyszukuje stylu formatowania znaków,
ale zawiera ich lokalizację w ciągu, tu pierwszy argument to ciąg znaków, drugi początkowy znak w ciągu i trzeci długość oczekiwanego ciągu.
Pozdrawiam.

W razie problemów służę pomocą.
MrTN. OOo 3.3 , Win7 .
OOoUser46
 
Posty: 21
Dołączył(a): So maja 12, 2012 2:43 pm
Lokalizacja: Olesno Tarn.

Re: Code128 generator, calc, barcode, macro, GS1, GPL .

Postprzez martaposty1 » Śr lip 03, 2013 12:56 pm

Generator kodów kreskowych pozwala na zakodowanie wszystkich 128 znaków ASCII, od 0 do 127 włącznie. Kod 128 jest jedną z symbolik kodów kreskowych powszechnie stosowanych dzięki swoim parametrom i braku wymagań rejestracyjnych. Kod 128 cechuje się dużym zagęszczeniem informacji, zwłaszcza numerycznych.

Udostępniony tutaj generator kodów kreskowych dla OpenOffice Calc dobrze generuje właśnie kod 128.
Spójrz praw­dzie w oczy i po­wiedz, że to kłamstwo...
martaposty1
 
Posty: 12
Dołączył(a): Wt lip 02, 2013 2:20 pm

Re: Code128 generator, calc, barcode, macro, GS1, GPL .

Postprzez przechera » Cz lip 07, 2016 12:12 pm

srodek_86 napisał(a):Udało się:) Mam czcionke już dostosowaną do wymogów poczty. Bardzo mi się przydały twoje dane. Podniosłem ją do 100 px i jest ok. W poniedziałek sprawdzę na poczcie na skanerze jak działają kody, ale jestem pewien że będzie dobrze, bo idealnie sie pokrywają. Dzięki za wszystko bardzo ułatwiłeś mi życie. A mam pytanie orientujesz się może jak działa makro na wysyłanie poczty z calc?


Również tworzę etykietę logistyczną GS1 i wyższą czcionkę porzebowałem, w fontstruct.com udostępniam pod nazwą BarkodeZJA
Libre Office 5.1.2.2 (x64) na Windows 10
przechera
 
Posty: 1
Dołączył(a): Cz lip 07, 2016 12:04 pm

Re: Code128 generator, calc, barcode, macro, GS1, GPL .

Postprzez laiten » Pn paź 10, 2016 9:55 am

Witam, czy testował ktoś na wersji 4.1.2 ?
U mnie niestety jest problem. Używam czcionki Code 128. Barcod jest, ale po zmianie symboli z kodem nic się nie dzieje.
OpenOffice 4.1.2 na Windows 10. Pakiet biuro wy wykorzystuje prowadząc własne biuro rachunkowe. Jelenia Góra - to tutaj mieszkam i prowadzę swoja działalność
laiten
 
Posty: 1
Dołączył(a): Pn paź 10, 2016 9:50 am

Re: Code128 generator, calc, barcode, macro, GS1, GPL .

Postprzez OOoUser46 » Pn paź 10, 2016 7:39 pm

laiten napisał(a):Witam, czy testował ktoś na wersji 4.1.2 ?
U mnie niestety jest problem. Używam czcionki Code 128. Barcod jest, ale po zmianie symboli z kodem nic się nie dzieje.


Witam.
Aktualnie używam tej wersji na Win10 i działa ok.
W Excelu też działa. Podaj więcej szczegółów.
Co wpisujesz w komórkę, co się wyświetla a co powinno się wyświetlać ?
Postaram się pomóż.
MrTN. OOo 3.3 , Win7 .
OOoUser46
 
Posty: 21
Dołączył(a): So maja 12, 2012 2:43 pm
Lokalizacja: Olesno Tarn.

Re: Code128 generator, calc, barcode, macro, GS1, GPL .

Postprzez intonelad » Pt paź 14, 2016 3:07 pm

Skorzystałem wczoraj ze skryptów, wszystko działa jak należy, dziękuję :)
OpenOffice 4.1.2 Windows 7 . Pakietu OO używam w sowim biurze rachunkowym, gdzie pracuję jako księgowa Jelenia Góra - to tutaj pracuję.
intonelad
 
Posty: 1
Dołączył(a): Pt paź 14, 2016 3:05 pm

Re: Code128 generator, calc, barcode, macro, GS1, GPL .

Postprzez yalyonc » Śr lis 02, 2016 10:25 am

Jeśli przy Code 128 otrzymuje taki błąd:

ByRef argument type mismatch.
----------------
If check4(data) > 3 Then
-------------------

To co powinnam zrobić?
OpenOffice 4.1.2, Windows 10. OpenOffice pomaga mi w pracach biurowych, a takze przy wypelnianiu dokumentow jak do kiedy PIT 37 itp.
yalyonc
 
Posty: 1
Dołączył(a): Śr lis 02, 2016 10:13 am

Re: Code128 generator, calc, barcode, macro, GS1, GPL .

Postprzez OOoUser46 » Śr lis 02, 2016 8:03 pm

yalyonc napisał(a):Jeśli przy Code 128 otrzymuje taki błąd:

ByRef argument type mismatch.
----------------
If check4(data) > 3 Then
-------------------

To co powinnam zrobić?



A jak wygląda argument?
co wpisujesz w poleceniu?

Wygląda to na niewłaściwy argument.
Czyli wprowadzasz do makra dane z których nie można utworzyć kodu.
Sprawdź czy nie ma gdzieś literówki.

I podaj jaki używasz pakiet biurowy i w jakiej wersji.
MrTN. OOo 3.3 , Win7 .
OOoUser46
 
Posty: 21
Dołączył(a): So maja 12, 2012 2:43 pm
Lokalizacja: Olesno Tarn.

Re: Code128 generator, calc, barcode, macro, GS1, GPL .

Postprzez rares » Pn lis 28, 2016 11:21 am

Witam, skorzystałam z Pańskiego generatora (znalazłąm go szukając czegoś podobnie działającego w googlach) i działa super! Dlatego warto podziękować, bo uratował mi skórę :D Dziękuję :)
OpenOffice 4.1.2, Windows 8.1. Pracuje jako ksiegowa Walbrzychska i OpenOffica uzywam na co dzien w pracy.
rares
 
Posty: 1
Dołączył(a): Pn lis 28, 2016 11:13 am


Powrót do Projekty użytkowników

Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 1 gość