MS Officeなしでエクセルにパスワードをかける

Pocket

クライアントがレポートをエクセルで欲しがる場合ってありますよね

SSISにはエクセルを出力する機能があります
ただし、今回の要件にはエクセルに読み取りパスワード設定が必須でした

でもSSISではエクセルのパスワードを設定できないんですよね

そんなエクセルにパスワードをかける方法

MS OfficeがインストールされていればVBScriptで簡単にできることまではわかりました
SSISが入っているマシンはもちろんサーバーです
なので、MS Officeなんてインストールされてません(^^)

どうにかできないか調べていたらOpenOfficeでパスワード設定ができそうなことがわかりました。
ただし、パスワード設定は、最新のOffice2007形式.xlsxではダメです。.xls形式のファイルじゃないとダメっぽい。
なので、今回は.xlsを使うことにします。

OpenOfficeでできることはわかったので、早速サーバーにインストール!

変換はVBScriptで行います。
ちなみに今回初めてVBScript書きました(^^)

<br />
'Option Explicit<br />
'On Error Resume Next<br />
Set OSM = WScript.CreateObject(&quot;com.sun.star.ServiceManager&quot;)</p>
<p>Dim MyFileNameUrl<br />
Dim result</p>
<p>MyFileNameUrl = &quot;file:///C|/tempdata/temp_template.xls&quot;</p>
<p>Set oDesktop = OSM.createInstance(&quot;com.sun.star.frame.Desktop&quot;)<br />
Set ROnly = OSM.Bridge_GetStruct(&quot;com.sun.star.beans.PropertyValue&quot;)<br />
ROnly.Name = &quot;ReadOnly&quot;<br />
ROnly.Value = False<br />
Set oCalcDoc = oDesktop.loadComponentFromURL(MyFileNameUrl,&quot;_blank&quot;,0,Array(ROnly))</p>
<p>Set Pass = OSM.Bridge_GetStruct(&quot;com.sun.star.beans.PropertyValue&quot;)<br />
Pass.Name = &quot;Password&quot;<br />
Pass.Value = &quot;hogepw&quot;<br />
Set Owrite = OSM.Bridge_GetStruct(&quot;com.sun.star.beans.PropertyValue&quot;)<br />
Owrite.Name = &quot;Overwrite&quot;<br />
Owrite.Value = True<br />
Set FName = OSM.Bridge_GetStruct(&quot;com.sun.star.beans.PropertyValue&quot;)<br />
FName.Name = &quot;FilterName&quot;<br />
FName.Value = &quot;MS Excel 97&quot;</p>
<p>'oCalcDoc.store()<br />
result = oCalcDoc.storeAsURL(MyFileNameUrl, Array(Pass, Owrite,FName))<br />
oCalcDoc.close(True)<br />
Set oCalcDoc = Nothing<br />
oDesktop.terminate()<br />
Set oDesktop = Nothing<br />

流れとしては、下記のような感じです。

  1. 書き込み可で開く
  2. パスワードをhogepwにする
  3. MS Excel97形式で上書きして保存する

FilterNameは出力するファイルの種類です。
Momonga Linux7では、下記にフィルタが定義されているようです。

<br />
/usr/lib/openoffice.org3.0/basis3.2/share/registry/modules/org/openoffice/TypeDetection/Filter<br />

WindowsのOpenOffice3.1では下記に定義されているようです。

<br />
C:Program FilesOpenOffice.org 3BasisshareregistrymodulesorgopenofficeTypeDetectionFilter<br />

あと、下の行のコメントを外すと上手く動作してくれませんでした。

<br />
'Option Explicit<br />

なぜでしょうね・・・。VBScript詳しくないのでわかりません

コメントを残す