チュートリアル

簡単にライブラリーを使用するためのチュートリアルコレクション

Super User

Super User

Python での Excel 書式設定チュートリアルイラスト

スプレッドシートを扱う際は、データそのものと同じくらい「見やすさ」も重要です。整った書式の Excel ファイルは、分析・共有・プレゼンテーションをよりスムーズにします。Excel 上で手作業でスタイルを整える代わりに、Python を使った Excel 書式設定 で自動化することで、作業時間を大幅に削減できます。

本記事では、ライブラリ Spire.XLS for Python を利用して Python で Excel を書式設定する方法 を紹介します。基礎的な書式設定から応用、さらに実際のレポート事例までをカバーし、効率的に操作できる主要なクラスやプロパティも解説します。

内容一覧:

なぜ Python で Excel を書式設定するのか

Excel を手作業で整えるのは時間がかかります。特に大規模なデータセットや動的にレポートを作成する場合は効率が悪くなります。Python による Excel 書式設定 を使うことで以下が可能になります:

  • 複数のブックに一貫したスタイルを適用できる
  • フォント、罫線、色などの繰り返し作業を自動化できる
  • ビジネスや研究向けにスタイル付きレポートをプログラムで生成できる
  • 作業時間を短縮しつつ正確性と見栄えを両立できる

Python を活用すれば、スプレッドシートにプロ仕様のスタイルを素早く適用できます。次に環境構築を見ていきましょう。

環境とプロジェクトの準備

本記事のチュートリアルを進めるには、Excel ファイルを操作するために設計されたライブラリ Spire.XLS for Python をインストールします。このライブラリは Excel 文書の作成、読み込み、編集、書式設定をプログラムで行うことができます。

Spire.XLS for Python のインストール

pip でインストールします:

pip install Spire.XLS

Python スクリプトにインポートします:

from spire.xls import *

Excel ワークブックの作成または読み込み

書式設定を始める前に、操作対象のワークブックを用意します。

新規作成:

workbook = Workbook()
sheet = workbook.Worksheets[0]

既存ファイルを読み込み:

workbook = Workbook()
workbook.LoadFromFile("入力.xlsx")
sheet = workbook.Worksheets[0]

書式設定を適用した後は保存します:

workbook.SaveToFile("output/書式設定済み出力.xlsx", ExcelVersion.Version2016)

準備ができたら書式設定の実例を見ていきます。

Python による Excel 基本書式設定

応用操作に進む前に、まず Excel 書式設定の基本をマスターしましょう。フォント、配置、罫線、背景色、列幅や行の高さ調整といった基本機能は、見やすく整ったスプレッドシートを作る土台となります。これらを理解しておくことで、複雑なスタイルも柔軟に組み合わせられるようになります。

1. フォントの設定

フォントの種類やサイズ、色、太字などを変更するのは最も頻繁に行う操作の一つです。Spire.XLS for Python では CellRange.Style.Font オブジェクトを通して制御します。

cell = sheet.Range[2, 2]
cell.Text = "書式設定の例"

cell.Style.Font.FontName = "メイリオ"
cell.Style.Font.Size = 14
cell.Style.Font.Color = Color.get_Blue()
cell.Style.Font.IsBold = True

セル内の文字をスタイル属性で直接変更できます。

2. 配置と折り返し

配置は HorizontalAlignmentVerticalAlignment プロパティで制御し、WrapText で長文をセル内に収めます。

cell = sheet.Range[4, 2]
cell.Text = "中央配置かつ折り返し表示"

cell.Style.HorizontalAlignment = HorizontalAlignType.Center
cell.Style.VerticalAlignment = VerticalAlignType.Center
cell.Style.WrapText = True

長い文字列でも読みやすく整列します。

3. 罫線の追加

Style.Borders コレクションで各辺に個別に罫線を設定できます。

cell = sheet.Range[6, 2]
cell.Text = "罫線の例"

cell.Style.Borders[BordersLineType.EdgeBottom].LineStyle = LineStyleType.Thin
cell.Style.Borders[BordersLineType.EdgeBottom].Color = Color.get_Black()

下側に黒の細線を追加します。

4. 背景色

背景色は Style.Color で設定し、見出しや重要項目を強調する際によく使います。

cell = sheet.Range[8, 2]
cell.Text = "背景色セル"
cell.Style.Color = Color.get_Yellow()

セルが目立つように塗りつぶされます。

5. 列幅と行の高さ

文字や罫線だけでなく、列幅や行高を調整することで見やすさが向上します。

# 列幅を指定
sheet.Columns[1].ColumnWidth = 20
# 行の高さを指定
sheet.Rows[7].RowHeight = 20

また、内容に合わせて自動調整も可能です:

  • Worksheet.AutoFitColumn(columnIndex) / Worksheet.AutoFitRow(rowIndex)
  • CellRange.AutoFitColumns() / CellRange.AutoFitRows()

これによりデータが収まりやすく整った表になります。

基本書式設定のプレビュー

実際の適用例は以下の通りです:

フォント、配置、罫線、背景色、列幅調整を適用した基本書式設定例

Pythonを使用したExcelのフォント設定についてさらに詳しく知りたい場合は、「PythonでExcelのフォントを設定・変更する方法」を参照してください。

Python による Excel 応用書式設定

個別のセルだけでなく範囲全体や再利用可能なスタイルも扱えます。セル範囲操作には CellRange、再利用スタイル定義には Workbook.Styles コレクションを使用します。

1. セルの結合

見出しやタイトルを作成する際に利用します。

range = sheet.Range[2, 2, 2, 4]
range.Merge()
range.Text = "四半期レポート"
range.Style.HorizontalAlignment = HorizontalAlignType.Center
range.RowHeight = 30

B2:D2 が結合され、中央揃えのタイトルが作成されます。

2. 組み込みスタイルの適用

Excel には既定のスタイルが用意されており、Spire.XLS から直接適用できます。

range.BuiltInStyle = BuiltInStyles.Heading1

すぐに「見出し 1」スタイルが適用されます。

3. カスタムスタイルの作成と適用

複数セルやシートに共通ルールを適用したい場合に有効です。

# カスタムスタイル作成
custom_style = workbook.Styles.Add("CustomStyle")
custom_style.Font.FontName = "游ゴシック"
custom_style.Font.Size = 12
custom_style.Font.Color = Color.get_DarkGreen()
custom_style.Borders[BordersLineType.EdgeTop].LineStyle = LineStyleType.MediumDashDot

# 適用
cell = sheet.Range[4, 2]
cell.Text = "カスタムスタイル適用"
cell.Style = custom_style

大規模データでも効率的にスタイル管理が可能です。

応用書式設定のプレビュー

結合セル、組み込みスタイル、カスタムスタイルの例:

結合セル、組み込みスタイル、カスタムスタイルを適用した例

Excel データをグラフで見やすく整える方法については、Python で Excel ワークシートにグラフを追加する方法をご参照ください。

Excel スタイル設定の主要 API

基礎と応用を見たところで、Excel 書式設定を可能にする 主要クラス・プロパティ・メソッド を整理します。これを理解すれば、柔軟で保守しやすいスクリプトを書けます。

クラス / プロパティ / メソッド 説明
Workbook / Worksheet Excel ファイルとシートを表す
Workbook.LoadFromFile() / SaveToFile() Excel ファイルの読み込みと保存
Workbook.Styles.Add() 再利用可能なカスタムスタイルの作成
CellRange 1つ以上のセルを表し、書式設定を適用
CellRange.Style フォント、配置、罫線、背景色、折り返しなどの書式情報
CellRange.Merge() 複数セルを結合
CellRange.BuiltInStyle 組み込みスタイルを適用
CellRange.BorderAround() / BorderInside() 範囲外側または内側に罫線を適用
CellRange.ColumnWidth / RowHeight 列幅や行高を調整
CellRange.NumberFormat 数値や日付、通貨の表示形式を設定

これらを組み合わせることで、フォント、罫線、配置、色、数値形式などを効率よく管理できます。詳細は Spire.XLS for Python API リファレンス をご覧ください。

実例:Python で年間売上レポートを整形

基礎と応用を学んだら、実際のケースに適用してみましょう。以下は 年間売上レポート を Python で生成する例です。地域ごとのデータを整理し、書式設定を組み合わせることで見やすくプロフェッショナルなレポートを作成します。

from spire.xls import *

workbook = Workbook()
sheet = workbook.Worksheets[0]
sheet.Name = "売上レポート"

# タイトル
title = sheet.Range[1, 1, 1, 7]
title.Merge()
title.Text = "2024 年年間売上レポート"
title.Style.Font.IsBold = True
title.Style.Font.Size = 16
title.Style.HorizontalAlignment = HorizontalAlignType.Center
title.Style.Color = Color.get_LightGray()
title.RowHeight = 30

# データ
data = [
    ["製品", "地域", "Q1", "Q2", "Q3", "Q4", "合計"],
    ["ノートPC", "北部", 1200, 1500, 1300, 1600, 5600],
    ["ノートPC", "南部", 1000, 1200, 1100, 1300, 4600],
    ["タブレット", "北部", 800, 950, 1000, 1200, 3950],
    ["タブレット", "南部", 700, 850, 900, 1000, 3450],
    ["スマートフォン", "北部", 2000, 2200, 2100, 2500, 8800],
    ["スマートフォン", "南部", 1800, 1900, 2000, 2200, 7900],
    ["アクセサリー", "全地域", 600, 750, 720, 900, 2970],
    ["", "", "", "", "", "総計", 39370]
]

for r in range(len(data)):
    for c in range(len(data[r])):
        sheet.Range[r+2, c+1].Text = str(data[r][c])

# ヘッダー書式
header = sheet.Range[2, 1, 2, 7]
header.Style.Font.IsBold = True
header.Style.Color = Color.get_LightBlue()
header.Style.HorizontalAlignment = HorizontalAlignType.Center
header.Style.Borders[BordersLineType.EdgeBottom].LineStyle = LineStyleType.Thin

# 数値列を通貨に設定
for row in range(3, 11):
    for col in range(3, 8):
        cell = sheet.Range[row, col]
        if cell.Text.isdigit():
            cell.NumberValue = float(cell.Text)
            cell.NumberFormat = "¥#,##0"

# 総計を強調
grand_total = sheet.Range[10, 7]
grand_total.Style.Color = Color.get_LightYellow()
grand_total.Style.Font.IsBold = True

# 1行目と2列目までを固定
sheet.FreezePanes(3, 2)

# 自動整列しやすいように適切なフォントを設定
sheet.AllocatedRange.Style.Font.FontName = "Yu Gothic UI"

# 列幅を自動調整
sheet.AllocatedRange.AutoFitColumns()

workbook.SaveToFile("output/年間売上レポート.xlsx", ExcelVersion.Version2016)

このスクリプトではタイトル結合、ヘッダーの罫線や色、通貨形式、総計の強調、ウィンドウ枠の固定、自動列幅調整など複数の書式を組み合わせています。自動化により読みやすく一貫したレポートを作成できます。

