Get Even More Visitors To Your Blog, Upgrade To A Business Listing >>

VBA-Module mittels Maven aus Microsoft Office-Datei extrahieren

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-plugin
    3.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-plugin
            1.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

Share the post

VBA-Module mittels Maven aus Microsoft Office-Datei extrahieren

×

Subscribe to Doubleslash It Business Und Software

Get updates delivered right to your inbox!

Thank you for your subscription

×