ほんじゃらねっと

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

PythonでExcelの表からINSERT用SQLを生成して初期データ作成を楽にする

職場はメイン言語がJavaなので、プロジェクトでPythonを使う機会は ないのですが、キャプチャを撮ったりExcelを操作したりする作業を 「こっそり自動化」するスクリプトPythonで書いたりしています。

最近はSE作業で何かとExcelを使うことが多いので、 Excel作業の自動化をいろいろと模索しています。

PythonExcel操作できるライブラリはいくつかあって、 xlwingsExcelPythonなんかが話題になっていたので 調べてみたのですが、後々他のメンバーに作成した ファイルを共有したりすることを考えると、 Excelと切り離して処理が書ける方が良さそうです。 (xlwingsはVBAPythonを呼び出す必要があり、ExcelPythonはアドオンを入れる必要がある)

結局、オーソドックスなxlrdxlwtを使っています。

今日は以前から面倒だと思っていた、 初期データ作成用INSERT文を作成するスクリプト、 というか関数を作りました。 Windows環境で使うことを想定しています。

下記のような、1行目がテーブルのカラム名で、 2行目以降がデータになっているシートを読み込んで、 行ごとにINSERT文を作成して別ファイルに出力します。

ID NAME ADDRESS
1 山田 大阪府
2 岡田 東京都

出力先ファイルやテーブル名は引数で指定します。 複数のシートを一括処理可能です。

使用例:

output_insert_sqls('テストデータ.xlsx', 'C:/Users/test/Desktop/insert_data.sql', 
    [   
        '会員一覧' 
        ,'商品一覧' 
    ],  
    [   
        'users'
        ,'products'
    ]   
)

他にも、CREATE TABLE文やDELETE文を生成する関数を追加すれば、 色々と作業を楽にしていけそうです。

セルを処理している部分は文字列とfloatしか考慮しておらず、 荒めのコードになっているので、またブラッシュアップしていきます。

unicode_literalsは今回初めて使い、どういう原理か 全く分かっていませんが、とりあえずこれをインポートすることで Windowsのパスが正しく認識できるようになりました。

迷惑をかけないExcel

迷惑をかけないExcel