最終的な出力例:

書式付き年間売上レポートの例

まとめ

Python で Excel を書式設定することは、レポート作成を自動化し、データを見やすく提示する実践的な方法です。基本的なスタイルに加え、カスタムスタイルや列調整などの応用を組み合わせることで、洗練されたスプレッドシートを作成できます。

財務報告、研究データ、ビジネスダッシュボードなど、どのような場面でも Python による Excel 書式設定 は時間を節約しつつ品質を高めます。適切なスタイルやプロパティを使い分ければ、データだけでなくその伝え方もプロフェッショナルに仕上がります。

一時ライセンスを申請 して Spire.XLS for Python の全機能を試すか、Free Spire.XLS for Python を利用してすぐに始めることもできます。

FAQ - Python での Excel 書式設定

Q1: Python で Excel を書式設定できますか?

はい。Python にはフォント、色、罫線、配置、条件付き書式などを Excel ファイルにプログラムで適用できるライブラリがあります。

Q2: Python で書式設定を行う方法は?

Excel の書式設定には Spire.XLS for Python などのライブラリを使用できます。コードを通じてフォントの変更、配置の設定、列幅の調整、セルの結合、カスタムスタイルや組み込みスタイルの適用が可能です。

Q3: Python で Excel を編集できますか?

はい。Python は書式設定だけでなく、Excel ファイルの作成、読み込み、編集、保存も行えるため、動的なレポート作成やデータ自動化に役立ちます。

Q4: 繰り返し発生する Excel のスタイル作業を自動化する最適な方法は?

複数のブックやシートで書式ルールを統一するカスタムスタイルや再利用可能な関数を定義することです。これにより一貫性が保たれ、作業時間を短縮できます。

C# DataSet を Excel にエクスポートするイメージ(オフィスシーン)

C# 開発では、DataSet はインメモリでデータを管理するためによく利用されます。通常はデータベースクエリの結果やシステム連携の処理結果として使われ、さまざまな場面で C# から DataSet を Excel に出力 するニーズがあります。例えば、レポートの生成、非エンジニアへのデータ共有、将来のためのアーカイブなどです。

本記事では、C# で DataSet を Excel にエクスポート する方法を Spire.XLS for .NET を使って解説します。Excel ファイルの作成、複数 DataTable のシート分割出力、書式設定、大量データの扱いまでステップごとに紹介します。

本記事の内容:

1. DataSet の基礎と Excel エクスポートの環境準備

DataSet とは?

C# の DataSet は、構造化データをインメモリで保持するためのオブジェクトです。複数の DataTable を格納でき、行・列・リレーションを含むため、データベースに直接接続せずにリレーショナルデータを扱うのに便利です。

なぜ DataSet を Excel に出力するのか?

  • データ共有 – Excel は幅広く利用され、チーム間で簡単に共有可能。
  • データ分析 – Excel の数式・ピボット・グラフを直接利用できる。
  • アーカイブ – クエリ結果や加工データを可読性の高い形式で保存可能。

CSV やテキスト形式に比べ、Excel は リッチな書式複数シート、高い可読性を提供します。

環境準備

C# で DataSet を Excel に出力するには、Spire.XLS for .NET を利用します。NuGet でインストール可能です。

Install-Package Spire.XLS

必要な名前空間を追加します。

using Spire.Xls;
using System.Data;
using System.Drawing; // 色指定用

2. C# で DataSet から Excel ファイルを作成

DataSet を Excel に出力する基本ステップは、データ準備と Excel への書き込みです。実際にはデータベースや API から取得することが多いですが、ここでは理解しやすいようサンプル DataSet を作成し、各 DataTable を個別シートに出力する例を示します。

2.1 サンプル DataSet の作成

以下は C# で作成するサンプル DataSet です。従業員・部署・プロジェクトの 3 テーブルを持ち、int, string, DateTime, decimal 型を含みます。

using System;
using System.Data;

class Program
{
    static DataSet CreateSampleDataSet()
    {
        DataSet ds = new DataSet("CompanyData");

        // 社員テーブル
        DataTable employees = new DataTable("社員");
        employees.Columns.Add("社員ID", typeof(int));
        employees.Columns.Add("氏名", typeof(string));
        employees.Columns.Add("部署ID", typeof(int));
        employees.Columns.Add("入社日", typeof(DateTime));
        employees.Columns.Add("給与", typeof(decimal));

        employees.Rows.Add(1, "山田太郎", 101, new DateTime(2020, 5, 12), 5500.00m);
        employees.Rows.Add(2, "佐藤花子", 102, new DateTime(2019, 3, 8), 7200.50m);
        employees.Rows.Add(3, "鈴木一郎", 103, new DateTime(2021, 11, 2), 4800.75m);

        // 部署テーブル
        DataTable departments = new DataTable("部署");
        departments.Columns.Add("部署ID", typeof(int));
        departments.Columns.Add("部署名", typeof(string));
        departments.Rows.Add(101, "人事");
        departments.Rows.Add(102, "IT");
        departments.Rows.Add(103, "経理");

        // プロジェクトテーブル
        DataTable projects = new DataTable("プロジェクト");
        projects.Columns.Add("プロジェクトID", typeof(int));
        projects.Columns.Add("プロジェクト名", typeof(string));
        projects.Columns.Add("責任者ID", typeof(int));
        projects.Columns.Add("開始日", typeof(DateTime));
        projects.Rows.Add(1001, "採用システム", 1, new DateTime(2023, 1, 15));
        projects.Rows.Add(1002, "ERPアップグレード", 2, new DateTime(2023, 4, 10));
        projects.Rows.Add(1003, "予算計画", 3, new DateTime(2023, 7, 5));

        ds.Tables.Add(employees);
        ds.Tables.Add(departments);
        ds.Tables.Add(projects);

        return ds;
    }
}

2.2 DataSet を Excel ファイルに出力

準備した DataSet を Excel ファイルに書き出す手順です。Workbook を作成し、各 DataTable をシートに挿入して保存します。

using Spire.Xls;
using System.Data;

class Program
{
    static void Main()
    {
        DataSet ds = CreateSampleDataSet();

        Workbook workbook = new Workbook();
        workbook.Worksheets.Clear();  // 既存のシートを削除

        // 各 DataTable を別シートとして出力
        for (int i = 0; i < ds.Tables.Count; i++)
        {
            Worksheet sheet = workbook.Worksheets.Add(ds.Tables[i].TableName);

            sheet.InsertDataTable(ds.Tables[i], true, 1, 1);
            sheet.Name = ds.Tables[i].TableName; // シート名をテーブル名と一致させる
        }

        workbook.SaveToFile("DatasetToExcel.xlsx", ExcelVersion.Version2016);
    }
}

エクスポートの仕組み

  • DataTable が個別のワークシートとして出力されます。
  • InsertDataTable(DataTable table, bool columnHeaders, int row, int column) でデータの挿入開始セルを指定可能。
  • SaveToFile() で Excel ファイルとして保存します。

また、開始行・列を調整すれば、複数の DataTable を同じシートに配置することも可能です。

出力結果プレビュー

以下は 3 つの DataTable がシートに出力された Excel のプレビューです。

Employees・Departments・Projects シートを含む Excel 出力例

データベースから直接 Excel に出力する例については C# でデータベースを Excel にエクスポートする方法 を参照してください。

3. C# で Excel シートに書式を追加

生データだけではレポートとして不十分な場合があります。見やすさやプロフェッショナルな仕上がりにするために書式設定を行います。Spire.XLS ではフォントや背景色、罫線、数値や日付のフォーマットを簡単に設定できます。

using System.Drawing;
using Spire.Xls;

// 「Employees」シートを取得
Worksheet sheet1 = workbook.Worksheets["Employees"];

// 1) ヘッダーのスタイル設定 (A1:E1)
CellRange header = sheet1.AllocatedRange.Rows[0];
header.Style.Font.IsBold = true;
header.Style.Font.Size = 12;
header.Style.Font.Color = Color.White;
header.Style.Color = Color.SteelBlue;

// ヘッダー行の罫線
header.BorderAround(LineStyleType.Thin);

// 2) 列の数値フォーマット設定 (D列: HireDate, E列: Salary)
sheet1.AllocatedRange.Columns[3].Style.NumberFormat = "yyyy-mm-dd";
sheet1.AllocatedRange.Columns[4].Style.NumberFormat = "$#,##0.00";

// 3) データ部分にゼブラストライプ (A2:E4 を例示)
CellRange data = sheet1.Range["A2:E4"];
data.Style.Color = Color.FromArgb(245, 247, 250);
data.BorderAround(LineStyleType.Thin);

// フォント名を設定
sheet1.AllocatedRange.Style.Font.FontName = "Yu Gothic UI";

// 書式設定後に自動調整
sheet1.AllocatedRange.AutoFitColumns();
sheet1.AllocatedRange.AutoFitRows();

書式設定のポイント

  • Style.Font — 太字、サイズ、色などフォント設定。
  • Style.Color — セル背景色を指定。
  • BorderAround — セル範囲に罫線を描画。
  • NumberFormat — Excel の標準フォーマットを使用(日付・通貨など)。
  • AutoFitColumns() / AutoFitRows() — 内容に合わせて行・列を自動調整。

さらに詳細な設定は CellRangeCellStyle の API を参照してください。

書式適用後のプレビュー

青背景・白文字のヘッダー、罫線、日付や通貨のフォーマットが反映されています。

書式適用済みの Excel シートプレビュー

4. 大規模 DataSet のエクスポート対応

大量データを扱う場合は、パフォーマンスやメモリ使用量に注意が必要です。対策として:

  • シート分割 — 行数が制限に近づいた場合や論理的な区分がある場合に有効。
  • バッチ書き込み — テーブル単位・範囲単位で分割挿入する。
  • 軽量な書式 — 複雑なスタイル設定を減らし、ファイルサイズを抑制。
  • ストリーミング処理 — 必要に応じて全件を一度に読み込まずに処理する。

5. ボーナス: C# で Excel を DataSet に読み込む

エクスポートだけでなく、逆に Excel データを DataSet に読み込むケースも重要です。外部レポートのインポート、アプリケーションとの連携、DB 登録前の前処理などに役立ちます。

using System.Data;
using Spire.Xls;

class Program
{
    static DataSet ReadExcelIntoDataSet(string filePath)
    {
        DataSet ds = new DataSet();
        Workbook workbook = new Workbook();
        workbook.LoadFromFile(filePath);

        foreach (Worksheet sheet in workbook.Worksheets)
        {
            DataTable dt = sheet.ExportDataTable();
            dt.TableName = sheet.Name;
            ds.Tables.Add(dt);
        }

        return ds;
    }
}

ExportDataTable メソッドで各ワークシートを DataTable に変換し、シート名を TableName に割り当てて DataSet に追加します。これにより複数シートを一括でインメモリに統合できます。

