【バージョン1.9以降】複数CSV抽出にワイルドカード(*)を使う

バージョン1.9以降では、「変換(CSV→抽出データ)」手順の入力ファイル名に
ワイルドカード(*)が使用できるようになりました。

バージョン1.8までは、複数CSVファイルから抽出するには、繰り返し実行手順を組むなどの工夫が必要でしたが、バージョン1.9からは1回でまとめて複数CSVファイルから抽出可能となりました。

INPUTフォルダに置かれた3個のCSVファイル

「変換(CSV→抽出データ)」手順

[入力ファイル名(パターン)] に、ワイルドカード(*)を使用しています。

実行結果(複数CSVからの抽出結果)

複数CSVからの抽出結果は、1個のXML(XBD)ファイルとなります。

 

qpdf 簡単チュートリアルガイド

PDFtk 2.02 から qpdf へ移行した話
https://xoblos.hatenablog.jp/entry/2026/08/26/025020

qpdf のインストール方法
https://xoblos.hatenablog.jp/entry/2026/08/27/033720

上記記事で紹介した qpdf の使い方について、「qpdf 簡単チュートリアルガイド」を生成AIに書いてもらいました。ガイド中「今回のような」という表現は、「PDFtk 2.02 から qpdf へ移行した話」での事例を指しています。


qpdf は、PDFの結合・分割・暗号化確認・復号・内部構造の修復などをコマンドラインから行えるツールです。

特に、古い pdftk では扱えない AES-256 / Revision 6 のPDFにも対応しています。qpdfでは256-bit暗号化はAESを使用し、Revision 6にも対応しています。

1. インストール確認

コマンドプロンプトまたはPowerShellで、

qpdf --version

バージョン番号が表示されれば使用できます。


2. PDFが正常かチェックする

まず覚えておくと便利なのが --check です。

qpdf --check input.pdf

PDFの構造を検査します。

正常ならエラーなしで終了します。軽微な異常の場合、たとえば、

WARNING: object has offset 0

のような警告を出しながら、qpdfが読み込みを継続することがあります。

暗号化情報も --check の出力に含まれます。


3. PDFの暗号化状態を確認する

qpdf --show-encryption input.pdf

たとえば、

R = 6
P = -1340
User password =
Supplied password is user password
extract for accessibility: allowed
extract for any purpose: not allowed
print low resolution: allowed
print high resolution: allowed
modify document assembly: not allowed
modify anything: not allowed
stream encryption method: AESv3
string encryption method: AESv3
file encryption method: AESv3

などと表示されます。

重要なのは、

R = 6
AESv3

です。

これは AES-256系の暗号化が使われているPDFです。PDFの標準セキュリティハンドラーでは、R=6 は現在の256-bit暗号化方式です。


4. PDFを結合する

2つのPDFを結合

qpdf --empty --pages 1.pdf 2.pdf -- all.pdf

結果:

1.pdf
2.pdf
 ↓
all.pdf

--empty は「空のPDFから開始して、指定したPDFのページをコピーする」という意味です。複数PDFの結合では非常に便利です。

複数のPDFを結合

qpdf --empty --pages 1.pdf 2.pdf 3.pdf 4.pdf -- all.pdf

5. ファイル一覧から一括結合する

たくさんのPDFを結合するときは、PowerShellが便利です。

例えば pdflist.txt を、

1.pdf
2.pdf
3.pdf
4.pdf
19.pdf
20.pdf

のように作成します。

PowerShell:

$pdfs = Get-Content pdflist.txt
& qpdf --empty --pages @pdfs -- all.pdf

従来のPDFtkで、

pdftk (Get-Content pdflist.txt) cat output all.pdf

としていた用途のqpdf版です。


6. 一部のページだけ取り出す

たとえば input.pdf の1~5ページだけ取り出す場合:

qpdf input.pdf --pages . 1-5 -- output.pdf

. は「メイン入力ファイル」を意味します。qpdfの --pages ではページ範囲を指定できます。

1ページだけ

qpdf input.pdf --pages . 1 -- page1.pdf

3~10ページ

