tech1988
Goto Top

DataMatrix Barcode erstellen in Excel

Hallo,
ich brauche Hilfe bei der Erstellung von DataMatrix Codes in Excel am besten mit Bezug auf eine Zelle.
Im Moment habe ich folgendes Produkt erworben:
https://secure.avangate.com/order/product.php?PRODS=4543690&QTY=1&am ...
Leider gibt es im dazugehörigen Excel Addin keine Auswahlmöglichkeit für DataMatrix.
Gibt es alternativen? Es soll direkt in Excel erstellt werden mit dem Bezug auf eine Zelle, die die Daten enthält und diese entsprechend kodiert werden, sodass ein DataMatrix Code erstellt wird.
Kann mir jemand helfen?

Content-Key: 1059681578

Url: https://administrator.de/contentid/1059681578

Printed on: May 7, 2024 at 10:05 o'clock

Member: Delta9
Solution Delta9 Jul 20, 2021 at 12:37:17 (UTC)
Goto Top
Hallo,
mit diesem Tool hättest du das auch dabei gehabt.
Hatte ich dir ja in dem Threat hier ja empfohlen: Hier
Mitglied: 149062
Solution 149062 Jul 20, 2021 at 13:18:34 (UTC)
Goto Top
Member: colinardo
Solution colinardo Jul 20, 2021, updated at Nov 09, 2021 at 11:34:55 (UTC)
Goto Top
Servus,
oder man behilft sich mit etwas Powershell und VBA wenn man nichts ausgeben will.

