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();
}
}