User‎ > ‎

Codice a barre con Excel (Codice 39 - EAN 8 - EAN 13)

Ho trattato l'argomento Codici a barre in diversi miei articoli, offrendo soluzioni diverse utilizzando sia Excel che le Chart Google API. Erano soluzioni che richiedevano l'uso di macro.
In questo articolo mostrerò come sia altrettanto comodo e facile utilizzare i soli strumenti di Excel per produrre su un foglio di calcolo un'immagine del Codice a Barre 39 (sicuramente uno dei più versatili e utilizzati barcode).
Molto spesso si usa Excel per produrre documenti come bolle, preventivi, fatture o altro ancora.

Ho preparato nel file allegato alla fine dell'articolo, un foglio con la tabella necesaria alla codifica. Tale tabella può essere definita facilmente all'interno di un nome come matrice di costanti. In questo modo potrete ottenere il tutto senza bisogno di fogli o celle di appoggio.

E' necessario definire i seguenti nomi (Italiano/Inglese):
Versione Italiana:

aggiungi_check_bool=VERO


Arr_bar=MATR.TRASPOSTA(SE.ERRORE(INDICE(Arr_cod;CONFRONTA(STRINGA.ESTRAI(str;INT((RIF.RIGA(Input!$1:$320)-1)/16)+1;1);Arr_chr;0);RESTO(RIF.RIGA(Input!$1:$320)-1;16)+1);0))

Arr_chr={"0"\"1"\"2"\"3"\"4"\"5"\"6"\"7"\"8"\"9"\"A"\"B"\"C"\"D"\"E"\"F"\"G"\"H"\"I"\"J"\"K"\"L"\"M"\"N"\"O"\"P"\"Q"\"R"\"S"\"T"\"U"\"V"\"W"\"X"\"Y"\"Z"\"-"\"."\" "\"$"\"/"\"+"\"%"\"|"}

Arr_cod={1;0;1;0;0;0;1;1;1;0;1;1;1;0;1;0\1;1;1;0;1;0;0;0;1;0;1;0;1;1;1;0\1;0;1;1;1;0;0;0;1;0;1;0;1;1;1;0\1;1;1;0;1;1;1;0;0;0;1;0;1;0;1;0\1;0;1;0;0;0;1;1;1;0;1;0;1;1;1;0\1;1;1;0;1;0;0;0;1;1;1;0;1;0;1;0\1;0;1;1;1;0;0;0;1;1;1;0;1;0;1;0\1;0;1;0;0;0;1;0;1;1;1;0;1;1;1;0\1;1;1;0;1;0;0;0;1;0;1;1;1;0;1;0\1;0;1;1;1;0;0;0;1;0;1;1;1;0;1;0\1;1;1;0;1;0;1;0;0;0;1;0;1;1;1;0\1;0;1;1;1;0;1;0;0;0;1;0;1;1;1;0\1;1;1;0;1;1;1;0;1;0;0;0;1;0;1;0\1;0;1;0;1;1;1;0;0;0;1;0;1;1;1;0\1;1;1;0;1;0;1;1;1;0;0;0;1;0;1;0\1;0;1;1;1;0;1;1;1;0;0;0;1;0;1;0\1;0;1;0;1;0;0;0;1;1;1;0;1;1;1;0\1;1;1;0;1;0;1;0;0;0;1;1;1;0;1;0\1;0;1;1;1;0;1;0;0;0;1;1;1;0;1;0\1;0;1;0;1;1;1;0;0;0;1;1;1;0;1;0\1;1;1;0;1;0;1;0;1;0;0;0;1;1;1;0\1;0;1;1;1;0;1;0;1;0;0;0;1;1;1;0\1;1;1;0;1;1;1;0;1;0;1;0;0;0;1;0\1;0;1;0;1;1;1;0;1;0;0;0;1;1;1;0\1;1;1;0;1;0;1;1;1;0;1;0;0;0;1;0\1;0;1;1;1;0;1;1;1;0;1;0;0;0;1;0\1;0;1;0;1;0;1;1;1;0;0;0;1;1;1;0\1;1;1;0;1;0;1;0;1;1;1;0;0;0;1;0\1;0;1;1;1;0;1;0;1;1;1;0;0;0;1;0\1;0;1;0;1;1;1;0;1;1;1;0;0;0;1;0\1;1;1;0;0;0;1;0;1;0;1;0;1;1;1;0\1;0;0;0;1;1;1;0;1;0;1;
0;1;1;1;0\1;1;1;0;0;0;1;1;1;0;1;0;1;0;1;0\1;0;0;0;1;0;1;1;1;0;1;0;1;1;1;0\1;1;1;0;0;0;1;0;1;1;1;0;1;0;1;0\1;0;0;0;1;1;1;0;1;1;1;0;1;0;1;0\1;0;0;0;1;0;1;0;1;1;1;0;1;1;1;0\1;1;1;0;0;0;1;0;1;0;1;1;1;0;1;0\1;0;0;0;1;1;1;0;1;0;1;1;1;0;1;0\1;0;0;0;1;0;0;0;1;0;0;0;1;0;1;0\1;0;0;0;1;0;0;0;1;0;1;0;0;0;1;0\1;0;0;0;1;0;1;0;0;0;1;0;0;0;1;0\1;0;1;0;0;0;1;0;0;0;1;0;0;0;1;0\1;0;0;0;1;0;1;1;1;0;1;1;1;0;1;0}

