Skip to content

haman-tiger/ExcelConductor

Repository files navigation

ExcelConductor Logo

ExcelConductor

もう、Excel 帳票は怖くない。

出力も取込も「一撃」
Excel 帳票開発の常識を変える実務特化型エンジン

   Core:    ClosedXml Provider:    NPOI Provider:


📄 Usage: ExcelConductor 3 つの「一撃」

開発が爆速になる、3 つの「一撃」をご紹介します。

※ ExcelConductor は Excel の API を便利に包むライブラリではありません。
実務帳票が持つ「構造」そのものを抽象化し、出力も取込も同一思想で扱える設計です(詳細は後述)。

1. テンプレートが主役の「一撃」Bind

「テンプレートにデータを流し込む」 という設計です。
テンプレートに予約語を配置し、モデルを Bind するだけで帳票出力は完了です。
一覧の方向 (縦・横) も、一段・多段の出力も可能です。

var engine = new WorkbookEngine("template.xlsx");
engine.Bind(model); 
engine.Save("output.xlsx");

※ 予約語の設定方法は後述します。
※ モデル定義や属性指定の詳細は、/samples を参照してください。

2. モデルが主役の「一撃」Read

「モデル定義から一覧構造を解析する」 という設計です。
開始位置を指定するだけで、指定モデルに内容を取り込みます。
一覧の方向 (縦・横) も、一段・多段の取込も可能です。

var engine = new WorkbookEngine("template.xlsx");
var collection = engine.Read<OrderDetail>(startRow: 9);

※ モデル定義や属性指定の詳細は、/samples を参照してください。

3. ライブラリの切替も「一撃」

using を切り替えるだけで、ライブラリの変更が可能です。
「とりあえず、ClosedXML で開発を始め、要件によって NPOI に切り替える」
そんな「意思決定の先送り」を可能にします。

// ClosedXML を使いたい場合
// using CTF.ExcelConductor.ClosedXml; 

// NPOI を使いたい場合
using CTF.ExcelConductor.Npoi;  // ← この 1 行を変えるだけで Provider が切り替わります

Ex. 業務で使用する Excel 操作は完備

Bind 後の微調整など、業務で使用する Excel 操作は完備しております。
どのライブラリでも I/F は変わりません。

// Bind 後に特定の範囲をグレーアウト
engine.SetBackColor(new SingleCell("E5"), Color.LightGray);

// テンプレートの崩れや、強調したい境界に罫線を引き直す
engine.DrawLine(new CellRange("A1:E10"), BorderPoint.Bottom, LineStyle.Thick);

// 列や行のサイズ調整も直感的に
engine.SetColumnWidth(new ColumnRange("B:D"), 15);
engine.SetRowHeight(new RowRange("1:3"), 25);

📚 予約語リファレンス

ExcelConductor は、テンプレート上の ${} で囲まれた予約語を解析してバインドします。

🔹 Scalar (単一項目)

特定のプロパティ値を埋め込みます。