qpdf input.pdf --pages . 3-10 -- output.pdf

最終ページまで

z は最終ページを意味します。

qpdf input.pdf --pages . 5-z -- output.pdf

つまり5ページ目から最後までです。


7. 複数PDFから必要なページだけ結合する

たとえば、

  • a.pdf → 全ページ

  • b.pdf → 1~5ページ

  • c.pdf → 10~最終ページ

をまとめるなら、

qpdf --empty --pages a.pdf b.pdf 1-5 c.pdf 10-z -- output.pdf

--pages は単純な結合だけでなく、複数PDFからページを選択して新しいPDFを作れます。


8. PDFをqpdfで再生成・修復する

PDF内部のxrefなどに軽微な異常がある場合、

qpdf input.pdf fixed.pdf

とするだけで、qpdfがPDF内部構造を読み直して新しいPDFを書き出します。

例えば、

WARNING: 19.pdf (object 6 0):
object has offset 0

などが出た場合、

qpdf 19.pdf 19_fixed.pdf

その後、

qpdf --check 19_fixed.pdf

として確認します。


9. 元ファイルを直接修復する

別ファイルを作らず元ファイルを置き換えることもできます。

qpdf input.pdf --replace-input

qpdfは一時ファイルを作ってから元ファイルを置き換えます。警告があった場合には元ファイルを退避する仕組みもあります。

ただし、安全のため最初は、

qpdf input.pdf fixed.pdf

のように別ファイルへ出力する方がおすすめです。


10. 暗号化を解除する

PDFを加工する正当な権限がある場合、

qpdf --decrypt input.pdf output.pdf

とすると暗号化されていないPDFを作成できます。

パスワードが必要な場合:

qpdf --password=PASSWORD --decrypt input.pdf output.pdf

暗号化されたファイルを扱う場合、user passwordまたはowner passwordが必要になるケースがあります。


11. AES-256で暗号化する

qpdfではAES-256暗号化PDFも作成できます。

基本形は、

qpdf input.pdf output.pdf --encrypt USER OWNER 256 --

です。

例えば、

qpdf input.pdf encrypted.pdf --encrypt userpass ownerpass 256 --

とします。

256-bit暗号化ではAESが使用されます。RC4などの古い暗号方式より、qpdf自身も256-bit AESの利用を推奨しています。


12. PDFのProducerなど内部情報を見る

まずtrailerを確認します。

qpdf --show-object=trailer input.pdf

例えば、

/Info 2 0 R

と表示されたら、

qpdf --show-object=2 input.pdf

とします。

すると、

<<
 /CreationDate (...)
 /ModDate (...)
 /Producer (List Creator)
 /Title (...)
>>

のようにPDFの情報を確認できます。

上記の確認例では、

/Producer (List Creator)

だったので、富士通 List Creator系で生成されたPDFと推定できます。


13. ページ数を調べる

最近のqpdfでは、

qpdf --show-npages input.pdf

でページ数だけを取得できます。--show-npages はqpdf 12.3系で追加されています。

例えば、

25

と表示されます。

バッチ処理にも便利です。


14. よく使うコマンド早見表

やりたいこと コマンド
バージョン確認 qpdf --version
PDFチェック qpdf --check a.pdf
暗号化確認 qpdf --show-encryption a.pdf
2ファイル結合 qpdf --empty --pages a.pdf b.pdf -- out.pdf
1~5ページ抽出 qpdf a.pdf --pages . 1-5 -- out.pdf
5ページ~最後 qpdf a.pdf --pages . 5-z -- out.pdf
PDF再生成 qpdf a.pdf fixed.pdf
元PDF置換 qpdf a.pdf --replace-input
暗号解除 qpdf --decrypt a.pdf out.pdf
ページ数 qpdf --show-npages a.pdf
trailer確認 qpdf --show-object=trailer a.pdf
object確認 qpdf --show-object=2 a.pdf

今回の用途で最低限覚える5つ

今回のような「帳票PDFを大量に結合する」用途なら、まず以下の5コマンドで十分です。

① PDFが正常か

qpdf --check 20.pdf

② 暗号化されているか

