ほんじゃらねっと

ダイエット中プログラマのブログ

Groovy(またはJava)でパスワード認証付きExcelファイルを開く

仕事上Excelでデータを管理したり集計したりする機会が増えてきたので、 作業を自動化できるよう、プログラムでExcelを操作する方法を調べている。

社内のメイン言語はJavaなのである程度共有しつつ、 軽く作れるようにGroovy言語を選択する。

今回は手始めとしてパスワード保護されたExcelファイルからデータを 取得する簡単なスクリプトを書いてみた。

Apache POIを使ってExcelを操作する。 ポイントはBiff8EncryptionKeyクラスを使ったパスワード入力。 パスワードを求められて入力するのではなく、あらかじめユーザーパスワード という形で設定しておく必要があるようだ。

excel_decryption_test.groovy

@Grab(group='org.apache.poi', module='poi', version='3.11')
@Grab(group='org.apache.poi', module='poi-ooxml', version='3.11')

import org.apache.poi.hssf.record.crypto.Biff8EncryptionKey
import org.apache.poi.hssf.usermodel.*
import org.apache.poi.ss.usermodel.WorkbookFactory

def XLS_PATH = 'encrypted_file.xls'

Biff8EncryptionKey.setCurrentUserPassword('<パスワード>') 

new FileInputStream(XLS_PATH).withStream { fis ->
    def workbook = WorkbookFactory.create(fis)
    def sheet0 = workbook.getSheetAt(0)
    def cellData = sheet0.getRow(4).getCell(1)
    println 'cell data: ${cellData}'
}

Biff8EncryptionKey.setCurrentUserPassword(null)

GroovyでのExcel操作は下記の記事を参考にさせていただいた。 http://d.hatena.ne.jp/chofutaro/20140614/1402706120

Apache POI入門

Apache POI入門