ShellScript
awk
sed
PowerShell
asciidoc

フリーランスの皆様こんにちは。

請求書がめんどくさい。

Wordで作るのさえも面倒。

帳票職人としてJaspersoft Studio,ActiveReportsと弄って消耗してます。

帳票ツールも使いたくない。

大門未知子のためにAsciiDocで請求書を作ります。

メロンのお供に請求書。

できたソースはGitHubにフルオープンにしておきます

Invoice_adoc - GitHub


環境


  • Windows10 Pro

  • PowerShell v5.1

  • Visual Studio Code


    • AsciiDoc extension



  • Git-Bash


    • gitに付いてます




請求データ


  • csv

  • UTF8

数量と金額と合計はシェルスクリプトかPowerShellで計算させる。

Linux/Macの方はシェルスクリプトで動く。

Windowsの方はPowerShellを使えばいい。

Gitを導入されている方であればGit-Bashも使えます。


  1. data.csvを作成

  2. 計算済みのデータをresult.csvとして出力

データの入力は人間のやる仕事だ。

しかし、計算は人間のやる仕事ではない。

data.csvを計算させるスクリプトは下記のようになる。


calc.sh

#!/bin/sh

# ヘッダーを取得
sed -n '1p' data.csv > temp/header.csv

# ヘッダー行を抜く
# コンマ区切りで入出力
# 合計の計算
# 明細金額を計算 3行目の数量と4行目の金額を掛ける
# 合計行を追加
cat data.csv |
sed '1d' |
awk -F',' 'BEGIN {FS=",";OFS=","}{sum+=$3*$4;print $1,$2,$3,$4,$3*$4} END{print "","","","合計",sum}' > temp/temp.csv
# ヘッダーとデータを結合
cat temp/header.csv temp/temp.csv > result.csv



calc.ps1

# 明細行の計算

$data |
Select-Object 日付,内容,数量,金額,@{name="明細額";expression={[INT]$_.数量*$_.金額}} |
Export-Csv result.csv -Encoding UTF8 -NoTypeInformation

# 合計を計算
$data=Import-Csv .\result.csv -Encoding UTF8
$sum=$data.明細額 | Measure-Object -Sum
$total=$sum.Sum

# 合計行を追加
",,,合計,$total" |Add-Content -Path .\result.csv -Encoding UTF8


上記のスクリプトを実行させるとdata.csvからresult.csvが出力されます。

data.csv

日付
内容
数量
金額
明細額

3月13日
手術
2
10000000

3月14日
手術
1
13000000

result.csv

日付
内容
数量
金額
明細額

3月13日
手術
2
10000000
20000000

3月14日
手術
1
13000000
13000000

合計
33000000


AsciiDocで入力

下記のように入力します。

AsciiDocを編集するのにおすすめはVSCode。

AsciiDocというPluginを入れればプレビューまではやってくれます。


== 請求書

=== To
帝都医科大学付属病院

〒104-0045 東京都中央区築地9-3

蛭間 重勝 様

=== From

神原名医紹介所

神原 晶

image::stamp.jpg[width=40]

〒135-0031 東京都江東区佐賀1丁目4-1

=== Contents

下記の通り請求申し上げます。
[format="csv", options="header"]
|===
include::result.csv[]
|===

=== 振込先

●●銀行 ●●支店

(普通) 000-000-000000

カンバラメイイショウカイジョ


ポイント

右揃え左揃えはできない。

だから上から順番に書くデザインにする。

result.csvをincludeして表組にしている。

markdownにはない強み。

印鑑を画像で挿入している。

image::stamp.jpg[width=40]

印鑑さえ挿入されていれば何故か正式な文章として受け取ってくれる。


PDFに出力

一番手っ取り早いのはAsciidoctorを使う方法です。

Macの方はbrewでinstallしちゃうのが早いかもしれません。

会社ではLinuxに持ち上げてLinux上のAsciidoctorに処理させています。


asciidoctor-pdf

$ asciidoctor-pdf invoice.adoc


WindowsにもAsciidocFXというツールがあります。

リンクを日本語にすると飛ばない。

今一つ日本語に弱いという問題があります。

最近は使ってません(´;ω;`)

イケてるフリーランスはMacユーザー多いから大丈夫じゃないかな。

生成した請求書のPDFをメール添付で送ってあげれば請求完了!