${Name}
${Price|Format=#,##0}

Format の動作と型変換
テンプレートの書き方によって、出力結果の「型」の扱いが変わります。

  • 完全一致 (例:セルに ${Price} のみ記述)
    • パイプによる Format は適用されず、Excel 側のセルの書式設定が優先されます。
    • 数値型や日付型としてそのまま書き込まれるため、計算式などの対象として保持したい場合に適しています。
  • 部分一致 (例:セルに 価格:${Price|Format=#.##}円 と記述)
    • 指定した Format に基づき、文字列として置換されます。

🔹 VList (一覧 (縦) ) / HList (一覧 (横) )

コレクション (IEnumerable) を展開します。レコードの開始位置となるセルに記述してください。

${VList|Items|RowSpan=1|Mode=Copy}
${HList|Items|ColSpan=2|Mode=Insert}
オプション 説明 備考
Format リスト内の数値・日付に適用する一括フォーマット。 Scalar 専用
RowSpan 1 レコードが占有する行数 (多段ならここを増やすだけ) VList 専用
ColSpan 1 レコードが占有する列数 (多段ならここを増やすだけ) HList 専用
Mode Copy (既存行の書式を流用) または Insert (行を差し込みながら展開) VList/HList 専用

🌱 ExcelConductor が挑む領域

Excel を操作するライブラリは数多く存在しますが、
「実務帳票の本質を抽象化して扱う」 という領域はこれまで体系化できていませんでした。
開発者が向き合うべきはライブラリの API 仕様ではなく、Excel そのものの仕様であるべきです。

Excel 操作の本質を捉え、直感的な仕組みとして提供すること。
ExcelConductor はその領域に挑むために生まれた OSS です。


🚀 ExcelConductor を支える技術的特徴

本章は設計思想・Provider 実装者向けの説明です。

🔌 Provider 抽象化

特定の Excel ライブラリに依存しない設計を採用しています。
Core 層は Excel の論理構造だけを扱い、Provider は I/O のみを担当します。

🧭 完全なる 1-based (Excel 標準) 準拠

ExcelConductor の世界では、常に 1-based の純粋な座標体系 が保証されます。

  • シート:1 始まり (Sheet1 = 1)
  • 行:1 始まり
  • 列:1 始まり (または "A" 始まり)
  • 「0-based ライブラリ」と「1-based ライブラリ」の混在による 1 行ズレ (オフバイワン・エラー) を Core 層が水際で完全に遮断します。

🧪 検品済み物理座標の提供

Provider は Excel 操作の核心だけに集中できるよう設計されています。

  • Provider が受け取るのは、Core 層によって
    正規化・バリデーション・検疫 が完了した 「完全に安全なインデックス」 のみ。
  • Provider 実装者はガードを一切書く必要がありません。
    • シート名が正しいか
    • 座標が負数でないか
    • 範囲が逆転していないか

🌍 Culture の扱い

実務における「入力データの汚れ」と「出力の厳密さ」を両立させています。

  • 入力 (Read/Cast)
    全角数字、NBSP (不吉な空白) 、国ごとの日付形式などを自動吸収して .NET 型へ変換します。
  • 出力 (Bind)
    InvariantCulture でテンプレートの Format を適用し、意図しない文化圏依存の表記崩れを防ぎます。

⚠️ Limitations

🚫 ネストしたプロパティ (例:Order.Customer.Address) には対応していません

ExcelConductor は迷わない使い方と、直感的な I/F を徹底しております。
ネストプロパティは属性の設定方法が直感的ではなくなるため、サポートしておりません。


🛣️ Roadmap

ExcelConductor は「明示的」「壊れない設計」を軸に、実務帳票の生産性をさらに高めるための改善を続けます。

🧭 1. エラーメッセージとデバッグ性の向上

  • どのセルで何が起きたかをより明確に
  • テンプレートの不整合を早期に検出
  • 利用者が原因を特定しやすいガイドを追加

📚 2. サンプル・ドキュメントの拡充

  • よくある帳票パターンのテンプレート例
  • グラフ連動のサンプル
  • VList/HList のベストプラクティス
  • RowSpan/ColSpan の実務例

🔌 3. Provider の追加(NPOI 以外の選択肢)

  • ClosedXML / NPOI 以外の別エンジンでの動作を検討
  • .NET の環境に応じた柔軟な選択肢を提供

🤝 Contributing

ExcelConductor は拡張性を重視して設計されています。
特に Provider は差し替え可能な構造になっており、ClosedXML / NPOI 以外の Provider の追加も歓迎しています。
Issue や Pull Request も大歓迎です。


License

MIT License


🏢 About

ExcelConductor は、福岡を拠点とする開発チーム
Cyber Task Force (株式会社 CTF) によって開発・メンテナンスされています。

私たちは、単にコードを書くチームではありません。
「複雑な業務をいかに抽象化し、美しく堅牢な設計に落とし込むか」
その思考のプロセスと、現場の泥臭い課題を解決しきる完遂力が私たちの強みです。

「ExcelConductor を作れるチーム」 と一緒に、難易度の高い課題を解決しませんか?

🔗 株式会社 CTF
📧 contact@cybertaskforce.co.jp

About

出力も取込も「一撃」 Excel 帳票開発の常識を変える実務特化型エンジン

Topics

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages