Class 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
    • 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
    • Method Detail

      • close

        public void close()
                   throws java.io.IOException
        Specified by:
        close in interface java.lang.AutoCloseable
        Specified by:
        close in interface java.io.Closeable
        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