« ◆左手デバイスLoupeDeck Live.設定 | トップページ | ◆WEBキャッシュを消すバッチ »

◇複数CSVから複数シートのEXCEL-BOOKを作る

 複数のCSVファイルからExcel-Bookを作成する

複数のCSVファイルから複数のシートで構成されるBOOKを作成します。

次の機能を持ちます

  • ファイル名がシート名となる
  • 列のサイズを内容にそろえる
  • 先頭行はタイトルと解釈され、スクロールしない
  • 奇数行、偶数行で色を変える
  • セルを罫線で囲む

次のようなコマンドを作成しました。

Linux:
csvToExcel.py
    -in_dir CSVファイルを置いてあるフォルダ
    -out 出力するEXCELファイル名
   [-fit サイズ余裕] 1.5程度;カラム調整をしない場合 -fit 0)
   [-no_fix] 先頭行を固定にしない
   [-title_color 先頭行のバックグラウンド色、文字色] デフォルト:00008b,ffffff
   [-line_coloi 奇数行色,偶数行色またはnone] デフォルト:dce6f0,FFFFFF
   [-font fit指定時のフォント名] デフォルト:"MS Gothic")
   [-border_style ボーダー線指定 thin/hair/dotted/none] デフォルトはthin
   [-cross_border] 縦横の罫線をいれる
   [-number] 数値文字列をexcelの判断で数値として扱う
Windows:
csvToExcel.bat
    引数は同じ

 制限事項;行とカラム

全行のカラム数は一致している必要があります。

必須ではありませんが、先頭行はタイトル行としてカラム名を表すとされます。
後述の-numberを付けても数値扱いされません。

デフォルトでは先頭行はタイトル行として固定されスクロールされません。
-no_fixオプションを付けると、全行スクロール対象となります。

デフォルトではカラムサイズは内容全体を表示できるように調整されます。
-fitオプションで、カラムサイズを内容最大長の何倍にするかを指定できます。デフォルトは1.3です。
-fit 0を指定すると、カラムサイズの調整を含め、カラムに関する一切の調整を行いません。

 文字列/数値の取り扱い

デフォルトでは全ての値を文字列として取り扱います。

01,02,1-2,0.9999999999999999999といった数値文字列もそのまま表示できます。

数値形式の文字列はExcelでは警告対象ですので、各セルの左肩に緑三角マークが表示されてしまいます。このマークを自動で消す方法は今の所分かっていません。

-numberオプションを付けると、これらはExcelの数値として取り扱われます。
Excelの仕様上、表示が内容と異なるものとなることが多いので注意が必要です。

 CSVからBOOKを作る例

次の2つのCSVからExcelのBOOKを作ってみました。

csv_sample/sample1.csv
名前,id,年齢,性別,趣味,好きな食べ物
田中太郎,001,25,男性,読書,寿司
山田花子,002,30,女性,料理,ラーメン
佐藤健太,003,35,男性,スポーツ,カレーライス
鈴木みゆき,004,28,女性,旅行,焼肉
伊藤健介,005,40,男性,映画鑑賞,寿司
小林美加,006,22,女性,ショッピング,ピザ
高橋一郎,007,33,男性,音楽鑑賞,ラーメン

csv_sample/sample2.csv
都道府県,id,市区町村,人口,面積,主要産業系,交通手段,観光スポット,名所
東京都,01,千代田区,693033,10.21,金融業,電車,東京タワー,皇居
大阪府,02,大阪市北区,1321543,15.97,製造業,地下鉄,大阪城,道頓堀
北海道,03,札幌市中央区,198875,46.45,情報通信業,バス,時計台,狸小路
沖縄県,04,那覇市,321364,38.99,観光業,レンタカー,首里城,国際通り
福岡県,05,福岡市博多区,1593506,340.24,サービス業,飛行機,博多祇園山笠,太宰府天満宮

次のような2つのシートからなるBOOKが生成できました。

オプション無:

-cross_border -number:

 プログラム

Python3を用いています。
次の設定が必要です。(この例はLinuxです)

$ sudo apt install python3
$ sudo apt install python3-pip
#---------------------------------------
$ pip install pandas
$ pip install xlsxwriter
$ pip install openpyxl
$ pip install pyarrow

ソースは次のURLでダウンロードできます。 csvtoexcel.py

次のファイルから構成されています。

csv2excel/
|-- bin
|   |-- CsvToExcel.py    # python プログラム
|   |-- csvToExcel       # コマンド風bashスクリプト(不要)
|   `-- csvToExcel.bat   # Windowsバッチ
|-- test
|   |-- A01_test.bat     # 試験起動バッチ
|   |-- A01_test.sh      # 試験起動bash
|   `-- csv_sample
|       |-- sample1.csv  # CSVファイル1
|       `-- sample2.csv  # CSVファイル2
`-- 準備
    |-- setPythonEnv.bat # pythonライブラリ設定バッチ
    `-- setPythonEnv.sh  # pythonライブラリ設定bash

Linuxの場合、ファイルに実行権を付加しておく必要があります。

Linuxの場合
$ unzip csv2excel.zip
$ cd csv2excel
$ chmod a+x */*.sh */*.py

 試験、使い方

サンプルを用意してあります。

test下で
・A01_test.bat
または
・A01_test.sh
を実施。

データはcsv_sample下にあり、結果はcsv_sample下にsample.xlsxとして出力されます。

テストスクリプトは次のようになっています。ここではパスを書き下ろしていますが実行パス環境変数を設定しておけば、直接コマンドを書くことも可能です。

ーーーー A01_test.bat ---ー
@echo off
:: SJIS CR/LF
setlocal
set "THIS_DIR=%~dp0"
set "BIN_DIR=%~dp0..\bin\"
cd %THIS_DIR%
if ERRORLEVEL 1 ( echo "SOME ERROR OCCURED";exit 1)
call %BIN_DIR%csvToExcel.bat -in_dir csv_sample -out csv_sample\sample.xlsx
if ERRORLEVEL 1 ( echo "SOME ERROR OCCURED";exit 1)
echo OK
endlocal
pause
::この行を消してはならない
ーーーー A01_test.sh ---ー
#!/bin/bash
# UTF-8 LF
THIS_DIR=$(cd $(dirname ${BASH_SOURCE:-$0}); pwd)
BIN_DIR=$(cd ${THIS_DIR}/../bin;pwd)
cd ${THIS_DIR}
if [ $? -ne 0 ]; then echo "SOME ERROR OCCURED";exit;fi
${BIN_DIR}/CsvToExcel.py -in_dir csv_sample -out csv_sample/sample.xlsx
if [ $? -ne 0 ]; then echo "SOME ERROR OCCURED";exit;fi
echo "OK"
# この行を消してはならない

 コード

|

« ◆左手デバイスLoupeDeck Live.設定 | トップページ | ◆WEBキャッシュを消すバッチ »