Excel データをデータベースに保存する完全ワークフローについては C# で Excel を DB にインポートする方法 を参照してください。

まとめ

C# で DataSet を Excel にエクスポート することで、レポート作成・データ共有・分析が容易になります。Spire.XLS for .NET を使えば、DataSet から直接 Excel ファイルを生成し、書式設定、複数シート管理、大規模データ処理まで効率的に行えます。また、Excel から DataSet に読み込むことも可能で、アプリケーションやデータベースとの統合に役立ちます。

より高度な機能を試すには 無料一時ライセンスを申請 するか、小規模プロジェクト向けに Free Spire.XLS for .NET を利用できます。

FAQ: C# DataSet と Excel 連携

Q1: DataSet の複数 DataTable を Excel の別シートに出力できますか?

はい。ds.Tables をループし、それぞれに InsertDataTable を呼び出してシートを作成します。

Q2: 既存の Excel ファイルの特定シートに DataSet を出力できますか?

可能です。Workbook.LoadFromFile() でファイルを読み込み、対象シートに InsertDataTable を使って書き込みます。

Q3: DataSet から Excel にエクスポートする際、列のフォーマットやデータ型は保持されますか?

はい。DataSet のデータ型がそのまま出力されます。さらに日付や通貨などの書式を後から設定することもできます。

Q4: 10 万行以上の大規模 DataSet を扱うにはどうすればよいですか?

シート分割、バッチ挿入、複雑な書式を減らすことでパフォーマンスを改善できます。

JavaでPDFをCSVに変換 – 表を抽出してCSVとして保存

レポートや請求書、PDF形式で保存されたデータセットを扱う際、開発者はしばしばその表データをスプレッドシートやデータベース、分析ツールで再利用する必要があります。一般的な解決策は JavaでPDFをCSVに変換すること です。CSVは軽量で構造化され、ほぼすべてのプラットフォームで扱えるため非常に便利です。

テキストや画像の書き出しと異なり、PDFからCSVへの変換の本質は PDFから表を抽出しCSVとして保存すること です。Spire.PDF for Java を使えば、PDF内の表構造を検出して数行のコードでプログラム的にCSVとして出力できます。

この記事では、環境構築から表抽出、さらに複数ページや1ページ内の複数表など複雑なケースへの対応まで、JavaでのPDFからCSVへの変換手順 をステップごとに解説します。

本チュートリアルの内容

JavaでPDFをCSVに変換するための環境構築

JavaでPDFをCSVに変換する前に、開発環境を整える必要があります。適切なライブラリを選び、プロジェクトに追加しましょう。

Spire.PDF for Javaを選ぶ理由

PDFファイルにはCSV形式でのエクスポート機能が備わっていないため、プログラムによる表抽出が現実的なアプローチです。Spire.PDF for Java は、PDF内の表構造を検出し、直接CSVに保存できるAPIを提供しており、シンプルかつ効率的に変換を行えます。

Spire.PDF for Javaのインストール

Mavenを利用する場合は以下を追加します。

<repositories>
    <repository>
        <id>com.e-iceblue</id>
        <name>e-iceblue</name>
        <url>https://repo.e-iceblue.com/nexus/content/groups/public/</url>
    </repository>
</repositories>
<dependency>
    <groupId>e-iceblue</groupId>
    <artifactId>spire.pdf</artifactId>
    <version>11.8.3</version>
</dependency>

Mavenを使わない場合は、Spire.PDF for Javaパッケージをダウンロードし、JARファイルをプロジェクトのクラスパスに追加してください。

PDFから表を抽出してCSVに保存する

PDFをCSVに変換する最も実用的な方法は表の抽出です。Spire.PDF for Javaを使えば以下のステップで実現できます。

  1. PDFを読み込む
  2. PdfTableExtractor で各ページから表を検出
  3. 行ごとにセルの値を取得
  4. CSVファイルに出力

以下にJavaコードのサンプルを示します。

Javaコード例:PDFからCSVへの変換

import com.spire.pdf.*;
import com.spire.pdf.utilities.*;

import java.io.*;

public class PdfToCsvExample {
    public static void main(String[] args) throws Exception {
        // PDFドキュメントを読み込み
        PdfDocument pdf = new PdfDocument();
        pdf.loadFromFile("Sample.pdf");

        // 抽出したテキストを格納するStringBuilder
        StringBuilder sb = new StringBuilder();

        // ページごとに処理
        for (int i = 0; i < pdf.getPages().getCount(); i++) {
            PdfTableExtractor extractor = new PdfTableExtractor(pdf);
            PdfTable[] tableLists = extractor.extractTable(i);

            if (tableLists != null) {
                for (PdfTable table : tableLists) {
                    for (int row = 0; row < table.getRowCount(); row++) {
                        for (int col = 0; col < table.getColumnCount(); col++) {
                            // CSVフィールドを安全にエスケープ
                            String cellText = escapeCsvField(table.getText(row, col));
                            sb.append(cellText);

                            if (col < table.getColumnCount() - 1) {
                                sb.append(",");
                            }
                        }
                        sb.append("\n");
                    }
                }
            }
        }

        // CSVファイルに出力
        FileWriter writer = new FileWriter("output/PDFTable.csv");
        writer.write(sb.toString());
        writer.close();

        pdf.close();
        System.out.println("PDF内の表をCSVに正常にエクスポートしました。");
    }

    // CSVフィールドをエスケープするユーティリティメソッド
    private static String escapeCsvField(String text) {
        if (text == null) return "";

        // 改行を削除
        text = text.replaceAll("[\\n\\r]", "");

        // 特殊文字を含む場合はエスケープ
        if (text.contains(",") || text.contains(";") || text.contains("\"") || text.contains("\n")) {
            text = text.replace("\"", "\"\"");  // ダブルクォートをエスケープ
            text = "\"" + text + "\"";          // クォートで囲む
        }

        return text;
    }
}

コード解説

  • PdfDocument:PDFファイルをメモリに読み込む
  • PdfTableExtractor:ページごとの表を検出
  • PdfTable:行・列にアクセス可能
  • escapeCsvField():改行を削除し、特殊文字をエスケープ
  • StringBuilder:セルテキストをカンマ区切りで格納
  • 出力結果は「Output.csv」として保存され、Excelや任意のエディタで開けます

PDFから抽出した表をCSVに変換した例:

JavaでPDF表をCSVに変換した出力例

複雑なPDFからCSV変換のケースを処理する

実際のPDFには複数表、複数ページ、または不規則な表構造が含まれることが多いです。ここではそれらへの対応方法を紹介します。

1. 1ページに複数の表がある場合

extractTable(i) が返す PdfTable[] にはそのページで検出されたすべての表が含まれます。各表を個別のCSVに保存することも可能です。

for (int i = 0; i < pdf.getPages().getCount(); i++) {
    PdfTableExtractor extractor = new PdfTableExtractor(pdf);
    PdfTable[] tableLists = extractor.extractTable(i);

    if (tableLists != null) {
        for (int t = 0; t < tableLists.length; t++) {
            PdfTable table = tableLists[t];
            StringBuilder tableContent = new StringBuilder();

            for (int row = 0; row < table.getRowCount(); row++) {
                for (int col = 0; col < table.getColumnCount(); col++) {
                    tableContent.append(escapeCsvField(table.getText(row, col)));
                    if (col < table.getColumnCount() - 1) {
                        tableContent.append(",");
                    }
                }
                tableContent.append("\n");
            }

            FileWriter writer = new FileWriter("Table_Page" + i + "_Index" + t + ".csv");
            writer.write(tableContent.toString());
            writer.close();
        }
    }
}

1ページ内の複数表を個別CSVに保存した例:

Javaで1ページ内の複数表をCSVにエクスポート

2. 複数ページや大きな表の場合

表が複数ページにまたがる場合はページごとに繰り返し処理し、追記していくのがポイント です。

StringBuilder sb = new StringBuilder();

for (int i = 0; i < pdf.getPages().getCount(); i++) {
    PdfTableExtractor extractor = new PdfTableExtractor(pdf);
    PdfTable[] tables = extractor.extractTable(i);

    if (tables != null) {
        for (PdfTable table : tables) {
            for (int row = 0; row < table.getRowCount(); row++) {
                for (int col = 0; col < table.getColumnCount(); col++) {
                    sb.append(escapeCsvField(table.getText(row, col)));
                    if (col < table.getColumnCount() - 1) sb.append(",");
                }
                sb.append("\n");
            }
        }
    }
}

FileWriter writer = new FileWriter("MergedTables.csv");
writer.write(sb.toString());
writer.close();

複数ページにまたがる大きな表を1つのCSVに統合した例:

Javaで複数ページのPDF表をCSVに統合

3. フォーマットに関する制限

CSVはテキストデータのみを保持するため、結合セル・フォント・画像などの情報は失われます。書式を保持したい場合はExcel(.xlsx)にエクスポートする方法が適しています。詳細は JavaでPDF表をExcelにエクスポートする方法 を参照してください。

4. CSVの特殊文字処理

CSVではカンマ、セミコロン、ダブルクォート、改行などの特殊文字がファイル構造を壊す可能性があります。 上記のJava例では escapeCsvField メソッドで改行除去と適切なエスケープ処理を行っています。

さらに高度な処理が必要な場合は Spire.XLS for Java を利用して Excelワークシートにデータを書き込み、その後 CSVとして保存 すれば、特殊文字も自動処理され正しいCSVが得られます。

オープンソースの OpenCSVApache Commons CSV なども同様に特殊文字処理を自動で行える選択肢です。

まとめ

JavaでPDFをCSVに変換するとは、基本的に 表を抽出して構造化データとして保存すること を意味します。CSVは軽量で広くサポートされており、表形式データの保存や分析に最適です。Spire.PDF for Javaを導入し、この記事のコード例に従うことで、このプロセスを自動化でき、時間を節約し手作業を減らせます。

さらに高度な機能を試したい方は、無料評価ライセンスの申請 を行うか、小規模プロジェクトには Free Spire.PDF for Java を利用できます。

FAQ

Q: PDFをCSVファイルに変換できますか? A: はい。画像や装飾されたテキストは変換できませんが、表を抽出してCSVに保存することは可能です。

Q: JavaでPDFからデータを抽出する方法は? A: Spire.PDF for JavaのようなPDFライブラリを使えば、ドキュメント解析や表検出、CSVやExcelへのエクスポートが可能です。

Q: 最適なPDF to CSV変換方法は? A: Java開発者には、Spire.PDF for Javaのようなプログラム的な解決策が、手動ツールより柔軟で効率的です。

Q: JavaコードでPDFをExcelに変換する方法は? A: CSV出力と手順はほぼ同じで、カンマ区切りのテキストではなくExcel形式に保存することで、より多機能な利用が可能です。

C# PDF とバイトのワークフローの概要

C# 開発では、PDF をバイト配列として扱うケースがよくあります。たとえば、PDF 文書をデータベースに保存したり、API を通して送受信したり、ファイルシステムを使わずに完全にメモリ内で処理する必要がある場合です。このような場面では、C# で PDF とバイト配列を相互に変換する方法が重要になります。

