Utwórz 128 kodów kreskowych w programie Excel

3

Czy istnieje sposób tworzenia kodów kreskowych (standard 128) na komputerze Mac, najlepiej za pomocą dodatku?

Potrzebuję go do tworzenia kodów kreskowych w arkuszach Excela (lub więcej tego potrzebuje mój znajomy).

Próbowałem już wszystkich makr i czcionek VBA, które znalazłem w Google, ale żaden nie daje mi możliwego do zeskanowania wyniku (zwykle są tam dziwne znaki, takie jak ó). Czy ktoś ma działające rozwiązanie?

Kevin Grabher
źródło
Patrząc na definicję kodu w en.wikipedia.org/wiki/Code_128 zakładam, że do stworzenia poprawnie sformatowanych kodów kreskowych wymagana będzie pewna ilość skryptów (w Excelu lub gdzie indziej)
nohillside
Jakie są tego powody?
Kevin Grabher
2
Kod kreskowy nie jest tłumaczeniem 1: 1 z tekstu / numeru na inny zapis (który byłby wymagany do prostej zamiany czcionek do pracy), zobacz link na stronie wikipedii, aby uzyskać szczegółowe informacje.
nohillside
Na samym dole strony wikipedii na Code128, w obszarze Linki zewnętrzne, znajdziesz .... Darmowe makro Excel i czcionkę dla wielu generacji kodów kreskowych 128. Patrzyłeś na to?
Vic

Odpowiedzi:

0

Możesz wypróbować darmową czcionkę z kodem kreskowym pobraną stąd: http://www.barcodelink.net/barcode-font.php i zainstalować ją /Library/Fonts.

Aby go użyć, po prostu wybierz czcionkę ** w dowolnej aplikacji - w tym w programie Excel.

Kod kreskowy będzie musiał poprawnie mieć większy rozmiar czcionki niż reszta komórek - ale możesz to wypróbować samodzielnie - być może jest dla ciebie „wystarczająco dobry”.

To nie jest najlepsze rozwiązanie - ale jest bezpłatne. Możesz też kupić rozwiązanie - wyszukiwanie np. W Google da ci kilka trafień.

** Pokazuje ikonę kodu kreskowego, a nie nazwę, ale znajduje się w literach C, ponieważ nazwa czcionki to code128.ttf

Rene Larsen
źródło
1
Cześć, jak omówiono w komentarzach powyżej, należy wygenerować kod 128. Zmiana czcionki spowoduje, że kody będą nieczytelne (kody, które nie reprezentują tego, co zostało napisane). Konieczny będzie jakiś rodzaj dodatku lub makro.
Kevin Grabher,
Jakie kroki są potrzebne, aby obliczyć znak kontrolny i złożyć wszystko razem dla poprawnie sformatowanego kodu kreskowego?
nohillside
Niestety mam niewielką wiedzę na temat działania kodu 128. Może to ci pomoże: barcoderesource.com/code128_barcodefont.html
Kevin Grabher
Dostępny jest również skrypt idautomation.com/font-encoders/vba-macro. Ale kiedy próbuję go użyć, pojawiają się tylko losowe znaki (puste kwadraty itp. )
Kevin Grabher
Może to makro działa stackoverflow.com/questions/13909248/...
Rene Larsen
0

Oto jak to robię:

Kolumna A to tekst, który chcę zakodować.

Kolumna B to wzór na zawijanie tego tekstu w gwiazdki (co dla mnie kwalifikuje wpis jako tekst): =CONCATENATE("*",A2,"*")

Tekst w kolumnie B jest sformatowany czcionką z kodem kreskowym, a jego rozmiar jest dostosowany do czytelności, drukowania i skanowania.

Mam nadzieję, że to w jakiś sposób pomoże.

UZUPEŁNIENIE