check_digit=INDICE(Arr_chr;RESTO(SOMMA(SE.ERRORE(CONFRONTA(STRINGA.ESTRAI(check_digit;RIF.RIGA(Input!$1:$20);1);Arr_chr;0)-1;0));43)+1;)

str=MAIUSC("|"&str_base&SE(aggiungi_check_bool;check_digit;"")&"|")

str_base=Input!$B$1


Versione Inglese:

aggiungi_check_bool=TRUE

Arr_bar=TRANSPOSE(IFERROR(INDEX(Arr_cod,MATCH(MID(str,
INT((ROW(Input!$1:$320)-1)/16)+1,1),Arr_chr,0),MOD(ROW
(Input!$1:$320)-1,16)+1),0))


Arr_chr={"0";"1";"2";"3";"4";"5";"6";"7";"8";"9";"A";"B";"C";"D";"E";
"F";"G";"H";"I";"J";"K";"L";"M";"N";"O";"P";"Q";"R";"S";"T";"U";"V";
"W";"X";"Y";"Z";"-";".";" ";"$";"/";"+";"%";"|"}


Arr_cod={1,0,1,0,0,0,1,1,1,0,1,1,1,0,1,0;1,1,1,0,1,0,0,0,1,0,1,0,1,1,1,0;1,0,1,1,1,0,0,0,1,0,1,0,1,1,1,0;1,1,1,0,1,1,1,0,0,0,1,0,1,0,1,0;1,0,1,0,0,0,1,1,1,0,1,0,1,1,1,0;1,1,1,0,1,0,0,0,1,1,1,0,1,0,1,0;1,0,1,1,1,0,0,0,1,1,1,0,1,0,1,0;1,0,1,0,0,0,1,0,1,1,1,0,1,1,1,0;1,1,1,0,1,0,0,0,1,0,1,1,1,0,1,0;1,0,1,1,1,0,0,0,1,0,1,1,1,0,1,0;1,1,1,0,1,0,1,0,0,0,1,0,1,1,1,0;1,0,1,1,1,0,1,0,0,0,1,0,1,1,1,0;1,1,1,0,1,1,1,0,1,0,0,0,1,0,1,0;1,0,1,0,1,1,1,0,0,0,1,0,1,1,1,0;1,1,1,0,1,0,1,1,1,0,0,0,1,0,1,0;1,0,1,1,1,0,1,1,1,0,0,0,1,0,1,0;1,0,1,0,1,0,0,0,1,1,1,0,1,1,1,0;1,1,1,0,1,0,1,0,0,0,1,1,1,0,1,0;1,0,1,1,1,0,1,0,0,0,1,1,1,0,1,0;1,0,1,0,1,1,1,0,0,0,1,1,1,0,1,0;1,1,1,0,1,0,1,0,1,0,0,0,1,1,1,0;1,0,1,1,1,0,1,0,1,0,0,0,1,1,1,0;1,1,1,0,1,1,1,0,1,0,1,0,0,0,1,0;1,0,1,0,1,1,1,0,1,0,0,0,1,1,1,0;1,1,1,0,1,0,1,1,1,0,1,0,0,0,1,0;1,0,1,1,1,0,1,1,1,0,1,0,0,0,1,0;1,0,1,0,1,0,1,1,1,0,0,0,1,1,1,0;1,1,1,0,1,0,1,0,1,1,1,0,0,0,1,0;1,0,1,1,1,0,1,0,1,1,1,0,0,0,1,0;1,0,1,0,1,1,1,0,1,1,1,0,0,0,1,0;1,1,1,0,0,0,1,0,1,0,1,0,1,1,1,0;1,0,0,0,1,1,1,0,1,0,1,0,1,1,1,0;1,1,1,0,0,0,1,1,1,0,1,0,1,0,1,0;1,0,0,0,1,0,1,1,1,0,1,0,1,1,1,0;1,1,1,0,0,0,1,0,1,1,1,0,1,0,1,0;1,0,0,0,1,1,1,0,1,1,1,0,1,0,1,0;1,0,0,0,1,0,1,0,1,1,1,0,1,1,1,0;1,1,1,0,0,0,1,0,1,0,1,1,1,0,1,0;1,0,0,0,1,1,1,0,1,0,1,1,1,0,1,0;1,0,0,0,1,0,0,0,1,0,0,0,1,0,1,0;1,0,0,0,1,0,0,0,1,0,1,0,0,0,1,0;1,0,0,0,1,0,1,0,0,0,1,0,0,0,1,0;1,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0;1,0,0,0,1,0,1,1,1,0,1,1,1,0,1,0}