本記事では、Spire.PDF for .NET を使用して、バイト配列から PDF を生成する方法、PDF をバイト配列に変換する方法、さらにはメモリ上で直接 PDF を編集する方法まで、手順を追って解説します。

読みたいところからジャンプ

なぜ C# で PDF とバイト配列を扱うのか?

byte[] をデータの受け渡し形式として利用することで、一時ファイルを避けられ、クラウドやコンテナ環境にも適したコードが書けます。

  • データベース保存(BLOB): PDF を生のバイトとして保存し、必要な時だけ復元。
  • Web API: HTTP 経由でディスクを介さずに PDF を送受信。
  • メモリ内処理: ストリーム上で変換や透かし挿入を完結。
  • セキュリティ・分離: ファイル I/O を最小限にし、一時ファイルのリスクを軽減。

準備: サンプルコードを実行する前に、Spire.PDF for .NET の NuGet パッケージを追加してください。

Install-Package Spire.PDF

インストール後は、byte[]Stream から読み込み、ページを編集し、出力をメモリやディスクに書き出せます。追加のコンバーターは不要です。

C# でバイト配列を PDF に変換する方法

API やメッセージキューから受け取った byte[] が PDF を表す場合、文書として展開し処理を行ったり、ディスクに保存したりする必要があります。Spire.PDF for .NET を使えば、一時ファイルを作成せずにメモリから直接ロードできます。

シナリオと手順: DB や API からの byte[] を受け取り、メモリ上で PdfDocument を構築し、必要なら基本情報を確認してから保存します。

using Spire.Pdf;
using System.IO;

class Program
{
    static void Main()
    {
        // 例: DB や API から取得した byte[]
        byte[] pdfBytes = File.ReadAllBytes("Sample.pdf");

        // 1) バイト配列からメモリ上に PDF をロード
        PdfDocument doc = new PdfDocument();
        doc.LoadFromBytes(pdfBytes);

        // 2) (任意)保存前にページ数などの基本情報を確認
        // int pageCount = doc.Pages.Count;

        // 3) ファイルに保存
        doc.SaveToFile("Output.pdf");
        doc.Close();
    }
}

下図はバイト配列から PDF への変換フローです。

bytes loaded into PdfDocument and saved as PDF in C# with Spire.PDF

ポイント:

  • LoadFromBytes(byte[]) で完全にメモリ上にロード。ファイル書き込み権限がない環境に最適。
  • ロード後に分岐して、検証・編集・ルーティングなども可能。
  • SaveToFile(string) で下流処理や保存用にディスクへ書き出し。

C# で PDF をバイト配列に変換する方法

逆方向として、PDF を byte[] に変換することで、データベース書き込み、キャッシュ、HTTP レスポンスでの送信が可能になります。Spire.PDF for .NET では、MemoryStream に直接書き込み、ToArray() でバイト配列に変換できます。

シナリオと手順: 既存の PDF を読み込み、MemoryStream に保存し、byte[] を抽出します。API のレスポンスや DB 保存に便利なパターンです。

using Spire.Pdf;
using System.IO;

class Program
{
    static void Main()
    {
        // 1) PDF をロード(ローカル、ネットワーク、リソースなど)
        PdfDocument doc = new PdfDocument();
        doc.LoadFromFile("Input.pdf");

        // 2) MemoryStream に保存してバイト配列を取得
        byte[] pdfBytes;
        using (var ms = new MemoryStream())
        {
            doc.SaveToStream(ms);
            pdfBytes = ms.ToArray();
        }

        doc.Close();

        // pdfBytes を DB 保存や API レスポンスとして利用可能
        // 例: return File(pdfBytes, "application/pdf");
    }
}

下図は PDF からバイト配列への変換フローです。

PDF loaded into PdfDocument, saved to MemoryStream, then bytes in C#

コードの要点:

  • SaveToStream → ToArray が、C# で一時ファイルを作らずに PDF をバイト配列化する標準的な方法。
  • 大きな PDF にも対応可能で、制約はメモリ量のみ。
  • ASP.NET ではコントローラや API の戻り値として直接返せる。

バイト配列から直接 PDF を作成・編集する方法

真価は、PDF を完全にメモリ上で編集できる点にあります。byte[] からロードし、テキストや画像を追加、透かしやフォーム入力を行い、編集結果を新しい byte[] として保存できます。ファイルレスの処理フローやマイクロサービスに最適です。

シナリオと手順: バイト配列から PDF をロードし、1 ページ目に小さなテキストを追加して、編集済みの文書を新しいバイト配列として出力します。

using Spire.Pdf;
using Spire.Pdf.Graphics;
using System.Drawing;
using System.IO;

class Program
{
    static void Main()
    {
        // 入力ソース(DB、API、ファイルなど)を byte[] で受け取る
        byte[] inputBytes = File.ReadAllBytes("Input.pdf");

        // 1) メモリ上にロード
        var doc = new PdfDocument();
        doc.LoadFromBytes(inputBytes);

        // 2) 編集: 1 ページ目に小さなテキストを追加
        PdfPageBase page = doc.Pages[0];
        page.Canvas.DrawString(
            "Edited in memory",
            new PdfTrueTypeFont(new Font("Yu Gothic UI", 14f), true),
            PdfBrushes.DarkBlue,
            new PointF(100, page.Size.Height - 100)
        );

        // 3) 編集済み PDF を新しい byte[] に保存
        byte[] editedBytes;
        using (var ms = new MemoryStream())
        {
            doc.SaveToStream(ms);
            editedBytes = ms.ToArray();
        }

        doc.Close();

        // editedBytes を DB 保存や API レスポンスとして利用可能
    }
}

下図は編集済み PDF の例です。

Edited PDF page with insrted text using C# in bytes

補足:

  • このパターンは テキスト・画像・透かし・注釈・フォーム入力 にもそのまま使える。
  • 再処理に備え、編集処理は冪等性を保つ(例: 透かしが重複しないようにチェック)。
  • ASP.NET ではレスポンス返却前の オンザフライ編集 にも便利。

ゼロから PDF を構築する手順については、C# で PDF 文書を作成する方法 を参照ください。

Spire.PDF for .NET を使う利点

バイト配列ワークフローに適した特徴をまとめると以下の通りです。

課題 Spire.PDF for .NET で得られるメリット
I/O の柔軟性 ファイルパス・Streambyte[] すべて同じ PdfDocument API で対応。
メモリ内編集 テキスト / 画像描画、注釈・フォーム管理、透かし追加など、一時ファイル不要。
サービス親和性 ASP.NET エンドポイントやバックグラウンド処理と簡潔に統合可能。
実運用対応 複数ページ PDF にも対応。ストリームでメモリ使用量を制御可能。
シンプルなコード ボイラープレート最小化。煩雑なバイト操作や脆弱な Interop を回避。

まとめ

本記事では、C# でバイト配列から PDF を生成する方法PDF をバイト配列に変換する方法、そして メモリ上で直接 PDF を編集する方法 を紹介しました。ストリームとバイト配列を活用することで、API 設計がシンプルになり、レスポンスが高速化し、データベースやクラウド環境にも適した処理フローを実現できます。Spire.PDF for .NET を利用すれば、ファイルレスかつ拡張性の高いワークフローを簡潔に構築できます。

機能を制限なく試したい場合は、30 日間の無料一時ライセンスを申請 してください。軽量なタスクには、Free Spire.PDF for .NET も利用できます。

よくある質問

ディスクに保存せず、C# でバイト配列から PDF を作成できますか? はい。LoadFromBytes でロードし、MemoryStream に保存するか、API から直接返却すれば、ディスク不要で処理できます。

C# で PDF をバイト配列に変換してデータベースに保存する方法は? PdfDocumentSaveToStream を実行し、MemoryStreamToArray() を呼び出します。その byte[] を BLOB として保存できます。

バイト配列として存在する PDF を編集できますか?

もちろん可能です。バイト配列からロードし、テキスト・画像・透かし・注釈・フォーム入力を行い、新しい byte[] に保存できます。

パフォーマンスや信頼性を高めるポイントは?

ストリームは早めに Dispose し、必要に応じてバッファを再利用します。操作やスレッドごとに新しい PdfDocument を生成してください。大きなファイルにはストリーム I/O を活用することで、メモリ使用量を安定させられます。

PDF文書はテキストだけでなく、画像も重要な要素として情報伝達に大きく貢献します。PDF内の画像を追加・置換・削除できれば、ビジュアル面の向上や古い画像の更新、コンテンツ内容の修正などに役立ちます。
本記事では、Spire.PDF for Python を使用して、PythonでPDF文書内の画像を追加、置換、削除する方法を解説します。

目次

Spire.PDF for Pythonのインストール

この機能を使用するには、Spire.PDF for Pythonとplum-dispatch v1.7.4が必要です。Windows環境では、以下のpipコマンドで簡単にインストールできます。

pip install Spire.PDF

または、Spire.PDF for Pythonのダウンロードページ から直接ダウンロードして、プロジェクトに追加することもできます。

PythonでPDF文書に画像を追加する

PDFページに画像を追加するには、PdfPage.Canvas.DrawImage() メソッドを使用します。手順は以下の通りです。

  • PdfDocument オブジェクトを作成する
  • PdfDocument.Pages.Add() メソッドでページを追加する
  • PdfImage.FromFile() メソッドで画像を読み込む
  • PdfPageBase.Canvas.DrawImage() メソッドでページ上に画像を描画する
  • PdfDocument.SaveToFile() メソッドで文書を保存する

コード例

from spire.pdf import *

# PdfDocumentインスタンスを作成
doc = PdfDocument()

# ページ余白を設定
doc.PageSettings.SetMargins(30.0, 30.0, 30.0, 30.0)

# ページを追加
page = doc.Pages.Add()

# 画像を読み込み
image = PdfImage.FromFile('C:/Users/Administrator/Desktop/logo.png')

# 文書内の画像サイズを指定
width = image.Width * 0.70
height = image.Height * 0.70

# 画像を描画する座標を指定
x = 10.0
y = 30.0

# ページ上に画像を描画
page.Canvas.DrawImage(image, x, y, width, height)

# PDFを保存
doc.SaveToFile("output/AddImage.pdf", FileFormat.PDF)

出力結果のPDFファイル:

PythonでPDFに画像を追加

PythonでPDF文書内の画像を置換する

Spire.PDF for Pythonには、特定ページ内の画像を取得・操作できる PdfImageHelper クラスがあります。画像を新しいものに置き換えるには、PdfImageHelper.ReplaceImage() メソッドを使用します。手順は以下の通りです。

  • PdfDocument オブジェクトを作成
  • PdfDocument.LoadFromFile() メソッドでPDFを読み込む
  • PdfDocument.Pages[index] で特定のページを取得
  • PdfImage.FromFile() で新しい画像を読み込む
  • PdfImageHelper を作成し、PdfImageHelper.GetImagesInfo() でページ内の画像情報を取得
  • PdfImageHelper.ReplaceImage() で既存の画像を新しい画像に置換
  • PdfDocument.SaveToFile() で保存

