Detect if a XLS Excel file contains a macro (using POI)Tag(s): IO
The Apache POI library is required.
FIrst, we define a POIFSReaderListener, called MacroListener, to analyze a given XLS and record if a macro is found.
import org.apache.poi.poifs.eventfilesystem.POIFSReaderEvent; import org.apache.poi.poifs.eventfilesystem.POIFSReaderListener; public class MacroListener implements POIFSReaderListener { boolean macroDetected; public boolean isMacroDetected() { return macroDetected; } public void processPOIFSReaderEvent(POIFSReaderEvent event) { if(event.getPath().toString().startsWith("\\Macros") || event.getPath().toString().startsWith("\\_VBA")) { macroDetected = true; } } }
To use it, create a POIFSReader and register our MacroListener.
import java.io.FileInputStream; import org.apache.poi.poifs.eventfilesystem.POIFSReader; public class DetectXLSMacro { private DetectXLSMacro () {} public static void main(String[] args) throws Exception{ System.out.println ("Checking " + args[0]); POIFSReader r = new POIFSReader(); MacroListener ml = new MacroListener(); r.registerListener(ml); FileInputStream fis = new FileInputStream(args[0]); r.read(fis); System.out.println (ml.isMacroDetected()); System.out.println ("Done "); System.exit(ml.isMacroDetected()? 1 : 0); } } /* output >java DetectXLSMacro womacro.xls Checking womacro.xls false Done >java DetectXLSMacro wmacro.xls Checking womacro.xls true Done */
mail_outline
Send comment, question or suggestion to howto@rgagnon.com
Send comment, question or suggestion to howto@rgagnon.com