Hierzu lässt sich eine Klasse von Apache POI verwenden, der VBAMacroExtractor.
Um dies in den Maven-Build-Prozess zu integrieren entwickeln wir ein kleines Maven Plugin.
Dazu legen wir ein neues Maven-Projekt an. Als Packaging wählen wir „maven-plugin“.
Nun benötigen wir noch ein paar Dependencies. Für das Maven-Plugin selbst werden die folgenden Dependencies mit Scope „provided“ benötigt:
- „org.apache.maven:maven-plugin-api“
- „org.apache.maven.plugin-tools:maven-plugin-annotations“
Will man zusätzlich noch auf Informationen des Projekts zugreifen, benötigt man außerdem „org.apache.maven:maven-project“. Dies ist für unsere einfache Variante jedoch nicht nötig.
Um den VBAMacroExtractor von Apache POI nutzen zu können, ist natürlich noch die Apache POI-Dependency nötig: „org.apache.poi:poi:5.2.3“.
Bei unserer Java-Version war es darüber hinaus nötig, eine neuere Version des maven-plugin-plugin-Plugins zu verwenden:
org.apache.maven.plugins maven-plugin-plugin3.7.0
Nun noch das eigentlich Plugin:
import org.apache.maven.plugin.AbstractMojo; import org.apache.maven.plugin.MojoExecutionException; import org.apache.maven.plugin.MojoFailureException; import org.apache.maven.plugins.annotations.LifecyclePhase; import org.apache.maven.plugins.annotations.Mojo; import org.apache.maven.plugins.annotations.Parameter; import org.apache.poi.poifs.macros.VBAMacroExtractor; import java.io.File; import java.io.IOException; @Mojo( name = "extract-vba", defaultPhase = LifecyclePhase.GENERATE_RESOURCES ) public class VBAMacroExtractorMavenPlugin extends AbstractMojo { @Parameter(required = true) private String sourceFilePath; @Parameter(required = true) private String targetDirPath; @Override public void execute() throws MojoExecutionException, MojoFailureException { try { new VBAMacroExtractor().extract(new File(sourceFilePath), new File(targetDirPath)); } catch (IOException e) { // Fehlerhandling für das Beispiel vereinfacht. // In der Realität würde man vermutlich unterscheiden zwischen MojoExecutionException und MojoFailureException. // Eine gute Erklärung dazu findet sich hier: // https://books.sonatype.com/mvnref-book/reference/writing-plugins-sect-custom-plugin.html#writing-plugins-sect-failure throw new MojoExecutionException(e.getMessage(), e); } } }
Dann Maven-Release bauen und schon kann das Plugin genutzt werden.
Dazu fügen wir es einfach in den Maven-Build-Prozess ein. Als Konfiguration übergeben wir den Pfad der Office-Datei, aus der die VBA-Module extrahiert werden sollen. Außerdem konfigurieren wir ein Zielverzeichnis, in das die VBA-Module extrahiert werden sollen.
... de.example vba-macro-export-maven-plugin1.0 ${project.basedir}/src/main/resources/my_excel.xlsm ${project.basedir}/src/main/resources/my_excel_vba/ extract-vba
Obiges Beispiel würde beim Buildvorgang des Projekts aus einer Excel-Datei „my_excel.xlsm“ alle VBA-Module ins Unterverzeichnis „my_excel_vba“ exportieren:
| \---src \---main \---resources | my_excel.xlsm | \---my_excel_vba DieseArbeitsmappe.vba Tabelle1.vba
Quellen / Links:
- Apache POI
- VBAMacroExtractor
- Step by Step Guide to Developing a Custom Maven Plugin
- Tutorial: How to Create a Maven Plugin – DZone
Der Beitrag VBA-Module mittels Maven aus Microsoft Office-Datei extrahieren erschien zuerst auf Business -Software- und IT-Blog - Wir gestalten digitale Wertschöpfung.
This post first appeared on DoubleSlash IT Business Und Software, please read the originial post: here