コード例

from spire.pdf import *

# PdfDocumentインスタンスを作成
doc = PdfDocument()

# PDFを読み込み
doc.LoadFromFile('C:/Users/Administrator/Desktop/input.pdf')

# 1ページ目を取得
page = doc.Pages[0]

# 新しい画像を読み込み
image = PdfImage.FromFile('C:/Users/Administrator/Desktop/newImage.png')

# PdfImageHelperインスタンスを作成
imageHelper = PdfImageHelper()

# ページ内の画像情報を取得
imageInfo = imageHelper.GetImagesInfo(page)

# 最初の画像を新しい画像に置換
imageHelper.ReplaceImage(imageInfo[0], image)

# PDFを保存
doc.SaveToFile("output/ReplaceImage.pdf", FileFormat.PDF)

出力結果のPDFファイル:

PythonでPDFの画像を置換

PythonでPDF文書内の画像を削除する

特定ページの画像を削除するには、PdfPageBase.DeleteImage(index) メソッドを使用します。手順は以下の通りです。

  • PdfDocument オブジェクトを作成
  • PdfDocument.LoadFromFile() メソッドでPDFを読み込む
  • PdfDocument.Pages[index] でページを取得
  • PdfPageBase.DeleteImage(index) メソッドで指定したインデックスの画像を削除
  • PdfDocument.SaveToFile() で保存

コード例

from spire.pdf.common import *
from spire.pdf import *

# PdfDocumentインスタンスを作成
doc = PdfDocument()

# PDFを読み込み
doc.LoadFromFile('C:/Users/Administrator/Desktop/input.pdf')

# 1ページ目を取得
page = doc.Pages[0]

# 最初の画像を削除
page.DeleteImage(0)

# PDFを保存
doc.SaveToFile('output/DeleteImage.pdf', FileFormat.PDF)

一時ライセンスの申請

生成されたPDFから評価用メッセージを削除したい場合や、機能制限を解除したい場合は、30日間の試用ライセンスを申請してください。

ASP.NET CoreでC#とSpire.Barcodeを使ってQRコードとバーコードをスキャン

現在、多くの業務アプリケーションでは ASP.NET 環境で QR コードやバーコードをスキャン するニーズが高まっています。チケット認証や決済、在庫管理などで、ASP.NET の QR コードスキャナーやバーコード読み取り機能を導入すると、Web/エンタープライズシステムの効率と精度が大きく向上します。

本チュートリアルでは、Spire.Barcode for .NET を使用し、C# で ASP.NET にバーコードスキャン機能を実装する手順を解説します。画像アップロードから QR/各種バーコードの読み取りまでをカバーし、高い認識精度と既存プロジェクトへの容易な統合を実現します。

ガイド構成

1. プロジェクトの準備

ステップ 1:プロジェクトの作成

スキャン機能の土台となる ASP.NET Core Razor Pages プロジェクトを作成します。以下のコマンド(または Visual Studio での作成)を使用します。

dotnet new webapp -n QrBarcodeScanner
cd QrBarcodeScanner

ステップ 2:Spire.Barcode for .NET のインストール

幅広いバーコード形式をデコードできる Spire.Barcode for .NET の NuGet パッケージをインストールします。NuGet パッケージ マネージャーから検索するか、次のコマンドを実行します。

dotnet add package Spire.Barcode

Spire.Barcode for .NET は、QR コードに加え Code128、EAN-13、Code39 など多数の形式をサポートします。追加の画像処理ライブラリは不要で、ASP.NET Core へ簡単に組み込めます。対応形式の一覧は BarcodeType API リファレンス を参照してください。

小規模用途には Free Spire.Barcode for .NET も利用できます。

2. ASP.NETでC#によるQRコード・バーコードスキャン機能の実装

信頼性の高いスキャン機能は、次の 2 要素で構成します。

  • アップロード画像を処理・デコードする バックエンドロジック
  • ユーザーが画像をアップロードできる シンプルな Web インターフェイス

まずバックエンド実装でスキャン処理を確実に動かし、その後最小構成の Razor Pages フロントエンドに接続します。

バックエンド:Spire.Barcode によるスキャン処理

アップロードファイルをメモリに読み込み、Spire.Barcode で処理します(MemoryStream またはファイルパスのいずれも可)。スキャン結果は配列で返却されます。形式ごとの分岐は不要で、QR/各種バーコードを一括認識できます。

Index.cshtml.cs

using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;
using Spire.Barcode;

public class IndexModel : PageModel
{
    [BindProperty]
    public IFormFile Upload { get; set; }  // アップロードされたファイル

    public string Result { get; set; }     // スキャン結果
    public string UploadedImageBase64 { get; set; } // プレビュー用 Base64 文字列

    public void OnPost()
    {
        if (Upload != null && Upload.Length > 0)
        {
            using (var ms = new MemoryStream())
            {
                // ファイルをメモリに読み込む
                Upload.CopyTo(ms);

                // HTML <img> 表示用に Base64 へ変換
                UploadedImageBase64 = "data:" + Upload.ContentType + ";base64," +
                                      Convert.ToBase64String(ms.ToArray());

                // ストリーム位置を先頭に戻す
                ms.Position = 0;

                // バーコード/QR コードをスキャン
                try
                {
                    string[] scanned = BarcodeScanner.Scan(ms);
                    Result = scanned != null && scanned.Length > 0
                        ? string.Join(", ", scanned)
                        : "コードが検出されませんでした。";
                }
                catch (Exception ex)
                {
                    Result = "スキャン中にエラーが発生しました: " + ex.Message;
                }
            }
        }
    }
}

主なクラスとメソッド

  • BarcodeScanner:QR/バーコードをデコードする静的クラス

  • BarcodeScanner.Scan(Stream imageStream):ストリームから直接スキャンし、検出文字列の配列を返します(1 枚の画像内に複数コードがある場合も対応)。

  • 補助メソッド(任意)

    • BarcodeScanner.Scan(string imagePath):ファイルパスでスキャンします。
    • BarcodeScanner.ScanInfo(string imagePath):種類・位置・データなど追加情報を含む結果を取得します。

要件に応じて使い分けできます。

フロントエンド:アップロード&結果表示 UI

以下は、画像をアップロードしてスキャン結果を表示する簡易 UI です。アップロード後にプレビューと認識結果を表示し、ワンクリックでコピーできます。検証を素早く行えるよう、最低限のスタイルにしています。

Index.cshtml

@page
@model IndexModel
@{
    ViewData["Title"] = "QR & バーコードスキャナー";
}

<div style="max-width:420px;margin:40px auto;padding:20px;border:1px solid #ccc;border-radius:8px;background:#f9f9f9;">
    <h2 style="font-size:1.5rem;">QR & バーコードスキャナー</h2>
    <form method="post" enctype="multipart/form-data" id="uploadForm">
        <input type="file" name="upload" accept="image/*" required onchange="this.form.submit()" style="margin:10px 0;" />
    </form>

    @if (!string.IsNullOrEmpty(Model.UploadedImageBase64))
    {
        <div style="margin-top:15px;text-align:center;">
            <img src="@Model.UploadedImageBase64" style="width:300px;height:300px;object-fit:contain;border:1px solid #ddd;background:#fff;" />
        </div>
    }

    @if (!string.IsNullOrEmpty(Model.Result))
    {
        <div style="margin-top:15px;padding:10px;background:#e8f5e9;border-radius:6px;">
            <b>スキャン結果:</b>
            <p id="scanText">@Model.Result</p>
            <button type="button" onclick="navigator.clipboard.writeText(scanText.innerText)" style="background:#28a745;color:#fff;padding:6px 10px;border:none;border-radius:4px;">コピー</button>
        </div>
    }
</div>

以下は、QR コードと Code128 バーコードの両方を認識した後の画面イメージです。結果表示とワンクリックコピーが利用できます。

ASP.NET Core QRコードとCode128バーコードのスキャン結果表示例

この ASP.NET Core アプリは、アップロード画像から QR コードおよび各種バーコードをスキャンできます。コード生成が必要な場合は、ASP.NET Core で QR コードを生成する方法 も参照してください。

3. テストとトラブルシューティング

アプリを実行したら、次のような画像で動作確認を行います。

  • URL またはプレーンテキストを含む QR コード画像
  • Code128EAN-13 などの バーコード画像

認識がうまくいかない場合のチェックポイント:

  • コントラストが高く、歪みの少ない画像を使用します。
  • 解像度は極端に大きすぎ/小さすぎないものにします。
  • JPG / PNG / BMP など複数形式で試します。
  • 反射・映り込み・暗所などを避けます。
  • 1 枚の画像に複数コードがある場合は、各コードの間隔を十分に空けて認識精度を高めます。

回帰テスト向けに、サンプルの QR/バーコード画像ライブラリを小規模に用意しておくと便利です。

4. 他の .NET アプリケーションへの応用

本チュートリアルのスキャンロジックは アプリ種別に依存しません。画像の受け渡し方法だけを変えれば、以下のような環境でも同じ BarcodeScanner.Scan() を再利用できます。

  • ASP.NET Core MVC コントローラーWeb API エンドポイント
  • WinForms / WPF などのデスクトップアプリ
  • コンソールユーティリティ(バッチ処理)

例:最小構成の ASP.NET Core Web API HTTP POST で画像ファイルを受け取り、JSON で結果を返します。

[ApiController]
[Route("api/[controller]")]
public class ScanController : ControllerBase
{
    [HttpPost]
    public IActionResult Scan(IFormFile file)
    {
        if (file == null) return BadRequest("No file uploaded");
        using var ms = new MemoryStream();
        file.CopyTo(ms);
        ms.Position = 0;
        string[] results = BarcodeScanner.Scan(ms);
        return Ok(results);
    }
}

例:コンソールアプリ ローカル画像をスキャンして結果を出力します。

string[] result = BarcodeScanner.Scan(@"C:\path\to\image.png");
Console.WriteLine(string.Join(", ", result));

この柔軟性により、既存/新規の .NET プロジェクトへ QR/バーコードスキャンを素早く追加できます。

5. まとめ

本記事では、Spire.Barcode for .NET を用いて ASP.NET Core に QR/バーコードスキャン機能を実装する手順 を解説しました。画像を受け取り、デコードし、結果を表示するまでの流れをシンプルに構築でき、EC、チケット、ドキュメント認証など多様な業務シナリオに応用できます。

高度な要件に対しては、認識処理のカスタマイズや複数画像形式・バーコード種類への詳細対応など、追加機能も利用可能です。すべての高度機能を解放するには、無償評価ライセンスの申請 を行ってください。

今すぐ Spire.Barcode for .NET をダウンロード して、ASP.NET 向けのバーコードスキャン機能を実装しましょう。

