Code39, 3of9, 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.

Code39, 3of9, generator, calc, barcode, macro, GPL .

Post autor: OOoUser46 »

Witam.

Oto moje kolejne makro z rodziny BARcode.
Tym razem Code39, kod 3 z 9 + mod43.
Aby kod wyświetlał się poprawnie potrzeba całkowicie darmową
czcionkę barcode którą sam zrobiłem: http://user.services.openoffice.org/pl/ ... php?id=429
Ta czcionka jest kompatybilna z moim makrem code25i i EAN.
Makro specjalnie dostosowane do czcionki barcode.
Tablica znaków nie znajduje się w czcionce lecz w makro.
Skrypt testowałem u siebie i działa 100% (OOo3.2,win7) ewentualne błędy będę starał się poprawić.
Generowane kody odczytywane były bez problemu przez czytnik PSC QuickScan 1000.
Makro instalujemy metodą "kopiuj wklej" w menadżerze makr OpenOffice .
Działa polecenie CODE39("TEST";0;0) .
Pierwszy argument to zawartość kodu liczba lub znaki " A-Z 0-9 -. space $/+% "
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 ustawiony na 1 powoduje dodanie sumy kontrolnej mod43.

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.4 14-11-2012
REM Barcode creator code39 by TN
REM Funkcja generuje kod code39 + mod43
REM 
REM GNU GPL General Public Licence
REM Free to commercial and private use.
REM 
REM code39(znaki ASCII, cyfry, liczba ; staly wymuszony rozmiar 0=auto size, max=50 ; mod43 0=disable 1=enable)
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 code39(Optional data$, Optional size%, Optional check%) As String
code39 = ""
if IsMissing(data) or data="" then goto errend
if IsMissing(check) then check=0	'checksum mod43
if IsMissing(size) then size=0
DIM size2 As Integer
DIM count As Integer      'licznik do petli
DIM codebar As String
codebar = ""
if data="0" and size=0 then goto errend
size2 = Len(data)
if size2=0 or size2>50 or size>50 then goto errend
if size>0 then	'dostosowuje dlugosc
	if size>size2 then	'gdy za krotki
		for count=1 to size-size2
			data = "0" & data
		Next count
	end if
	if size<size2 then	'gdy za dlugi
		data = Mid(data,(size2-size)+1,size)
	end if
end if
data = UCase(data)
if check=1 then data = data & checkc39(data)	'add checksum
size2 = Len(data)
for count=1 to size2	'drukowanie kodu
	if znakc39(Asc(Mid(data,count,1))) = "none" then goto errend
	barcode = barcode & znakc39(Asc(Mid(data,count,1))) & "n"
Next count
code39 = "wNwNnWnWnNn" & barcode & "NwNnWnWnNw"
errend:
End Function

Function checkc39(checkdata As String) As String
Const character = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ-. $/+%"
DIM count2 As Integer
DIM count3 As Integer
DIM c As long
checkc39 = ""
c = 0
for count2=1 to Len(checkdata)
	for count3=1 to Len(character)
		if Mid(checkdata,count2,1)=Mid(character,count3,1) then
			c = c + (count3 - 1)
			Exit For
		End if
	Next count3
Next count2
c = c mod 43
checkc39 = Mid(character,c+1,1)
End Function

