Microsoft Windows XPのサポートが間もなく終了するということで、筆者の職場でも古いWindows機を強制的に更新する動きがある。 Microsoft Windowsを更新する場合、Microsoft Officeも連動して更新されることが多いであろう。 Microsoft Officeを更新した場合の不都合の1つとして、古いファイルが読めなくなる可能性がある。 Office2003からOffice2007への移行(XMLベースのファイル形式を採用)に際して、古いファイル形式への対応を系統的に放棄したからである。 特にExcel2007がDOS時代のLotus1-2-3などのファイル形式を放棄した影響は大きい。 筆者の職場でも、昔の経緯を確認するためにLotus1-2-3のWJ3ファイルの内容を確認する必要が生じる場合があり、それができなくなることは痛手である。
そこで、古いWindows機のうちから状態の良好なものを選んで、ファイル変換専用機として整備して残しておくことを考えた。 そして、いくつかのWJ3ファイルを変換してみたところ、特定のファイルを巧く変換できない場合があることが判った。 巧く変換できない事例のうち「内容の一部が失われる」という結果になる事例について、どの内容が失われたかを確認すると、roundup/rounddown関数を使っているセルであった。
roundup/rounddown関数は、数値を特定の桁で「切り上げ」または「切り捨て」するものであり、第1引数が処理対象数値、第2引数が処理する桁の指定である。 そして、Lotus1-2-3では第2引数を省略可能である。 省略すれば「0」と看做され、小数点以下の切り上げや切り捨てとなる。 しかし、Excelでは第2引数の省略はできない。 数式入力時に省略しようとすると、エラーとなって明示指定を要求される。
巧く変換できなかったWJ3ファイルでは、roundup/rounddown関数の第2引数を全て省略していた。 そこで、DOS機を起動してLotus1-2-3で問題のファイルを読み込み、第2引数を全て明示指定してから、その結果を変換したところ、問題無く処理できた。
第2引数を省略したroundup/rounddown関数が存在するWJ3ファイルを読み込んだ場合、
という結果になる。 Excel2000等で出力したXLSをExcel2007等で読み込むと、エラーを検出し、第2引数を省略したroundup/rounddown関数が存在するセルの内容が失われて「N/A」となる。
- Excel 97
- 読み込み時にエラーを起こし、Excel自体が異常終了する
- Excel 2000、Excel 2003、Excel 98 on Macintosh
- 何のエラーも無く読み込み、そのままXLSファイルに出力できる
- Excel 2007、Excel 2013
- そもそも読み込もうとしない
対策としては、問題の関数を手動で書き換える以外の方法は見出していない。 使えるDOS機が存在する場合はLotus1-2-3で書き換えれば良いし、無い場合でもExcel 2000/2003があれば、そこで書き換えてXLSファイルに出力すれば良い。
今のところ、筆者が問題を見出しているのはroundup/rounddown関数のみであるが、他の関数でも同様の問題が存在する可能性は高いだろう。