Man erstelle das Scriptfile datamatrix.ps1 und lege es in dem Beispiel in den selben Pfad wie die Excel-Mappe und füge dort folgenden Code ein.
param(
    [string]$data,
    [string]$filepath,
    [int]$width = 500,
    [int]$height = 500
)
# Funktion zum Laden von Assemblies von Nuget.org
function Load-NugetAssembly {
    [CmdletBinding()]
    param(
        [string]$url,
        [string]$name,
        [string]$zipinternalpath,
        [switch]$downloadonly
    )
    # Accept all TLS protocols
    [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.SecurityProtocolType]::GetNames([System.Net.SecurityProtocolType]) 
    if($psscriptroot -ne ''){  
        $localpath = join-path $psscriptroot $name
    }else{
        $localpath = join-path $env:TEMP $name
    }
    $tmp = "$env:TEMP\$([IO.Path]::GetRandomFileName())"  
    $zip = $null
    try{
        if(!(Test-Path $localpath)){
            Add-Type -A System.IO.Compression.FileSystem
            write-host "Downloading and extracting required library '$name' ... " -F Green -NoNewline  
            (New-Object System.Net.WebClient).DownloadFile($url, $tmp)
            $zip = [System.IO.Compression.ZipFile]::OpenRead($tmp)
            $zip.Entries | ?{$_.Fullname -eq $zipinternalpath} | %{
                [System.IO.Compression.ZipFileExtensions]::ExtractToFile($_,$localpath)
            }
            Unblock-File -Path $localpath
            write-host "OK" -F Green  
        }
        if(!$downloadonly.IsPresent){
            Add-Type -Path $localpath -EA Stop
        }
    }catch{
        throw "Error: $($_.Exception.Message)"  
    }finally{
        if ($zip){$zip.Dispose()}
        if(Test-Path $tmp){del $tmp -Force}
    }  
}
# Lade XZING Assembly
if (!('ZXing' -as [Type])){  
        Load-NugetAssembly -url 'https://www.nuget.org/api/v2/package/ZXing.Net' -name 'zxing.dll' -zipinternalpath 'lib/net40/zxing.dll' -EA Stop  
}
# Funktion zum Erstellen von Barcodes
function New-Barcode([ZXing.BarcodeFormat]$format = ([ZXing.BarcodeFormat]::CODE_128),[string]$string,[int]$width,[int]$height,[int]$margin = 0,[switch]$purebarcode) {
    $writer = New-Object ZXing.BarcodeWriter -Property @{
        Format = $format
        Options = New-Object ZXing.Common.EncodingOptions -Property @{
            Height = $height
            Width = $width
            PureBarcode = $purebarcode.IsPresent
            Margin = $margin
        }
    }
    $writer.Write($string)
}
(New-Barcode -format DATA_MATRIX -string $data -width $width -height $height).Save($filepath,'Png')  
Dann öffnet man eine Excel Mappe und fügt dort folgenden VBA-Code ein
Sub CreateDataMatrixCodes()
    Dim SCRIPTPATH As String, objShell As Object, rngPic As Range, BARCODE_TMP_PATH As String, BARCODE_WIDTH As Integer, BARCODE_HEIGHT As Integer, cell as Range
    ' Shell Object erstellen  
    Set objShell = CreateObject("Wscript.Shell")  
    ' Pfad zum Script  
    SCRIPTPATH = ThisWorkbook.Path & "\datamatrix.ps1"  
    ' tempor. Pfad für Barcode Image  
    BARCODE_TMP_PATH = Environ("TEMP") & "\bc.png"  
    ' Breite des Barcodes in Punkt  
    BARCODE_WIDTH = 100
    ' Höhe des Barcodes in Punkt  
    BARCODE_HEIGHT = 100
    ' auf aktuell ausgewähltem Sheet arbeiten  
    With ActiveSheet
        ' Für jede belegte Zelle im Range A2:A(n)  
        For Each cell In .Range("A2:A" & .Cells(Rows.Count, "A").End(xlUp).Row)  
            ' Wenn Wert der Zelle nicht leer ist ...  
            If cell.Value <> "" Then  
                ' Nachbarzelle in der der Barcode eingefügt wird  
                Set rngPic = cell.Offset(0, 1)
                ' Let's go, Powershell Script mit Parametern aufrufen  
                objShell.Run "powershell -EP Bypass -File """ & SCRIPTPATH & """ -data """ & cell.Value & """ -filepath """ & BARCODE_TMP_PATH & """ -width 500 -height 500", 0, True  
                ' Zeilenhöhe festlegen  
                rngPic.RowHeight = BARCODE_HEIGHT
                ' Barcode Bild einbetten  
                .Shapes.AddPicture BARCODE_TMP_PATH, msoFalse, msoTrue, rngPic.Left, rngPic.Top, BARCODE_WIDTH, BARCODE_HEIGHT
            End If
        Next
    End With
End Sub
Damit das Beispiel funktioniert sollten die Daten wie folgt auf dem aktiven Sheet hinterlegt sein

screenshot

Wenn man dann das Makro startet werden die DataMatrix-Codes für alle belegten Daten-Zellen in Spalte A generiert und in Spalte B daneben abgelegt.

back-to-topErgebnis ist dann folgendes

screenshot

Mit der Library können auch anderen Barcode-Typen generiert werden wenn man in der Letzten Zeile des PS Scripts das Format anpasst. Mögliche Barcode-Formate kann man hier nachschlagen
https://zxing.github.io/zxing/apidocs/com/google/zxing/BarcodeFormat.htm ...

Das obige Beispiel kann bei Bedarf auch hier komplett als Package heruntergeladen werden excel_generate_datamatrix_codes_1059681578.zip

Grüße Uwe
Member: Marco777
Marco777 Nov 09, 2021 at 10:50:16 (UTC)
Goto Top
Hallo Uwe,

ich habe gerade probiert dein Powershell und VBA Script auszuführen. Ich bekomme dabei im VBA immer eine Fehlermeldung, dass cell nicht definiert wurde. Gut, dann habe ich es definiert, dann bekomme ich aber einen Laufzeitfehler '1004'. Die angegebene Datei wurde nicht gefunden. Was mache ich denn falsch?
fehler 1004
Member: colinardo
colinardo Nov 09, 2021 updated at 11:40:51 (UTC)
Goto Top
Hallo @Marco777, willkommen auf Administrator.de!

Zitat von @Marco777:
ich habe gerade probiert dein Powershell und VBA Script auszuführen. Ich bekomme dabei im VBA immer eine Fehlermeldung, dass cell nicht definiert wurde.
Ja das kommt wegen dem Option Explicit oben im Modul, habe im VBA vergessen die Variable zu deklarieren, werde ich nachholen.
Gut, dann habe ich es definiert, dann bekomme ich aber einen Laufzeitfehler '1004'. Die angegebene Datei wurde nicht gefunden. Was mache ich denn falsch?
Dann läuft bei dir wohl was im Powershell-Skript schief so dass die Datei nicht erstellt wird. Als erstes stelle sicher das das Skript im selben Pfad wie die Excel-Datei liegt. Ist das der Fall dann prüfe das Powershell Skript erst mal separat, es könnte ja auch sein das Powershell auf deinem Rechner gesperrt wurde oder der Download der Library aus dem Netz bei dir verweigert wird und somit kein Barcode erstellt wird und das Bild dann natürlich fehlt.

Rufe dazu das Powershell-Skript mal so in einer Powershell-Konsole auf und schau ob das Skript erfolgreich durchläuft und der Barcode als Datei abgelegt wird (Pfad zum Skript und Ausgabepfad für den Barcode natürlich anpassen)
"D:\Ordner\datamatrix.ps1" -data "Test" -filepath "D:\Ordner\test.png"  
Grüße Uwe
Member: Marco777
Marco777 Nov 10, 2021 at 07:41:05 (UTC)
Goto Top
Danke für deine Hilfe, jetzt hat es funktioniert face-smile. Tatsächlich hatte ich Berechtigungsprobleme beim Powershell... Danke für deine Unterstützung.

LG;
Marco
Member: OudinNicolas
OudinNicolas Nov 10, 2021 at 13:58:42 (UTC)
Goto Top
Hallo @colinardo ,

Entschuldigung für die Google-Übersetzung, ich kann auf Englisch schreiben, wenn Sie möchten.

vielen Dank für dein Makro.

Ist es möglich, ein Makro zu haben, das stattdessen in eine Matrix mit 1 und 0 konvertiert, möchte ich am Ende alle Bits online haben, um ein 3D-Modell zu aktualisieren.
Ich habe es mit dem Farblesen in Excel versucht, aber es ist nicht "sauber".
dmc matrix binary 1
dmc matrix binary 2
Member: colinardo
colinardo Nov 10, 2021 updated at 16:23:57 (UTC)
Goto Top
Hi @OudinNicolas, welcome to administrator.de!
Sure, you can download an example for this task

back-to-topdatamatrix_bitmatrix_1059681578.zip


Preview:

screenshot

Regards @colinardo
Member: OudinNicolas
OudinNicolas Nov 15, 2021 at 14:31:17 (UTC)
Goto Top
Hallo @colinardo,

danke, die Tabelle sieht gut aus, ich habe versucht, sie herunterzuladen, aber der Proxy-Server blockiert mich.
Ich habe die Datei von mir wiederhergestellt, aber wenn sie zur Arbeit übertragen wird, wird sie automatisch gelöscht, sie sagt mir, dass sie Malware enthält face-sad

Regards.

Nicolas.
Member: colinardo
colinardo Nov 15, 2021 updated at 14:38:04 (UTC)
Goto Top
The file is absolutely free of malware, i will guarantee that for sure! This is because the ZIP-file contains another file with *.ps1 Extension and an Excel file with Macros, this is a false positive and normal nowadays. If you send me your mail address via PN i can send you the file via mail or you use another computer or network which is under your control.
If your company does not want or allow you to use such files from external, this is not under my control, sorry.

Regards @colinardo
Member: OudinNicolas
OudinNicolas Nov 17, 2021 at 07:05:57 (UTC)
Goto Top
Hallo @colinardo !

yes, it's working ! No malware face-wink the rules for downloading are very sensitive at work.

This is exactly what I need.

In addition, the size of the matrix is automatically updated according to the size of the message to be encoded.

Perfect and great work !

Thank you so much, Ich danke dir sehr @colinardo
Member: colinardo
colinardo Nov 17, 2021 updated at 07:12:10 (UTC)
Goto Top
👍
You're welcome. De rien, Nicolas.