qpdf --show-encryption 20.pdf

③ PDFを修復・再生成

qpdf 19.pdf 19_fixed.pdf

④ PDFを結合

qpdf --empty --pages 1.pdf 2.pdf 3.pdf -- all.pdf

⑤ リストから大量結合

$pdfs = Get-Content pdflist.txt
& qpdf --empty --pages @pdfs -- all.pdf

この5つを押さえておけば、PDFtkからqpdfへの移行で必要になる作業の大部分をカバーできます。

おすすめ運用

大量帳票を処理する場合は、

PDF一覧取得
      ↓
qpdf --check
      ↓
異常PDFがあれば再生成
      ↓
暗号化PDFもqpdfで読み込み
      ↓
--pages で一括結合
      ↓
all.pdf

という流れにすると安定します。

特に今回のような、

  • List Creator等が生成したPDF

  • AES-256 / R=6 PDF

  • xrefに軽微な異常があるPDF

  • 多数のPDFを自動結合

が混在する環境では、古いPDFtkよりqpdfの方が扱いやすい構成です。

qpdf のインストール方法

PDFtk 2.02 から qpdf へ移行した話
https://xoblos.hatenablog.jp/entry/2026/08/26/025020

上記記事で紹介した qpdf ですが、使用するには qpdf のインストールが必要です。
Windows なら、いちばん簡単なのは 公式の .exe インストーラを使う方法です。
現在の公式リリースでは Windows 64bit 用に qpdf-12.3.2-msvc64.exe や qpdf-12.3.2-mingw64.exe が配布されています。

インストーラを実行して進めると、PATH の設定ダイアログが表示されますので、
「Add qpdf to the system PATH for current user」をチェックして、「次へ」で進めてインストールしてください。

xoBlos からは「外部アプリの実行」で、コマンドプロンプトから実行しますので、
環境変数 PATH に qpdf が追加されている必要があります。


qpdf 簡単チュートリアルガイド
https://xoblos.hatenablog.jp/entry/2026/08/27/125519

PDFtk 2.02 から qpdf へ移行した話

%ComSpec%

/C powershell -Command "qpdf --empty --pages (Get-Content pdflist.txt) -- all.pdf"


これまで xoBlos から「外部アプリの実行」を使って、PDFの結合処理を行うには、長年 PDFtk 2.02 を使っていました。

たとえば、複数のPDFを指定したり、一覧ファイルから読み込んだりして、1つのPDFにまとめる処理です。

pdftk 1.pdf 2.pdf 3.pdf cat output all.pdf

PDFtkはシンプルで使いやすく、長く使われてきた定番ツールです。

ところが、あるPDFを結合しようとしたところ、突然こんなエラーが出ました。

InvalidPdfException: unknown.encryption.type.r
Error: Failed to open PDF file

原因は AES-256 の暗号化PDF

問題のPDFを調べてみると、次のような暗号化情報が設定されていました。

R = 6
stream encryption method: AESv3
string encryption method: AESv3
file encryption method: AESv3

これは、AES-256系の比較的新しい暗号化方式です。

一方、PDFtk 2.02 は2013年に公開された古いバージョンで、この暗号化方式を扱えませんでした。

つまり、

PDF自体は正常
↓
Adobe Readerでは開ける
↓
しかしPDFtk 2.02では読めない

という状態だったわけです。

qpdf に切り替えてみた

そこで、PDF処理ツールを qpdf に変更しました。

PDFの結合は、たとえば次のように書けます。

qpdf --empty --pages 1.pdf 2.pdf 3.pdf -- all.pdf

ファイル一覧をPowerShellで読み込む場合も、

$pdfs = Get-Content pdflist.txt
& qpdf --empty --pages @pdfs -- all.pdf

と書けます。

これまでPDFtkで行っていた大量PDFの結合処理も、ほぼ同じ考え方で移行できました。

qpdf にして分かったメリット

qpdfには、単にPDFを結合するだけでなく、次のような機能があります。

qpdf --check input.pdf

でPDFの構造をチェックしたり、

qpdf --show-encryption input.pdf

で暗号化方式を確認したりできます。