check_digit=INDEX(Arr_chr,MOD(SUM(IFERROR(MATCH(MID(check_digit,
ROW(Input!$1:$20),1),Arr_chr,0)-1,0)),43)+1,)


str=UPPER("|"&str_base&IF(aggiungi_check_bool,check_digit,"")&"|")

str_base=Input!$B$1

Il nome aggiungi_check_bool se impostato a VERO (TRUE) aggiungerà in automatico il check digit al testo da codificare, impostandolo a FALSO (FALSE) viceversa non verrà aggiunto.

Il nome str_base identifica la cella nella quale andrete a scrivere il testo da codificare.

Per definire le matrici potete usare il foglio del file di esempio, ad esempio per creare il nome Arr_cod (la matrice più grande) potete in una cella qualsiasi del foglio "info codifica", digitare
=C2:R45
ovvero selezionare un riferimento alla tabella delle codifiche poi posizionatevi nella barra delle formule e selezionate la formulain modo da ottenere nella barra questo:
 =C2:R45
e premete F9, verrà così restituita la matrice di costanti
={1;0;1;0;0;0;1;1;1;0;1;1;1;0;1;0\1;1;1;0;1;0;0;0;1;0;1;0;1;1;1;0\1;0;1;1;1;0;0;0;1;0;1;0;1;1;1;0\1;1;1;0;1;1;1;0;0;0;1;0;1;0;1;0\1;0;1;0;0;0;1;1;1;0;1;0;1;1;1;0\1;1;1;0;1;0;0;0;1;1;1;0;1;0;1;0\1;0;1;1;1;0;0;0;1;1;1;0;1;0;1;0\1;0;1;0;0;0;1;0;1;1;1;0;1;1;1;0\1;1;1;0;1;0;0;0;1;0;1;1;1;0;1;0\1;0;1;1;1;0;0;0;1;0;1;1;1;0;1;0\1;1;1;0;1;0;1;0;0;0;1;0;1;1;1;0\1;0;1;1;1;0;1;0;0;0;1;0;1;1;1;0\1;1;1;0;1;1;1;0;1;0;0;0;1;0;1;0\1;0;1;0;1;1;1;0;0;0;1;0;1;1;1;0\1;1;1;0;1;0;1;1;1;0;0;0;1;0;1;0\1;0;1;1;1;0;1;1;1;0;0;0;1;0;1;0\1;0;1;0;1;0;0;0;1;1;1;0;1;1;1;0\1;1;1;0;1;0;1;0;0;0;1;1;1;0;1;0\1;0;1;1;1;0;1;0;0;0;1;1;1;0;1;0\1;0;1;0;1;1;1;0;0;0;1;1;1;0;1;0\1;1;1;0;1;0;1;0;1;0;0;0;1;1;1;0\1;0;1;1;1;0;1;0;1;0;0;0;1;1;1;0\1;1;1;0;1;1;1;0;1;0;1;0;0;0;1;0\1;0;1;0;1;1;1;0;1;0;0;0;1;1;1;0\1;1;1;0;1;0;1;1;1;0;1;0;0;0;1;0\1;0;1;1;1;0;1;1;1;0;1;0;0;0;1;0\1;0;1;0;1;0;1;1;1;0;0;0;1;1;1;0\1;1;1;0;1;0;1;0;1;1;1;0;0;0;1;0\1;0;1;1;1;0;1;0;1;1;1;0;0;0;1;0\1;0;1;0;1;1;1;0;1;1;1;0;0;0;1;0\1;1;1;0;0;0;1;0;1;0;1;0;1;1;1;0\1;0;0;0;1;1;1;0;1;0;1;0;1;1;1;0\1;1;1;0;0;0;1;1;1;0;1;0;1;0;1;0\1;0;0;0;1;0;1;1;1;0;1;0;1;1;1;0\1;1;1;0;0;0;1;0;1;1;1;0;1;0;1;0\1;0;0;0;1;1;1;0;1;1;1;0;1;0;1;0\1;0;0;0;1;0;1;0;1;1;1;0;1;1;1;0\1;1;1;0;0;0;1;0;1;0;1;1;1;0;1;0\1;0;0;0;1;1;1;0;1;0;1;1;1;0;1;0\1;0;0;0;1;0;0;0;1;0;0;0;1;0;1;0\1;0;0;0;1;0;0;0;1;0;1;0;0;0;1;0\1;0;0;0;1;0;1;0;0;0;1;0;0;0;1;0\1;0;1;0;0;0;1;0;0;0;1;0;0;0;1;0\1;0;0;0;1;0;1;1;1;0;1;1;1;0;1;0}
che utilizzerete con un copia/incolla per definire il nome.

