org.apache.poi.poifs.macros

## Class VBAMacroReader

- java.lang.Object
- - org.apache.poi.poifs.macros.VBAMacroReader

- All Implemented Interfaces:
    java.io.Closeable, java.lang.AutoCloseable

      public class VBAMacroReader
      extends java.lang.Object
      implements java.io.Closeable

  Finds all VBA Macros in an office file (OLE2/POIFS and OOXML/OPC), and returns them.

  NOTE: This does not read macros from .ppt files. See org.apache.poi.hslf.usermodel.TestBugs.getMacrosFromHSLF() in the scratchpad module for an example of how to do this. Patches that make macro extraction from .ppt more elegant are welcomed!

  Since:
    3.15-beta2

- - ### Nested Class Summary

    Nested Classes
    Modifier and Type | Class and Description
    --- | ---
    `protected static class` | `VBAMacroReader.ModuleImpl`
    `protected static class` | `VBAMacroReader.ModuleMap`

  - ### Field Summary

    Fields
    Modifier and Type | Field and Description
    --- | ---
    `protected static java.lang.String` | `VBA_PROJECT_OOXML`
    `protected static java.lang.String` | `VBA_PROJECT_POIFS`

  - ### Constructor Summary

    Constructors
    Constructor and Description
    `VBAMacroReader(java.io.File file)`
    `VBAMacroReader(java.io.InputStream rstream)`
    `VBAMacroReader(POIFSFileSystem fs)`

  - ### Method Summary

    All Methods Instance Methods Concrete Methods
    Modifier and Type | Method and Description
    --- | ---
    `void` | `close()`
    `protected void` | `findMacros(DirectoryNode dir, VBAMacroReader.ModuleMap modules)` Recursively traverses directory structure rooted at `dir`.
    `protected void` | `findModuleNameMap(DirectoryNode node, java.util.Map<java.lang.String,java.lang.String> moduleNameMap, VBAMacroReader.ModuleMap modules)`
    `protected void` | `findProjectProperties(DirectoryNode node, java.util.Map<java.lang.String,java.lang.String> moduleNameMap, VBAMacroReader.ModuleMap modules)`
    `java.util.Map<java.lang.String,Module>` | `readMacroModules()`
    `java.util.Map<java.lang.String,java.lang.String>` | `readMacros()` Reads all macros from all modules of the opened office file.
    `protected void` | `readMacros(DirectoryNode macroDir, VBAMacroReader.ModuleMap modules)` Reads VBA Project modules from a VBA Project directory located at `macroDir` into `modules`.
    `protected void` | `readNameMapRecords(java.io.InputStream is, java.util.Map<java.lang.String,java.lang.String> moduleNames, java.nio.charset.Charset charset)`
    `protected void` | `readProjectProperties(DocumentInputStream dis, java.util.Map<java.lang.String,java.lang.String> moduleNameMap, VBAMacroReader.ModuleMap modules)`

    - ### Methods inherited from class java.lang.Object

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- - ### Field Detail

    - #### VBA_PROJECT_OOXML

          protected static final java.lang.String VBA_PROJECT_OOXML

      See Also:
        Constant Field Values

    - #### VBA_PROJECT_POIFS

          protected static final java.lang.String VBA_PROJECT_POIFS

      See Also:
        Constant Field Values

  - ### Constructor Detail

    - #### VBAMacroReader

          public VBAMacroReader(java.io.InputStream rstream)
                         throws java.io.IOException

      Throws:
        `java.io.IOException`

    - #### VBAMacroReader

          public VBAMacroReader(java.io.File file)
                         throws java.io.IOException

      Throws:
        `java.io.IOException`

    - #### VBAMacroReader

          public VBAMacroReader(POIFSFileSystem fs)

  - ### Method Detail

    - #### close

          public void close()
                     throws java.io.IOException

      Specified by:
        `close` in interface `java.io.Closeable`
      Specified by:
        `close` in interface `java.lang.AutoCloseable`
      Throws:
        `java.io.IOException`

    - #### readMacroModules

          public java.util.Map<java.lang.String,Module> readMacroModules()
                                                                  throws java.io.IOException

      Throws:
        `java.io.IOException`

    - #### readMacros

          public java.util.Map<java.lang.String,java.lang.String> readMacros()
                                                                      throws java.io.IOException

      Reads all macros from all modules of the opened office file.
      Returns:
        All the macros and their contents
      Throws:
        `java.io.IOException`
      Since:
        3.15-beta2

    - #### findMacros

          protected void findMacros(DirectoryNode dir,
                                    VBAMacroReader.ModuleMap modules)
                             throws java.io.IOException

      Recursively traverses directory structure rooted at `dir`. For each macro module that is found, the module's name and code are added to `modules`.``
      Parameters:
        `dir` - The directory of entries to look at
        `modules` - The resulting map of modules
      Throws:
        `java.io.IOException` - If reading the VBA module fails
      Since:
        3.15-beta2

    - #### readMacros

          protected void readMacros(DirectoryNode macroDir,
                                    VBAMacroReader.ModuleMap modules)
                             throws java.io.IOException

      Reads VBA Project modules from a VBA Project directory located at `macroDir` into `modules`.
      Throws:
        `java.io.IOException`
      Since:
        3.15-beta2

    - #### findProjectProperties

          protected void findProjectProperties(DirectoryNode node,
                                               java.util.Map<java.lang.String,java.lang.String> moduleNameMap,
                                               VBAMacroReader.ModuleMap modules)
                                        throws java.io.IOException

      Throws:
        `java.io.IOException`

    - #### findModuleNameMap

          protected void findModuleNameMap(DirectoryNode node,
                                           java.util.Map<java.lang.String,java.lang.String> moduleNameMap,
                                           VBAMacroReader.ModuleMap modules)
                                    throws java.io.IOException

      Throws:
        `java.io.IOException`

    - #### readNameMapRecords

          protected void readNameMapRecords(java.io.InputStream is,
                                            java.util.Map<java.lang.String,java.lang.String> moduleNames,
                                            java.nio.charset.Charset charset)
                                     throws java.io.IOException

      Throws:
        `java.io.IOException`

    - #### readProjectProperties

          protected void readProjectProperties(DocumentInputStream dis,
                                               java.util.Map<java.lang.String,java.lang.String> moduleNameMap,
                                               VBAMacroReader.ModuleMap modules)
                                        throws java.io.IOException

      Throws:
        `java.io.IOException`

Copyright 2020 The Apache Software Foundation or its licensors, as applicable.