Function znakc39(cnr39 As Integer) As String
Select Case cnr39
Case 48
znakc39 = "NnNwWnWnN" ' znak "0"
Case 49
znakc39 = "WnNwNnNnW" ' znak "1"
Case 50
znakc39 = "NnWwNnNnW" ' znak "2"
Case 51
znakc39 = "WnWwNnNnN" ' znak "3"
Case 52
znakc39 = "NnNwWnNnW" ' znak "4"
Case 53
znakc39 = "WnNwWnNnN" ' znak "5"
Case 54
znakc39 = "NnWwWnNnN" ' znak "6"
Case 55
znakc39 = "NnNwNnWnW" ' znak "7"
Case 56
znakc39 = "WnNwNnWnN" ' znak "8"
Case 57
znakc39 = "NnWwNnWnN" ' znak "9"
Case 65
znakc39 = "WnNnNwNnW" ' znak "A"
Case 66
znakc39 = "NnWnNwNnW" ' znak "B"
Case 67
znakc39 = "WnWnNwNnN" ' znak "C"
Case 68
znakc39 = "NnNnWwNnW" ' znak "D"
Case 69
znakc39 = "WnNnWwNnN" ' znak "E"
Case 70
znakc39 = "NnWnWwNnN" ' znak "F"
Case 71
znakc39 = "NnNnNwWnW" ' znak "G"
Case 72
znakc39 = "WnNnNwWnN" ' znak "H"
Case 73
znakc39 = "NnWnNwWnN" ' znak "I"
Case 74
znakc39 = "NnNnWwWnN" ' znak "J"
Case 75
znakc39 = "WnNnNnNwW" ' znak "K"
Case 76
znakc39 = "NnWnNnNwW" ' znak "L"
Case 77
znakc39 = "WnWnNnNwN" ' znak "M"
Case 78
znakc39 = "NnNnWnNwW" ' znak "N"
Case 79
znakc39 = "WnNnWnNwN" ' znak "O"
Case 80
znakc39 = "NnWnWnNwN" ' znak "P"
Case 81
znakc39 = "NnNnNnWwW" ' znak "Q"
Case 82
znakc39 = "WnNnNnWwN" ' znak "R"
Case 83
znakc39 = "NnWnNnWwN" ' znak "S"
Case 84
znakc39 = "NnNnWnWwN" ' znak "T"
Case 85
znakc39 = "WwNnNnNnW" ' znak "U"
Case 86
znakc39 = "NwWnNnNnW" ' znak "V"
Case 87
znakc39 = "WwWnNnNnN" ' znak "W"
Case 88
znakc39 = "NwNnWnNnW" ' znak "X"
Case 89
znakc39 = "WwNnWnNnN" ' znak "Y"
Case 90
znakc39 = "NwWnWnNnN" ' znak "Z"
Case 45
znakc39 = "NwNnNnWnW" ' znak "-"
Case 46
znakc39 = "WwNnNnWnN" ' znak "."
Case 32
znakc39 = "NwWnNnWnN" ' znak "(spacja)"
Case 36
znakc39 = "NwNwNwNnN" ' znak "$"
Case 47
znakc39 = "NwNwNnNwN" ' znak "/"
Case 43
znakc39 = "NwNnNwNwN" ' znak "+"
Case 37
znakc39 = "NnNwNwNwN" ' znak "%"
Case Else
znakc39 = "none"	'character not supported
End Select
End Function

Pozdrawiam.
Ostatnio zmieniony czw lis 15, 2012 2:08 am przez OOoUser46, łącznie zmieniany 1 raz.
MrTN. OOo 3.3 , Win7 .
OOoUser46
Posty: 23
Rejestracja: sob maja 12, 2012 2:43 pm
Lokalizacja: Olesno Tarn.

Re: Code39, 3of9, generator, calc, barcode, macro, GPL .

Post autor: OOoUser46 »

wmb09 pisze: Czesc!

Czy to polecenie może działać we Writerze?

W Calc działa dobrze,
jednak gdy chcę je użyć w writerze pisze "nieprawidłowe wyrażenie".
nie wiem jak zmisić writer to używania Twojego polecenia....

(makro z poziomu writera jest widoczne)

masz jakąś radę?
Pozdrawiam.
Witam.

Niestety tabele we writerze obsługują tylko podstawowe opcje matematyczne.

Ja rozwiązuje to w taki sposób, że tworze arkusz w którym wykorzystuje 2 komórki,
pierwsza z kodem druga opcjonalnie z cyframi (rozmiary i czcionkę wybieramy jaką chcemy) i go zapisuje.
Potem we writerze daje Wstaw>Obiekt>Obiekt OLE>Utwórz z pliku i wskazuje ten plik.
Plik (Konkretnie dwie wypełnione komórki) integrują się z dokumentem, całkowicie w pliku ODT.
Tymczasowy plik arkusza ODS nie jest już potrzebny .
W dowolnym momencie można zmieniać wartość i wygląd .
Po kliknięciu na wstawiony obiekt uruchamiane są we writerze wszystkie funkcje arkusza kalkulacyjnego.
Po kliknięciu poza obiekt zawartość komórek zamarza i zachowuje się jak grafika.
MrTN. OOo 3.3 , Win7 .
ODPOWIEDZ