Una volta definiti i tutti i nomi quindi rimane l'ultimo passo ...
Userete un foglio per riprodurre il codice a barre ... selezionate un intervallo sufficientemente grande
A1:LI1 (sono 320 celle) poi nella barra delle formule digitate:
=Arr_bar
e confermate con Ctrl+Maiusc+Invio

sempre con le celle selezionate modificate la larghezza delle colonne portandole a 0,08 e ancora con la selezione attiva aggiungete una formattazione condizionale in questo caso con la formula:
=A1
scegliete un riempimento nero e confermate con OK

Ecco il vostro codice a barre!


Potrete ora usare lo strumento Immagine Fotografica sempre sulla selezione per copiare l'immagine (che rimmarrà sempre aggiornata)


e posizionarla nel foglio che desiderate


Consiglio di testare il codice a barre provando a stampare.

Per i codici EAN 8 e 13 la logica è simile, in questi casi però vengono utilizzate matrici con stringhe binarie e per ottenere la matrice finale si lavora con INDICE concatenati. Essendo il numero di caratteri fisso risulta sicuramente più comodo un approccio di questo tipo rispetto all'uso di matrici rettangolari poi da raddrizzare.
Trovate i due file nel fondo della pagina.

EAN 8

EAN 13

Č
Ĉ
ď
roberto mensa,
Mar 24, 2014, 9:01 AM
Ĉ
ď
roberto mensa,
Jun 24, 2011, 7:59 AM
Ĉ
ď
roberto mensa,
Jun 18, 2011, 3:44 PM
Ĉ
ď
roberto mensa,
Jun 24, 2011, 9:08 AM
Ĉ
ď
roberto mensa,
Jun 18, 2011, 3:44 PM
Ĉ
ď
roberto mensa,
Jun 24, 2011, 8:56 AM
Comments

Bibliografia essenziale