Spire.Barcode for .NETを使ってASP.NET C#でQRコードを生成

QRコードは、認証や非接触決済、URL・連絡先情報の共有など、現代のWebアプリケーションに欠かせない要素となっています。 ASP.NET を使った開発においても、C#でQRコードを生成する機能は、実用的かつ頻繁に求められる機能の一つです。

本記事では、Spire.Barcode for .NET を用いて、ASP.NET(Razor Pagesベース)でQRコードを生成する方法を、実際のコードを交えながら丁寧に解説します。紹介する手法は、MVCやWeb API、Web Formsといった他のASP.NETプロジェクトにも応用可能です。

目次

1. プロジェクトの準備と依存関係

必要な環境:

以下の環境が必要です:

  • Visual Studio 2019 以降
  • .NET 6 以降
  • ASP.NET Core Web アプリ(Razor Pages テンプレート)
  • NuGetパッケージ:Spire.Barcode for .NET

ライブラリのインストール:

NuGet パッケージマネージャーコンソールから以下のコマンドでインストールします:

Install-Package Spire.Barcode

Spire.Barcode は、外部APIを使用せずにQRコードをメモリ上で生成できる、完全な.NET向けバーコードライブラリです。小規模なプロジェクトであれば、Free Spire.Barcode for .NET の利用も可能です。

