はじめに
javaのpoiを活用してxlsm(マクロ付きファイル)とパスワード付きのExcelファイルを開いてみたいと思います。
import java.io.FileInputStream; import java.io.InputStream; import org.apache.poi.poifs.crypt.Decryptor; import org.apache.poi.poifs.crypt.EncryptionInfo; import org.apache.poi.poifs.filesystem.POIFSFileSystem; import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.ss.usermodel.Workbook; import org.apache.poi.xssf.usermodel.XSSFWorkbook; public class TestBook { public static void main(String[] args) { Workbook excel = null; try { excel = new XSSFWorkbook("D:\\temp\\test\\macro.xlsm"); Sheet sheet = excel.getSheetAt(0); for (int i = 0; i < 10; i++) { System.out.println(sheet.getRow(0).getCell(i)); } FileInputStream fi = new FileInputStream("D:\\temp\\test\\password.xlsx"); POIFSFileSystem filesystem = new POIFSFileSystem(fi); EncryptionInfo info = new EncryptionInfo(filesystem); Decryptor d = Decryptor.getInstance(info); if (d.verifyPassword("test") == false) { System.out.println("パスワードを解除できませんでした"); return; } InputStream is = d.getDataStream(filesystem); Workbook wb2 = new XSSFWorkbook(is); Sheet sheet2 = wb2.getSheetAt(0); for (int i = 0; i < 10; i++) { System.out.println(sheet2.getRow(0).getCell(i)); } } catch (Exception e) { e.printStackTrace(); } } }