Code11 generator, calc, barcode, macro, GPL .

Gotowe szablony, skrypty, makropolecenia i rozszerzenia. Tutaj możesz pochwalić i podzielić się swoją twórczością z innymi użytkownikami
OOoUser46
Posty: 23
Rejestracja: sob maja 12, 2012 2:43 pm
Lokalizacja: Olesno Tarn.

Code11 generator, calc, barcode, macro, GPL .

Post autor: OOoUser46 »

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.

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

Pozdrawiam.
MrTN. OOo 3.3 , Win7 .
ODPOWIEDZ