Code11 generator, calc, barcode, macro, GPL .
: śr lip 25, 2012 2:37 pm
Witam.
Jest to generator kodu kreskowego Code11 dla arkusza kalkulacyjnego.
Aby kod wyświetlał się poprawnie potrzeba całkowicie darmową czcionkę: http://user.services.openoffice.org/pl/ ... php?id=429
Ta czcionka jest kompatybilna z innymi moimi makrami.
Skrypt testowałem u siebie i działa 100% (OOo3.2,win7) ewentualne błędy będę starał się poprawić.
Makro instalujemy metodą "kopiuj wklej" w menadżerze makr OpenOffice .
Działa polecenie np. CODE11("12345-54321") lub CODE11(123-45;0;0) .
Pierwszy argument to zawartość kodu. Obsługiwane znaki: 0 do 9 i "-"
Drugi opcjonalny to stała wymuszona długość kodu pomocna przy np numerach seryjnych, dodaje zera wiodące
lub przycina od lewej za długi ciąg. Zero lub brak oznacza automatyczną długość .
Trzeci opcjonalny kontroluje sposób dodania sumy kontrolnej :
0 (Zero) lub brak: suma kontrolna będzie dodana automatycznie. Poniżej 10 znaków "C", powyżej "C+K"
1 (Jeden) : jedna cyfra "C" .
2 (Dwa) : dwie cyfray "C+K" .
3 (Trzy) : brak sumy kontrolnej.
Generator wraz z czcionką generuje kody typu slim (niskie),
bez cyfr czytelnych dla człowieka, tylko kod kreskowy.
Pozdrawiam.
Jest to generator kodu kreskowego Code11 dla arkusza kalkulacyjnego.
Aby kod wyświetlał się poprawnie potrzeba całkowicie darmową czcionkę: http://user.services.openoffice.org/pl/ ... php?id=429
Ta czcionka jest kompatybilna z innymi moimi makrami.
Skrypt testowałem u siebie i działa 100% (OOo3.2,win7) ewentualne błędy będę starał się poprawić.
Makro instalujemy metodą "kopiuj wklej" w menadżerze makr OpenOffice .
Działa polecenie np. CODE11("12345-54321") lub CODE11(123-45;0;0) .
Pierwszy argument to zawartość kodu. Obsługiwane znaki: 0 do 9 i "-"
Drugi opcjonalny to stała wymuszona długość kodu pomocna przy np numerach seryjnych, dodaje zera wiodące
lub przycina od lewej za długi ciąg. Zero lub brak oznacza automatyczną długość .
Trzeci opcjonalny kontroluje sposób dodania sumy kontrolnej :
0 (Zero) lub brak: suma kontrolna będzie dodana automatycznie. Poniżej 10 znaków "C", powyżej "C+K"
1 (Jeden) : jedna cyfra "C" .
2 (Dwa) : dwie cyfray "C+K" .
3 (Trzy) : brak sumy kontrolnej.
Generator wraz z czcionką generuje kody typu slim (niskie),
bez cyfr czytelnych dla człowieka, tylko kod kreskowy.
Kod: Zaznacz cały
REM ***** BASIC *****
REM V1.3 14-11-2012
REM Barcode creator code11 by TN
REM Funkcja generuje kod code11
REM
REM GNU GPL General Public Licence
REM Free to commercial and private use.
REM
REM Supported characters: 0 to 9 and "-"
REM code11(data; optional size ; optional checksum )
REM checksum = 0 or none : auto
REM checksum = 1 : one digit "C"
REM checksum = 2 : two digit "C+K"
REM checksum = 3 : disable
REM
REM ! NOTE !
REM For proper operation is required font barcode.ttf free
REM http://user.services.openoffice.org/pl/forum/download/file.php?id=429
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 -----------------------------------------------------------------------------------
Function code11(Optional data$, Optional size%, Optional c%) As String
code11=""
if IsMissing(data) then goto errend
if IsMissing(c) then c=0
if IsMissing(size) then size=0
if data="" and size=0 then goto errend
if size>50 then goto errend
DIM size2 As Integer
DIM count As Integer 'licznik do pętli
size2 = Len(data) 'liczy ilość znaków
if size2=0 then goto errend
if size2>50 then goto errend
for count=1 to size2 'przerywa gdy nieobsługiwany znak
if (Asc(Mid(data,count,1)) < 48 and Asc(Mid(data,count,1)) <> 45) or Asc(Mid(data,count,1)) > 57 then goto errend
Next count
if size > 0 then 'dostosowuje długość ciągu
if size2 < size then 'gdy za krotki
for count = 1 to size-size2
data = "0" & data
Next count
end if
if size2 > size then 'gdy za długi
data = Mid(data,size2-size+1)
end if
end if
size2 = Len(data) 'liczy ilość znaków
if c < 3 then 'calculate checksum
DIM check_ck As Long
DIM weight As integer
check_ck = 0
weight = 1
count=size2
Do while count>0 ' calculate C
if Mid(data,count,1) = "-" then
check_ck = check_ck + (weight * 10)
else
check_ck = check_ck + (weight * Mid(data,count,1))
end if
count = count - 1
weight = weight + 1
if weight > 10 then weight = 1
Loop
check_ck = check_ck mod 11
if check_ck = 10 then
data = data & "-"
else
data = data & check_ck
end if
size2 = Len(data) 'liczy ilość znaków
if (c=0 and size2>10) or c=2 then
check_ck = 0
weight = 1
count=size2
Do while count>0 ' calculate K
if Mid(data,count,1) = "-" then
check_ck = check_ck + (weight * 10)
else
check_ck = check_ck + (weight * Mid(data,count,1))
end if
count = count - 1
weight = weight + 1
if weight > 9 then weight = 1
Loop
check_ck = check_ck mod 11
if check_ck = 10 then
data = data & "-"
else
data = data & check_ck
end if
size2 = Len(data) 'liczy ilosc znakow
end if
end if
DIM znak(10) As String
znak(0) = "NnNnWn"
znak(1) = "WnNnWn"
znak(2) = "NwNnWn"
znak(3) = "WwNnNn"
znak(4) = "NnWnWn"
znak(5) = "WnWnNn"
znak(6) = "NwWnNn"
znak(7) = "NnNwWn"
znak(8) = "WnNwNn"
znak(9) = "WnNnNn"
code11 = "wNnWwNn" ' print START
for count=1 to size2
if Mid(data,count,1) = "-" then
code11 = code11 & "NnWnNn"
else
code11 = code11 & znak(Mid(data,count,1))
end if
Next count
code11 = code11 & "NnWwNw" ' STOP
errend:
End Function