見出し画像

古いExcelファイル拡張子との戦いがついに終結!運用効率化のための自動変換

こんにちは、miiです。
ナビタイムジャパンでバス会社様サイト向け時刻表データの運用・開発を主に担当しています。

今回は「取り組んでいそうで、取り組んでこなかった意外な改善」をご紹介します。

普段の業務

私が所属しているチームでは「バス会社様サイト向け時刻表データ」の運用を、以前noteでご紹介した仕組みを利用して行っています。

もちろん、ただ運用を行うだけでなく、運用改善も継続的に行っています。

運用時のデータ作成の流れは以下図のようになっています。各工程でコンバータの速度改善等を行います。

データ作成の流れ

具体的には、各「バス会社様データ」としてテキストファイルやExcelファイルを受領することが多いのですが、それらファイルの読み込み処理の速度改善を行うような対応です。

今回は、この「Excelファイルの取り扱いに関する改善」のお話です。

Excelファイルの拡張子

本題の前に、Excelファイルについて念のためお話します。

「Excel」は1987年にマイクロソフト社によってリリースされ、何度かバージョン更新されています。

  • Excel 97からExcel 2003までのバージョンのファイル拡張子はxls

  • Excel2007以降のバージョンのファイル拡張子はxlsx

2024年6月現在は拡張子xlsxファイルが主に利用されていますが、
普段の業務で、バス会社様に提供いただくExcelファイルには、先方のご事情によって拡張子xlsファイルが送られてくることもあります。
そのため、拡張子xls、xlsxファイル相互対応用のコンバータを用意して、運用を続けていました。

継続的に改善するために

拡張子xls、xlsxファイル相互対応のコンバータを用意して、運用を続けていましたが、速度改善やプログラミング言語のバージョン更新を継続的行っていくと「新しい標準ライブラリがxlsファイルに対応していない」という問題に直面しました。
今後、新しい技術を取り込み、改善をし続けるためには、この問題を解決することが必要だと考え、「拡張子xlsファイルから、拡張子xlsxファイルへ自動変換する仕組み」を作ることにしました。

また、当社の運用では、Windows環境で実行するJenkinsを利用していたので、その環境に沿った形で改善することにしました。

用意した仕組み

実際の仕組みですが、実現方法は容易です。

今回は、Windows環境で自動実行できるようにしたいため、
PowerShellスクリプトで実際の処理を用意し、Jenkins(Pipelineを利用)で実行できるようにしました。

PowerShellスクリプトの具体的な実装は以下です。

$excel = New-Object -ComObject Excel.Application
$files = Get-ChildItem -Path {拡張子xlsファイルの配置場所} -Filter *.xls

foreach ($file in $files) {
        $workbook = $excel.Workbooks.Open($file.FullName)
        $xlsxPath = [System.IO.Path]::ChangeExtension($file.FullName, ".xlsx")
        $workbook.SaveAs($xlsxPath, 51)
        $workbook.Close()

        Remove-Item -Path $file.FullName

なお、サンプルコードなので、エラーハンドリング等の細部な考慮はしていません。

実際に動くかどうかを確認するため、以下配置場所を指定して実行してみました。

  • エクセルファイル(拡張子はxlsx)

  • エクセルファイル(拡張子はxls)

  • テキストファイル(拡張子はtxt)

  • 圧縮ファイル(拡張子はzip)

  • フォルダ

拡張子xlsファイルがないと変換されず処理が失敗するかなと予想していましたが、特に変換時の誤りはなく、問題なく「エクセルファイル(拡張子はxls)」のみが「エクセルファイル(拡張子はxlsx)」に変換されました。

また、変換対象の「エクセルファイル(拡張子はxls)」が存在しない場合も誤って関係のないファイル・フォルダが変換されることもありませんでした。

最後に

今回、私が改善をしようと「Excel 拡張子 自動変換」等で調べ始めた時は、参考となる情報が多岐にわたっていたため見つけられませんでした。
しかし「PowerShell」、「Python」のようにプログラミング言語を指定して調べると参考となる情報が得られ、今回の改善を進めることができました。

当社のようにExcelファイルの拡張子を意識するような業務で同じ悩みを抱えている方だけでなく、
プログラミング言語に馴染みのない業務に携わっているが、上記のような改善を行いたい方の調査方法の参考にもなりますと幸いです。