実際、別のPDFでは、

object has offset 0

というPDF内部構造の警告も検出できました。

しかもqpdfは、この程度の軽微な異常であれば読み込みながら処理を続けてくれます。

PDFtkが悪いわけではない

今回の移行は、PDFtkが使えないツールになった、という話ではありません。

PDFtk 2.02は長年安定して使える優れたツールでした。

ただ、PDFの世界も変化しています。

最近では、

  • AES-256暗号化
  • 新しいPDFセキュリティ仕様
  • さまざまな業務システムが生成するPDF
  • 少し壊れたPDFや特殊なPDF

などを扱う機会が増えています。

そのため、古いPDF処理ツールでは対応できないケースが少しずつ増えてきました。

まとめ

今回の流れをまとめると、

PDFtk 2.02でPDFを結合
        ↓
AES-256 / Revision 6 のPDFでエラー
        ↓
qpdfで暗号化方式を確認
        ↓
原因判明
        ↓
PDF結合処理をqpdfへ移行

となります。

長年動いていたバッチ処理でも、入力されるPDFの仕様が変われば、突然動かなくなることがあります。

今回のケースは、まさに

「処理プログラムは変えていないのに、入力PDFの世代が変わった」

ことで起きたトラブルでした。

PDFを自動処理している環境では、エラーが起きたときに単純に「PDFが壊れている」と考えるのではなく、暗号化方式やPDF内部構造の違いも確認してみると、原因を見つけやすくなります。


qpdf のインストール方法
https://xoblos.hatenablog.jp/entry/2026/08/27/033720

qpdf 簡単チュートリアルガイド
https://xoblos.hatenablog.jp/entry/2026/08/27/125519

トリックコレクション (1):1行だけ行繰り返し手順で特定項目をechoコマンドで出力

課題例

見積台帳を記入したExcelシートで、未発行見積番号の先頭M00010」と、発行済見積番号の最終M00009」を、項目だけ抜き出して、それぞれテキストファイルに出力したいとします。

xoBlos 業務シナリオ例

見積番号抽出.xbt というxoBlos 業務シナリオを用意します。

未発行見積番号を抽出する

抽出用制御シート

「見積書作成日」(B列)が空白でないデータ(つまり発行済のデータ)をスキップして抽出します。

抽出データファイル

抽出データ先頭レコードの見積番号「M00010」を項目出力できれば良さそうですね。

先頭1行のみを実行して見積番号をテキスト出力する

[指定のファイルの行数分繰り返す] を指定し、未発行見積番号.xml の1行目だけを繰り返すために、[最大繰り返し数] に 1 を指定します。

「外部アプリ実行」 手順の設定
1.基本の設定
a.関連付けられたアプリケーション いいえ
b.実行するファイル(必須) %ComSpec%
c.コマンドライン引数 /c echo $(item:"見積番号")>OUTPUT¥未発行見積番号_先頭.txt

%ComSpec% は、Windowsのコマンドプロンプト(cmd.exe)です。echoコマンドで、項目変数 "見積番号" の値を、出力ファイルにリダイレクト(>)出力しています。
未発行見積番号_先頭.txt の内容
M00010

発行済見積番号を抽出する

抽出用制御シート

「最下行判断列」をB列にし、「見積作成日」が記入されているデータを抽出します。%ROW を指定して、レコードに行番号を振り付けています。

抽出データファイル

抽出データ最終レコードの見積番号「M00009」を項目出力できれば良さそうですね。

抽出データを行番号の降順(逆順)に並べ替える

抽出データ並べ替え結果

先頭1行のみを実行して見積番号をテキスト出力する

後は「発行済見積番号 最終出力」手順も、「未発行見積番号 先頭出力」手順の指定要領と同じです。

[指定のファイルの行数分繰り返す] を指定し、発行済見積番号_逆順.xml の1行目だけを繰り返すために、[最大繰り返し数] に 1 を指定します。

「外部アプリ実行」 手順の設定
1.基本の設定
a.関連付けられたアプリケーション いいえ
b.実行するファイル(必須) %ComSpec%
c.コマンドライン引数 /c echo $(item:"見積番号")>OUTPUT¥発行済見積番号_最終.txt