2. ASP.NETでQRコードを生成(C#)

このセクションでは、ASP.NET Core Razor Pages プロジェクトを使って、QRコード生成機能を実装する方法を解説します。

ステップ1:PageModelにQRコード生成ロジックを追加

以下は、Index.cshtml.cs ファイルに記述するC#コードです。ユーザーの入力を受け取り、Spire.Barcodeを使ってQRコードを生成し、それをBase64文字列としてフロントエンドに返します。

using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;
using Spire.Barcode;

public class IndexModel : PageModel
{
    [BindProperty]
    public string InputData { get; set; }

    public string QrCodeBase64 { get; set; }

    public void OnPost()
    {
        if (!string.IsNullOrWhiteSpace(InputData))
        {
            QrCodeBase64 = GenerateQrCodeBase64(InputData);
        }
    }
    
    private string GenerateQrCodeBase64(string input)
    {
        var settings = new BarcodeSettings
        {
            Type = BarCodeType.QRCode,            // QRコードの種類
            Data = input,                         // エンコードするメインデータ
            Data2D = input,                       // 2次元バーコード用に必要(通常は Data と同じ)
            QRCodeDataMode = QRCodeDataMode.Byte, // バイトモード(多言語コンテンツに対応)
            QRCodeECL = QRCodeECL.M,              // 中レベルの誤り訂正(15%)
            X = 3,                                // モジュールサイズ(画像の寸法に影響)
            ShowText = false,                     // デフォルトのバーコードテキストを非表示
            ShowBottomText = true,                // カスタムの下部テキストを表示
            BottomText = input                    // QRコードの下に表示するテキスト
        };

        var generator = new BarCodeGenerator(settings);
        using var ms = new MemoryStream();
        var qrImage = generator.GenerateImage();
        qrImage.Save(ms, System.Drawing.Imaging.ImageFormat.Png);
        return Convert.ToBase64String(ms.ToArray());
    }
}

ポイント:

  • BarcodeSettings でQRコードの設定(内容、誤り訂正レベル、表示文字など)を定義
  • GenerateImage() でQRコード画像を生成
  • Base64文字列に変換することで、ファイル保存せずにHTML上に直接表示が可能

ステップ2:QRコード表示用のRazorページを作成

以下は、Index.cshtml のマークアップです。入力フォーム、QRコードの表示、画像のダウンロードリンクを含みます。

@page
@model IndexModel
@{
    ViewData["Title"] = "QRコードジェネレーター";
}

<h2>QRコードジェネレーター</h2>

<form method="post">
    <label for="InputData">テキストまたはURLを入力してください:</label>
    <input type="text" id="InputData" name="InputData" style="width:300px;" required />
    <button type="submit">QRコードを生成</button>
</form>

@if (!string.IsNullOrEmpty(Model.QrCodeBase64))
{
    <div style="margin-top:20px">
        <img src="data:image/png;base64,@Model.QrCodeBase64" alt="QRコード" />
        <br />
        <a href="data:image/png;base64,@Model.QrCodeBase64" download="qrcode.png"
           style="
              display: inline-block;
              margin-top: 10px;
              padding: 8px 16px;
              background-color: #0078D7;
              color: white;
              text-decoration: none;
              border-radius: 4px;
              font-weight: 600;
              cursor: pointer;
           ">
           QRコードをダウンロード
        </a>
    </div>
}

QRコードは Base64 形式の data: URI を使ってブラウザに直接表示され、ダウンロードも可能です。

実行例は以下の通りです:

ASP.NET Core Razor Pageで生成されたQRコード

QRコードのスキャン機能が必要な場合は、C#でQRコードを読み取る方法をご参照ください。

3. QRコードの出力をカスタマイズする

BarcodeSettings クラスを使って、QRコードの見た目や動作を柔軟に調整できます:

プロパティ 機能説明
QRCodeDataMode テキストのエンコードモード QRCodeDataMode.Byte
QRCodeECL 誤り訂正レベル QRCodeECL.H
X モジュールのサイズ(解像度) settings.X = 6
ImageWidth/Height 画像の幅・高さを指定 settings.ImageWidth = 300
ForeColor 色を変更 settings.ForeColor = Color.Blue
ShowText バーコードの文字を表示/非表示 settings.ShowText = false
BottomText カスタムテキストを下部に表示 settings.BottomText = "スキャン"
ShowBottomText 下部テキストの表示切り替え settings.ShowBottomText = true
QRCodeLogoImage ロゴ画像を中央に挿入 settings.QRCodeLogoImage = Image.FromFile("logo.png")

詳細な仕様については BarcodeSettings APIドキュメント をご覧ください。

4. MVC・Web API・Web Formsへの応用

このQRコード生成ロジックは、Razor Pages以外のASP.NETプロジェクトにも簡単に応用できます。

MVCの場合:

コントローラーに以下のようなアクションを追加します:

public class QrController : Controller
{
    public ActionResult Generate(string data)
    {
        var settings = new BarcodeSettings
        {
            Type = BarCodeType.QRCode,
            Data = data,
            QRCodeDataMode = QRCodeDataMode.Byte,
            QRCodeECL = QRCodeECL.M,
            X = 5
        };

        var generator = new BarCodeGenerator(settings);
        using var ms = new MemoryStream();
        generator.GenerateImage().Save(ms, System.Drawing.Imaging.ImageFormat.Png);
        return File(ms.ToArray(), "image/png");
    }
}

Web APIの場合:

以下のように GET エンドポイントを作成できます:

[ApiController]
[Route("api/[controller]")]
public class QrApiController : ControllerBase
{
    [HttpGet("generate")]
    public IActionResult GetQr(string data)
    {
        var settings = new BarcodeSettings
        {
            Type = BarCodeType.QRCode,
            Data = data
        };

        var generator = new BarCodeGenerator(settings);
        using var ms = new MemoryStream();
        generator.GenerateImage().Save(ms, System.Drawing.Imaging.ImageFormat.Png);
        return File(ms.ToArray(), "image/png");
    }
}

React や Vue などのフロントエンドからAPIとして呼び出すのに最適です。

Web Formsの場合:

コードビハインドで以下のように処理可能です:

protected void btnGenerate_Click(object sender, EventArgs e)
{
    var settings = new BarcodeSettings
    {
        Type = BarCodeType.QRCode,
        Data = txtInput.Text
    };

    var generator = new BarCodeGenerator(settings);
    using var ms = new MemoryStream();
    generator.GenerateImage().Save(ms, System.Drawing.Imaging.ImageFormat.Png);
    imgQR.ImageUrl = "data:image/png;base64," + Convert.ToBase64String(ms.ToArray());
}

QRコード画像を <asp:Image> コントロールに埋め込んで表示します。

5. まとめ

Spire.Barcode for .NET を使えば、Razor Pages、MVC、Web API、Web Forms など、すべての ASP.NET プロジェクトにおいて、QRコードの生成とカスタマイズが簡単に実装できます。

画像をBase64文字列で扱うことで、ファイル保存や管理が不要になり、展開や保守もシンプルになります。 認証システム、チケット発行、連絡先共有といったさまざまな用途に対応できる、信頼性の高いアプローチです。

よくある質問(FAQ)

Q: 日本語やアラビア語などの文字に対応していますか? A: はい。QRCodeDataMode.Byte を使用すればUnicode対応可能です。

Q: QRコードのサイズや色は変更できますか? A: 可能です。XForeColorImageWidth などのプロパティを使って調整できます。

Q: このソリューションは完全にオフラインで動作しますか? A: はい。外部APIへの接続なしでローカルで完結します。

Q: Web API経由でQRコード生成機能を提供できますか? A: はい。ASP.NET Web API を使って他のアプリに画像を提供できます。

C#でデータベースからExcelにエクスポートする例

企業向けアプリケーション開発では、Excelは技術者と業務担当者の間で構造化データをやり取りするための橋渡しとしてよく利用されます。柔軟なフォーマット、共有の容易さ、そして利用者に馴染みがある点から、データベースのデータをExcelファイルにエクスポートする処理は、レポート作成、監査履歴の管理、データ移行、臨時分析などの場面で頻繁に行われます。

本記事では、Spire.XLS for .NET を使用して C#からデータベースのレコードを効率的にExcelファイルへエクスポートする方法を解説します。サンプルはSQL Serverデータベースを使用していますが、SQLite、MySQL、Oracleなどの他のリレーショナルデータベースにも、接続方法を変更するだけで同様の手順が適用できます。

目次

準備

コーディングを始める前に、開発環境を整えてください。

  • .NETバージョン:.NET Framework、.NET Core、.NET 6、.NET 8に対応

  • IDE:Visual Studio(Community Edition以上)

  • データベース:本記事では SQL Server Express を使用(Windows認証を利用。SQL認証も可)

  • 必要なライブラリ

サンプルデータベース

以下のSQLスクリプトをSQL Server Expressで実行すると、Employeesテーブルが作成され、テストデータが挿入されます。

CREATE TABLE Employees (
    Id INT PRIMARY KEY IDENTITY,
    Name NVARCHAR(100) NOT NULL,
    Department NVARCHAR(50) NOT NULL,
    Position NVARCHAR(50),
    HireDate DATE NOT NULL,
    Salary DECIMAL(10, 2) NOT NULL,
    IsFullTime BIT NOT NULL
);

INSERT INTO Employees (Name, Department, Position, HireDate, Salary, IsFullTime) VALUES
(N'佐藤太郎', N'人事部', N'人事マネージャー', '2018-05-01', 5500.00, 1),
(N'鈴木一郎', N'情報技術部', N'ソフトウェアエンジニア', '2020-09-15', 7200.50, 1),
(N'高橋花子', N'経理部', N'会計士', '2019-11-20', 6300.75, 0),
(N'田中美咲', N'マーケティング部', N'コンテンツスペシャリスト', '2021-02-10', 4800.00, 1);

MySQLやSQLiteを使用する場合は、SQL構文や接続文字列を変更するだけで、エクスポートの基本ロジックは変わりません。

C#でデータベースデータをExcelにエクスポートする手順

1. データベース接続を確立する

SQL Server Expressの場合、SqlConnectionを使って接続します。

string connectionString = @"Data Source=YourServer\SQLEXPRESS;Initial Catalog=YourDatabaseName;Integrated Security=True;";
  • Windows認証Integrated Security=True
  • SQL認証User ID=yourUsername;Password=yourPassword;Encrypt=True;TrustServerCertificate=True

2. DataTableにデータを読み込む

SqlDataAdapterを利用してクエリを実行し、DataTableに結果を格納します。

using System.Data;
using Microsoft.Data.SqlClient;

DataTable dataTable = new DataTable();
using (SqlConnection conn = new SqlConnection(connectionString))
{
    conn.Open();
    string query = "SELECT * FROM Employees";
    using (SqlDataAdapter adapter = new SqlDataAdapter(query, conn))
    {
        adapter.Fill(dataTable);
    }
}

3. Spire.XLSでExcelにエクスポートする

using Spire.Xls;

Workbook workbook = new Workbook();
workbook.Worksheets.Clear();
Worksheet sheet = workbook.Worksheets.Add("Employees");

// 1行1列目からDataTableのデータを挿入(列名も含む)
sheet.InsertDataTable(dataTable, true, 1, 1);

// Excel xlsx形式で保存
workbook.SaveToFile("Employees.xlsx", ExcelVersion.Version2013);

主なメソッド

  • InsertDataTable(DataTable table, bool columnHeaders, int firstRow, int firstColumn)

    • columnHeaders=true:列名を1行目に出力
    • firstRow / firstColumn:データの開始位置(1ベース)
  • SaveToFile.xlsx.xls.csvなどの形式で保存可能。ストリームへの保存も対応

SQLデータをExcelにエクスポート

Excelの書式を整える(任意だが推奨)

エクスポート後、見やすくするために以下のように書式設定が可能です。

// ヘッダー行のスタイル
sheet.Rows[0].Style.Font.IsBold = true;
sheet.Rows[0].Style.Font.Size = 14;
sheet.Rows[0].Style.HorizontalAlignment = HorizontalAlignType.Center;
sheet.Rows[0].Style.Color = System.Drawing.Color.LightGray;

// データ行のスタイル
for (int i = 1; i < sheet.Rows.Count(); i++)
{
    var dataRow = sheet.Rows[i];
    dataRow.Style.Font.Size = 12;
    dataRow.Style.HorizontalAlignment = HorizontalAlignType.Left;
}

// 全体のフォント設定
sheet.AllocatedRange.Style.Font.FontName = "Microsoft YaHei";

// 枠線追加
sheet.AllocatedRange.BorderAround(LineStyleType.Thin, System.Drawing.Color.Black);
sheet.AllocatedRange.BorderInside(LineStyleType.Medium, System.Drawing.Color.Black);

// 列幅自動調整
sheet.AllocatedRange.AutoFitColumns();

書式設定後のExcel

数値フォーマットの詳細は:C#でExcelの数値フォーマットを設定する方法を参照してください。

その他のデータ取得方法

DataTable以外にも、以下の方法でデータを取得できます。

  • Entity Frameworkの利用

    var employees = dbContext.Employees.ToList();
    

    その後、コレクションをDataTableに変換するか、1行ずつExcelに書き込みます。

  • ストアドプロシージャの呼び出し

    SqlCommand cmd = new SqlCommand("GetEmployees", conn);
    cmd.CommandType = CommandType.StoredProcedure;
    
  • SQLite / MySQL / Oracleの利用 接続タイプとドライバ(Microsoft.Data.SqliteMySql.Dataなど)を変更するだけで、他は同じロジックでエクスポート可能。

Excelからデータベースへのインポートが必要な場合は、Excelとデータベース間のデータインポート/エクスポートを参照してください。

よくある問題と対処方法

問題 主な原因と解決策
Excelファイルが空 エクスポート前にDataTableに正しくデータが格納されているか確認
ファイルが保存できない 保存先のパスが存在し、書き込み権限があるか確認
データベースに接続できない サーバーが起動しているか、接続文字列が正しいか確認
特殊文字が文字化けする データベースの列型をNVARCHARにし、ExcelではUnicode対応フォントを使用
認証エラー Windows認証はIntegrated Security=True、SQL認証はユーザー名とパスワードを指定

まとめ

Spire.XLS for .NETを使えば、C#からデータベースのデータを迅速にExcelにエクスポートできます。Microsoft Officeのインストールは不要で、大量データ、書式設定、複数形式のファイル出力にも対応しています。

この方法は、スケジュール実行、バックグラウンドサービス、Webアプリケーションなどで、自動的なデータエクスポートや配信に活用できます。

全機能を試したい場合は無料の一時ライセンス申請をご利用ください。小規模プロジェクトにはFree Spire.XLS for .NETでも基本機能を利用可能です。

FAQ

Q:C#でSQLデータをExcelにエクスポートする方法は?

A:SqlConnectionでデータをDataTableに読み込み、Spire.XLSのInsertDataTable()を呼び出します。

Q:SQLiteやMySQLのデータもエクスポートできますか?

A:可能です。データベースドライバと接続文字列を変更してください。

Q:Excelのインストールは必要ですか?

A:不要です。Spire.XLSは独立したExcel処理ライブラリです。

Q:複数のテーブルを1つのExcelに出力できますか?

A:できます。ワークシートを複数作成し、それぞれにデータを挿入してください。

Spire.XLS を使用して DataTable を Excel にエクスポートする例

C# で DataTable を Excel ファイルにエクスポートする 作業は、レポートの生成、ログの出力、システム間のデータ共有など、.NET 開発において非常によくあるニーズです。スタンドアロン型のライブラリを使用することで、複雑なセットアップや外部依存を必要とせず、DataTable のデータを迅速かつ柔軟に Excel ファイルに出力できます。

この記事では、Spire.XLS for .NET を使用して、C# で DataTable を Excel(.xlsx / .xls)にエクスポートし、書式設定を適用して見やすいファイルに仕上げる方法を段階的に解説します。

目次:

Spire.XLS のインストールと設定

まずは、プロジェクトに Spire.XLS for .NET を追加してください。

NuGet でインストールするには以下のコマンドを使用します:

Install-Package Spire.XLS

Spire.XLS は、.NET Framework、.NET Core、.NET 6/7+、ASP.NET に対応しており、Microsoft Office のインストールは不要です。

手順解説:C# で DataTable を Excel に出力する

以下の手順では、Spire.XLS を用いて DataTable を Excel ファイルに変換するプロセスを、データ準備から保存、Web 出力、書式設定まで順を追って紹介します。

ステップ1:サンプル DataTable を作成

まず、以下のようなカラムを持つ DataTable を用意します:

// データテーブルを作成
DataTable dt = new DataTable("社員情報");

// 列を追加
dt.Columns.Add("社員番号", typeof(int));
dt.Columns.Add("氏名", typeof(string));
dt.Columns.Add("部署", typeof(string));
dt.Columns.Add("入社日", typeof(DateTime));
dt.Columns.Add("給与", typeof(double));
dt.Columns.Add("正社員", typeof(bool));
dt.Columns.Add("賞与率", typeof(decimal));

// データ行を追加
dt.Rows.Add(1001, "佐藤 大輔", "人事部", new DateTime(2021, 5, 10), 55000.5, true, 0.05m);
dt.Rows.Add(1002, "鈴木 美咲", "技術部", new DateTime(2020, 11, 23), 72000.0, false, 0.03m);
dt.Rows.Add(1003, "高橋 健太", "経理部", new DateTime(2019, 8, 15), 63000.75, true, 0.07m);
dt.Rows.Add(1004, "田中 優子", "マーケティング部", new DateTime(2022, 3, 8), 48800.0, true, 0.06m);

ここではサンプルデータを使用していますが、実際には任意の DataTable をバインドできます。

ステップ2:DataTable をインポートして Excel ファイルとして保存

次に、ワークブックを初期化し、DataTable をワークシートに挿入し、ファイルを保存します。

Workbook workbook = new Workbook();
workbook.Worksheets.Clear();
Worksheet sheet = workbook.Worksheets.Add(dt.TableName);

// A1 セルからデータを挿入
sheet.InsertDataTable(dt, true, 1, 1);

// XLSX 形式で保存(推奨)
workbook.SaveToFile(dt.TableName + ".xlsx", FileFormat.Version2016);

// 旧形式(.xls)で保存
workbook.SaveToFile(dt.TableName + ".xls", FileFormat.Version97to2003);

補足:

  • Workbook は Excel 全体のコンテナです。
  • InsertDataTable() は DataTable の内容をセルにマッピングします。
  • SaveToFile() で Excel ファイルとして出力できます。

出力結果のイメージ:

DataTable をエクスポートした Excel 例

ASP.NET で Excel をストリームとして出力

Web アプリケーションでは、ファイルをディスクに保存せず直接ダウンロードさせたい場合があります。

MemoryStream stream = new MemoryStream();
workbook.SaveToStream(stream, FileFormat.Version2013);
stream.Position = 0;

この MemoryStream を ASP.NET のコントローラで返すことで、ブラウザで Excel ファイルのダウンロードが開始されます。

関連記事C# で Excel ファイルを作成・操作する方法

出力された Excel ファイルの書式設定

より見やすくプロフェッショナルな Excel ファイルを作るために、書式設定を施すことをおすすめします。

// ヘッダー行のスタイル
CellRange header = sheet.Rows[0];
header.Style.Font.IsBold = true;
header.Style.Font.FontName = "Yu Gothic";
header.Style.Font.Size = 13;
header.Style.Color = Color.LightGray;
header.Style.Borders[BordersLineType.EdgeBottom].LineStyle = LineStyleType.Thick;

// データ行のスタイル
for (int i = 1; i < sheet.Rows.Length; i++)
{
    CellRange dataRow = sheet.Rows[i];
    dataRow.Style.Font.FontName = "Yu Mincho";
    dataRow.Style.Font.Size = 11;
}
sheet.Range.BorderInside(LineStyleType.Thin, Color.Black);

// 日付列の書式設定
CellRange dateColumn = sheet.Range[2, 4, sheet.Rows.Length + 1, 4];
dateColumn.Style.NumberFormat = "yyyy-mm-dd";

// 列幅を自動調整
sheet.AllocatedRange.AutoFitColumns();

主要プロパティとメソッド:

  • Style: フォントや色、罫線、数値形式などを設定
  • AutoFitColumns(): 列幅を自動調整
  • NumberFormat: 日付や数値の表示形式を設定
  • BorderInside(): 表の読みやすさを高める内部罫線を追加

書式設定後のイメージ:

スタイル付きで DataTable を Excel にエクスポート

詳細な数値フォーマット設定はこちら:
Spire.XLS で Excel の数値フォーマットを C# で設定する方法

よくある問題と対処法

問題 解決方法
ファイルが開けない/破損エラーが出る ストリームの正しいクローズと拡張子の整合性を確認
特殊文字や日本語が文字化けする UTF-8 エンコードの使用と対応フォントの設定を確認
列幅が狭すぎる AutoFitColumns() で自動調整、または ColumnWidth を手動設定

まとめ

C# で DataTable を Excel にエクスポートする作業は、Spire.XLS を使えば非常に簡単です。.xls / .xlsx 形式のファイルを生成でき、Office のインストールも不要。デスクトップ/Web アプリを問わず、実用的で見栄えのよい Excel 出力が実現できます。

すべての機能を試したい場合は、無料の一時ライセンス を申請してください。

よくある質問(FAQ)

Q1:C# で DataTable を Excel に変換するには?

Spire.XLS の InsertDataTable() を使用してワークシートに読み込み、SaveToFile() でファイルとして保存できます。

Q2:無料で使える Excel エクスポートライブラリはありますか?

はい。Free Spire.XLS for .NET は、Microsoft Office をインストールせずに、Excel ファイルの作成と出力ができる無料ライブラリです。

Q3:ASP.NET で Excel を出力できますか?

可能です。コントローラで Workbook を生成し、MemoryStream として返すことで、ブラウザで直接ダウンロード可能です。

Q4:.xlsx と .xls の違いは?

.xlsx は Office 2007 以降対応の新形式で、.xls は古い Excel 97〜2003 用の形式です(最大行数に制限あり)。

Java コードで CSV を Excel に変換し、テンプレートと書式を適用

Java で開発を行う中で、CSV ファイルを Excel に変換する 作業は、レポート作成やデータ分析、ファイル変換ツールなど、さまざまなシーンで頻繁に求められます。手動で CSV をパースすることも可能ですが、コードが煩雑になりやすく、書式の制御も困難です。
その点、Spire.XLS for Java のような Excel 専用ライブラリを活用することで、レイアウトやスタイルの制御、テンプレートの活用、複数 CSV の統合 などを、シンプルなコードで実現できます。

このチュートリアルでは、Java で CSV を Excel に変換するさまざまな方法を紹介します。基本的な変換から、書式設定、テンプレートの利用、複数 CSV のマージまでを網羅しています。

目次

Spire.XLS を Java プロジェクトに導入する

CSV を Excel に変換する前に、Spire.XLS for Java をプロジェクトに追加しましょう。XLS と XLSX の両形式に対応し、Microsoft Office に依存せずに Excel ファイルを操作できます。

Maven で導入する

<repositories>
    <repository>
        <id>com.e-iceblue</id>
        <name>e-iceblue</name>
        <url>https://repo.e-iceblue.com/nexus/content/groups/public/</url>
    </repository>
</repositories>
<dependencies>
    <dependency>
        <groupId>e-iceblue</groupId>
        <artifactId>spire.xls</artifactId>
        <version>15.6.3</version>
    </dependency>
</dependencies>

JAR ファイルを手動で追加する

Spire.XLS for Java をダウンロード し、JAR ファイルをクラスパスに追加します。小規模プロジェクトには Free Spire.XLS for Java の利用も可能です。

Java で CSV ファイルを Excel に変換する

最も基本的な使い方は、1 つの CSV ファイルを XLSX または XLS に変換することです。Spire.XLS を使えば、loadFromFile()saveToFile() の 2 つのメソッドだけで簡単に変換が可能です。

import com.spire.xls.*;

public class CsvToXlsx {
    public static void main(String[] args) {
        Workbook workbook = new Workbook();
        workbook.loadFromFile("data.csv", ",");
        workbook.saveToFile("output.xlsx", ExcelVersion.Version2013);
    }
}

.xls 形式で保存したい場合は、ExcelVersion.Version97to2003 を使用します。

以下は、CSVをExcelファイルに変換した後の出力ファイルです。

JavaとSpire.XLSを使用してCSVからExcelファイルに変換

また、区切り文字や開始行・列も指定できるため、タイトル付き CSV やレイアウトが決まっているシートにも対応できます。

workbook.loadFromFile("data_semicolon.csv", ";", 3, 2);

Java で Excel 出力に書式を適用する

レポートや顧客向けドキュメントを出力する際には、見やすさや印象のために書式の適用が欠かせません。Spire.XLS では、セルフォント、背景色、数値書式、列幅の自動調整 など、多彩なスタイル制御が可能です。

スタイル適用と列幅自動調整の例

import com.spire.xls.*;

import java.awt.*;

public class CsvToXlsx {
    public static void main(String[] args) {
        Workbook workbook = new Workbook();
        workbook.loadFromFile("data.csv", ",");

        Worksheet sheet = workbook.getWorksheets().get(0);

        // ヘッダー行の書式設定
        CellStyle headerStyle = workbook.getStyles().addStyle("Header");
        headerStyle.getFont().isBold(true);
        headerStyle.setKnownColor(ExcelColors.LightYellow);
        for (int col = 1; col <= sheet.getLastColumn(); col++) {
            sheet.getCellRange(1, col).setStyle(headerStyle);
        }

        // 数値列の書式設定
        // セルの値の型を数値に変換します(デフォルトでは、すべてのセルの書式がテキストに設定されます)
        for (int row = 2; row <= sheet.getLastRow(); row++) {
            sheet.getCellRange(row, 3).setNumberValue(Double.parseDouble(sheet.getCellRange(row, 3).getText()));
        }
        CellStyle numStyle = workbook.getStyles().addStyle("Numbers");
        numStyle.setNumberFormat("#,##0.00");
        sheet.getCellRange(2, 3, sheet.getLastRow(), 3).setStyle(numStyle);

        // 枠線の設定
        sheet.getRange().borderInside(LineStyleType.Thin, Color.black);

        // フォント名を設定(自動整列のため)
        sheet.getRange().getStyle().getFont().setFontName("Yu Gothic UI");
        // 全列の幅を自動調整
        for (int i = 1; i <= sheet.getLastRow(); i++) {
            sheet.autoFitColumn(i);
        }

        workbook.saveToFile("formatted_output.xlsx", ExcelVersion.Version2013);
    }
}

以下は、フォーマットされたヘッダーと数値列を含むスタイル設定済みのExcel出力の例です。

JavaでSpire.XLSを使用して、フォーマットされたヘッダーと数値列を含むExcel出力を生成

テンプレートファイル(既存の Excel)に CSV データを挿入したい場合は、insertArray() メソッドなどで可能です。
ただし、テンプレートに挿入したデータには自動で書式は反映されないため、CellStyle で別途スタイルを設定しましょう。

複数の CSV ファイルを 1 つの Excel にまとめる

複数の CSV ファイルを扱う場合、ワークシート単位で分ける か、1 つのシートにすべてまとめる かを選べます。

オプション 1:CSV ごとに別シートに配置

import com.spire.xls.*;
import java.io.File;

public class CsvToXlsx {
    public static void main(String[] args) {
        File[] csvFiles = new File("CSVs/").listFiles((dir, name) -> name.endsWith(".csv"));
        Workbook workbook = new Workbook();
        workbook.getWorksheets().clear();

        for (File csv : csvFiles) {
            Workbook temp = new Workbook();
            temp.loadFromFile(csv.getAbsolutePath(), ",");
            workbook.getWorksheets().addCopy(temp.getWorksheets().get(0));
        }

        workbook.saveToFile("merged.xlsx", ExcelVersion.Version2016);
    }
}

各CSVファイルは、最終的なExcelファイル内のそれぞれのワークシートに配置されます。

複数のCSVファイルから作成された複数のワークシートを含むExcelワークブックを統合

オプション 2:すべての CSV データを 1 つのシートに統合

import com.spire.xls.*;
import java.io.File;

public class CsvToXlsx {
    public static void main(String[] args) {
        File[] csvFiles = new File("CSVs/").listFiles((dir, name) -> name.endsWith(".csv"));
        Workbook workbook = new Workbook();
        workbook.getWorksheets().clear();
        Worksheet sheet = workbook.getWorksheets().add("Sample");

        int startRow = 1;
        boolean isFirstFile = true;

        for (File csv : csvFiles) {
            Workbook temp = new Workbook();
            temp.loadFromFile(csv.getAbsolutePath(), ",");
            Worksheet tempSheet = temp.getWorksheets().get(0);

            int startReadRow = isFirstFile ? 1 : 2;
            isFirstFile = false;

            for (int r = startReadRow; r <= tempSheet.getLastRow(); r++) {
                for (int c = 1; c <= tempSheet.getLastColumn(); c++) {
                    sheet.getCellRange(startRow, c).setValue(tempSheet.getCellRange(r, c).getText());
                }
                startRow++;
            }
        }

        workbook.saveToFile("merged_single_sheet.xlsx", ExcelVersion.Version2016);
    }
}

以下は、すべてのCSVデータを1つのワークシートに統合した最終的なExcelシートです。

複数のCSVファイルから統合されたデータを格納した単一のExcelシート

関連チュートリアル:
Javaを使用したExcelファイルの結合と分割

トラブル対処とヒント

出力に問題がある場合は以下を確認してください:

  • 文字化けが発生する場合

CSV が UTF-8 でエンコードされているか確認してください。

  • 列が正しく分割されない場合

区切り文字(カンマやセミコロン)が一致しているか確認。

  • ファイルサイズが大きすぎる場合

複数シートに分けるなどでメモリ使用量を最適化。

  • CSV ごとに構造が異なる場合

列名や順番を事前に統一しましょう。

まとめ

単純な CSV 変換から、ビジネス文書の自動出力まで、Spire.XLS for Java は Java による Excel 生成を強力にサポートします。数行のコードで CSV から Excel(XLSX/XLS)への変換が可能で、スタイル適用やテンプレート挿入、複数 CSV の統合まで柔軟に対応できます。
自動化によって作業を効率化し、見栄えの良いプロフェッショナルな Excel ファイルを簡単に作成できます。

一時ライセンスを申請 すれば、すべての機能を無制限でお試しいただけます。

よくある質問(FAQ)

Java で CSV を XLSX に変換するには?

Workbook.loadFromFile("file.csv", ",") で読み込み、saveToFile("output.xlsx", ExcelVersion.Version2016) で保存します。

Excel 出力にスタイルを適用できますか?

はい。CellStyle を使ってフォント、色、配置、数値書式などを設定できます。

CSV データを Excel テンプレートに挿入できますか?

可能です。テンプレートファイルを読み込み、setText()insertDataTable() などで CSV 内容を挿入します。

複数の CSV を 1 つの Excel にまとめるには?

それぞれの CSV を別シートに追加するか、1 つのシートにすべてのデータを順に挿入することで対応できます。