Apache POI Check if File Contains Macros
This code should work for all office file. In this code, we test the file 1.doc in the project root directory. Requirement: POI 3.15 or above.
import org.apache.poi.poifs.macros.VBAMacroReader; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.util.Map; public class Main { private static boolean hasVBA(InputStream inputStream) throws IOException { boolean returnVal = false; VBAMacroReader vbaMacroReader = null; try { vbaMacroReader = new VBAMacroReader(inputStream); Map<String, String> map = vbaMacroReader.readMacros(); returnVal = true; } catch (IOException e) { if (!e.getMessage().equals("No VBA project found")) { throw e; } } finally { if (vbaMacroReader != null) { vbaMacroReader.close(); } } return returnVal; } public static void main(String[] args) throws Exception { File file = new File("./1.doc"); InputStream inputStream = new FileInputStream(file); if (hasVBA(inputStream)) { System.out.println("This file has VBA"); } else { System.out.println("Нет VBA"); } inputStream.close(); } }