%ComSpec% は、Windowsのコマンドプロンプト(cmd.exe)です。echoコマンドで、項目変数 "見積番号" の値を、出力ファイルにリダイレクト(>)出力しています。
発行済見積番号_最終.txt の内容
M00009

 

「解決!ゾブロス」の企画を生成AIに立てさせてみた

プロンプト例

「解決!ゾブロス」という連載漫画を制作します。
まずは全体の企画を立ててください。

 

生成AI回答例

いいですね。「解決!ゾブロス」は、難しいDX・業務改革・AIの話を、漫画なら笑って理解できるという立ち位置にすると、かなり強い連載になります。

特に「ゾブロス」という名前自体を、単なる商品名ではなく、困った現場に現れて「構造を見抜き、解決する存在」としてキャラクター化すると、連載として回しやすくなります。

『解決!ゾブロス』全体企画案

1. 企画コンセプト

タイトル

解決!ゾブロス
――その仕事、ほんとうに人間が苦労する必要ありますか?

テーマは、企業や組織の「あるある問題」。

Excel地獄、属人化、会議過多、仕様変更、DX迷子、生成AI導入、データ連携、システム刷新、経営と現場のすれ違い……。

毎回ひとつの「困った!」が発生し、ゾブロスの面々が乗り込んで解決します。

ただしポイントは、

「ゾブロスの商品を使ったら解決しました」漫画にしないこと。

それでは広告漫画になってしまいます。

むしろ、

問題 → 思い込み → 問題の構造発見 → 発想の転換 → 解決

という“小さな推理ドラマ”にします。

読者が最後に、

「あ、うちの会社もこれだ」

となる漫画です。


2. 世界観

舞台は、日本のどこにでもありそうな企業。

そこでは今日も、

「前任者しか分からないExcel」
「誰も読まない100ページのマニュアル」
「DX推進会議のための会議」
「AIを入れろと言われたが何をすればいいのか分からない」

といった怪事件が発生しています。

そこへ現れるのが――

問題解決チーム「ゾブロス」

彼らの仕事はシステムを売ることではありません。

“仕事の仕組みそのもの”を解剖すること。

そして毎回、

「問題はシステムじゃない。構造です。」

のような一言から、事件の正体を暴いていきます。

ジャンル感としては、

企業漫画 × 探偵もの × ギャグ × DX入門

です。


3. 主人公チーム

連載を長くするなら、ゾブロスを一人のスーパーマンにしない方が面白くなります。

ゾブロス所長

一見ぼんやりしているが、問題の本質を一瞬で見抜く。

口癖:

「なるほど。犯人はExcelじゃありませんね。」

周囲:

「Excelに犯人とかいるんですか?」

ホームズ型ですが、少し飄々としている。


シート君

表を見ると興奮する設計オタク。

Excel、データ、制御シート、ルール化担当。

「人間が覚えているルールを見ると、表にしたくなる」という困った性格。

将来的には制御シート言語やPQL的な発想も、このキャラクターを通して漫画化できます。


アイちゃん

生成AI担当。

何でもAIにやらせようとする。

ただし、

アイちゃん「AIに聞けばいいじゃないですか」
所長「その質問を誰が作るんです?」
アイちゃん「……あ。」

という感じで、AI万能論を自分で破壊する役でもあります。


現場田さん

毎回ほぼ被害者。

「昔からこうなんです」
「前任者が作りました」
「触ると壊れるので触らないでください」

など、企業の現場あるあるを全部背負う人物。

読者がもっとも感情移入するキャラクターです。


部長

経営・管理職側。

「とにかくDXだ!」
「生成AIを導入しよう!」
「来月からデータドリブンで!」

と号令をかけるものの、具体策はない。

単なる悪役にせず、実は本人も経営陣から無茶振りされていることが分かる回を作ると深みが出ます。


4. 1話の基本フォーマット

毎回の型を決めてしまいます。

① 事件発生

「月末になると経理部から悲鳴が聞こえる」

② 現場を見る

