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