Znalazłem następujące makro , autorstwa Erica Townsenda Schmidta. Całe uznanie należy do niego.

 Public Function code128$(chaine$)
  'This function is governed by the GNU Lesser General Public License (GNU LGPL)
  'V 2.0.0
  'Parameters : a string
  'Return : * a string which give the bar code when it is dispayed with CODE128.TTF font
  '         * an empty string if the supplied parameter is no good
  Dim i%, checksum&, mini%, dummy%, tableB As Boolean
  code128$ = ""
  If Len(chaine$) > 0 Then
  'Check for valid characters
    For i% = 1 To Len(chaine$)
      Select Case Asc(Mid$(chaine$, i%, 1))
      Case 32 To 126, 203
      Case Else
        i% = 0
        Exit For
      End Select
    Next
    'Calculation of the code string with optimized use of tables B and C
    code128$ = ""
    tableB = True
    If i% > 0 Then
      i% = 1 'i% devient l'index sur la chaine / i% become the string index
      Do While i% <= Len(chaine$)
        If tableB Then
          'See if interesting to switch to table C
          'yes for 4 digits at start or end, else if 6 digits
          mini% = IIf(i% = 1 Or i% + 3 = Len(chaine$), 4, 6)
          GoSub testnum
          If mini% < 0 Then 'Choice of table C
            If i% = 1 Then 'Starting with table C
              code128$ = Chr$(205)
            Else 'Switch to table C
              code128$ = code128$ & Chr$(199)
            End If
            tableB = False
          Else
            If i% = 1 Then code128$ = Chr$(204) 'Starting with table B
          End If
        End If
        If Not tableB Then
          'We are on table C, try to process 2 digits
          mini% = 2
          GoSub testnum
          If mini% < 0 Then 'OK for 2 digits, process it
            dummy% = Val(Mid$(chaine$, i%, 2))
            dummy% = IIf(dummy% < 95, dummy% + 32, dummy% + 100)
            code128$ = code128$ & Chr$(dummy%)
            i% = i% + 2
          Else 'We haven't 2 digits, switch to table B
            code128$ = code128$ & Chr$(200)
            tableB = True
          End If
        End If
        If tableB Then
          'Process 1 digit with table B
          code128$ = code128$ & Mid$(chaine$, i%, 1)
          i% = i% + 1
        End If
      Loop
      'Calculation of the checksum
      For i% = 1 To Len(code128$)
        dummy% = Asc(Mid$(code128$, i%, 1))
        dummy% = IIf(dummy% < 127, dummy% - 32, dummy% - 100)
        If i% = 1 Then checksum& = dummy%
        checksum& = (checksum& + (i% - 1) * dummy%) Mod 103
      Next
      'Calculation of the checksum ASCII code
      checksum& = IIf(checksum& < 95, checksum& + 32, checksum& + 100)
      'Add the checksum and the STOP
      code128$ = code128$ & Chr$(checksum&) & Chr$(206)
    End If
  End If
  Exit Function
testnum:
  'if the mini% characters from i% are numeric, then mini%=0
  mini% = mini% - 1
  If i% + mini% <= Len(chaine$) Then
    Do While mini% >= 0
      If Asc(Mid$(chaine$, i% + mini%, 1)) < 48 Or Asc(Mid$(chaine$, i% + mini%, 1)) > 57 Then Exit Do
      mini% = mini% - 1
    Loop
  End If
Return
End Function
Jerry W.
źródło
Cześć, jak omówiono w komentarzach powyżej, należy wygenerować kod128 (w przeciwieństwie do kodu 39). Zmiana czcionki spowoduje, że kody będą nieczytelne (kody, które nie reprezentują tego, co zostało napisane). Konieczny będzie jakiś rodzaj dodatku lub makro.
Kevin Grabher
0

Czcionki otrzymałem z automatyzacji ID Co ciekawe, ich skrypty VBA wydają się działać tylko z własną czcionką.

Inne rozwiązanie (tańsze, ale bardziej skomplikowane, za pośrednictwem AppleScript), które działa dla mojego przyjaciela, jest oferowane tutaj: Scorpion Research

Dziękujemy wszystkim za pomoc.

Kevin Grabher
źródło
0

Dzięki Jer-el za rekwizyty.

To prawda, że ​​nie można po prostu pobrać czcionki kodu kreskowego i przekonwertować kolumnę danych na możliwe do skanowania kody kreskowe. Wyżej wymienione makro radzi sobie dobrze. Przenoszę to na http://etownsendschmidt.com/barcode-generator/3/free-barcode-generator-for-excel

Makro po prostu patrzy na dane w 1 kolumnie i konwertuje je na symbole, cyfry i litery, które odpowiadają czcionce znalezionej na dafont.com w innej kolumnie. Ukryłem tę kolumnę w pliku, aby uniknąć przypadkowego sabotażu.

Ostatnia kolumna jest kopią tej ukrytej kolumny z czcionką zmienioną czcionką kodu kreskowego. Kliknij i przeciągnij i gotowe. Musiałem szybko odczytać 3000 kodów kreskowych bez budżetu. Szczerze mówiąc, znalazłem oryginalny niedziałający kod na francuskiej stronie geocities-esque i nie działał od czasu zmiany standardu dla code128. Po naprawieniu przetestowałem go za pomocą skanera kodów kreskowych iPhone i SHAZAM! Płakałem trochę ...

Eric Townsend Schmidt
źródło