巨大Excel登場。

③ 誤診

「Excelを新システムに置き換えましょう!」

④ ゾブロスが違和感を発見

「ちょっと待ってください。
この数字、誰が決めているんです?」

⑤ 真犯人判明

Excelではなく、

「ルールが人間の頭の中にしかない」

ことが問題だった。

⑥ 構造を整理

データ
ルール
処理
判断

を分離。

⑦ 解決

仕事がシンプルになる。

⑧ オチ

現場田:

「じゃあ、このExcelは捨てていいんですね!」

シート君:

「いえ。文化財として保存しましょう。」


この「犯人は○○ではなかった」型は、かなり使えます。


5. 第1シーズン案

「DX怪事件ファイル」全12話

タイトル テーマ
第1話 Excelを消した男 Excel依存・属人化
第2話 会議が会議を呼ぶ会社 会議過多
第3話 誰も知らない業務ルール 暗黙知
第4話 DX推進室、DXできず DXの目的化
第5話 AI社員アイちゃん入社 生成AI
第6話 プロンプトを書けない人々 AI活用設計
第7話 データはある。でも使えない データ統合
第8話 100ページの要件定義書 システム開発
第9話 仕様変更という名の怪物 要件変更
第10話 その判断、誰が決めた? 業務ルール
第11話 システムを作らないDX ノーコード・構造化
第12話 ゾブロス最大の事件 人・AI・仕組みの再設計

第12話で、

DXとは「デジタル化すること」ではなく、
仕事の構造を組み替えることだった。

というシーズン全体の答えに着地させます。


6. 漫画の特徴を一つ作る

この漫画なら、毎回必ず登場する名物コーナーを作りたいです。

それが、

「ゾブロスの解決シート」

事件の最後に1枚だけ、

Before → 問題の構造 → After

を図解します。

たとえば第1話なら、

Before



Excel



Excel

だったものを、

After

データ

ルール

処理

必要な人が判断

へ。

つまり読者は、

漫画で笑う → 図で理解する

という二段階で理解できます。

これが『解決!ゾブロス』独自の武器になります。


7. 実はここからが重要

「制御シート」を漫画世界の発明にする

さらに面白い展開があります。

最初から制御シートを説明しない。

第1〜3話では、

「業務ルールを表にすると分かりやすい」

程度に留めます。

その後、

第4話
「この表、システムに読ませられないかな?」

第6話
「AIにも読ませられるぞ」

第8話
「要件定義まで表で書ける?」

と進み、

やがて読者自身が、

「あれ?
このシート自体が“言語”なんじゃない?」

と気づく。

そこで初めて、

制御シート言語

という概念が登場する。

これはかなり良い物語構造です。

「技術を説明する漫画」ではなく、

漫画の登場人物たちが試行錯誤した結果、新しい技術思想を発見する漫画

になるからです。


8. さらに大きな物語

長期連載では、単発の業務改善からだんだんスケールを上げます。

Season 1:仕事を解決する
Excel、会議、属人化、AI。

Season 2:会社を解決する
部門間連携、経営、組織、データ。

Season 3:システム開発を解決する
要件定義、仕様、AI開発、制御シート言語。

Season 4:AI時代の会社を作る
人間とAIはどう仕事を分担するのか。

そして最終的には、

「会社そのものをプログラムできるのか?」

というテーマまで持っていけます。

そうすると『解決!ゾブロス』は単なるDX啓蒙漫画ではなく、

「AI時代の仕事とは何か」を描くビジネスSF

になっていきます。


企画の核

この作品で一番大事にしたいのは、

ゾブロスが“答えを教える漫画”ではなく、“見方を変える漫画”であること。

毎回読者に、

「問題だと思っていたものは、本当の問題ではなかった。」

という小さな驚きを与える。

これなら、営業用コンテンツ、Web連載、SNS漫画、採用広報、セミナー教材、書籍化まで、かなり横展開できます。

そして第1話の冒頭は、かなり強烈にできます。

「このExcelを作った人、もう会社にいません。」

――ここから『解決!ゾブロス』を始めるのが、私はかなり好きです。