
スプレッドシートを扱う際は、データそのものと同じくらい「見やすさ」も重要です。整った書式の Excel ファイルは、分析・共有・プレゼンテーションをよりスムーズにします。Excel 上で手作業でスタイルを整える代わりに、Python を使った Excel 書式設定 で自動化することで、作業時間を大幅に削減できます。
本記事では、ライブラリ Spire.XLS for Python を利用して Python で Excel を書式設定する方法 を紹介します。基礎的な書式設定から応用、さらに実際のレポート事例までをカバーし、効率的に操作できる主要なクラスやプロパティも解説します。
内容一覧:
Excel を手作業で整えるのは時間がかかります。特に大規模なデータセットや動的にレポートを作成する場合は効率が悪くなります。Python による Excel 書式設定 を使うことで以下が可能になります:
Python を活用すれば、スプレッドシートにプロ仕様のスタイルを素早く適用できます。次に環境構築を見ていきましょう。
本記事のチュートリアルを進めるには、Excel ファイルを操作するために設計されたライブラリ Spire.XLS for Python をインストールします。このライブラリは Excel 文書の作成、読み込み、編集、書式設定をプログラムで行うことができます。
pip でインストールします:
pip install Spire.XLS
Python スクリプトにインポートします:
from spire.xls import *
書式設定を始める前に、操作対象のワークブックを用意します。
新規作成:
workbook = Workbook()
sheet = workbook.Worksheets[0]
既存ファイルを読み込み:
workbook = Workbook()
workbook.LoadFromFile("入力.xlsx")
sheet = workbook.Worksheets[0]
書式設定を適用した後は保存します:
workbook.SaveToFile("output/書式設定済み出力.xlsx", ExcelVersion.Version2016)
準備ができたら書式設定の実例を見ていきます。
応用操作に進む前に、まず Excel 書式設定の基本をマスターしましょう。フォント、配置、罫線、背景色、列幅や行の高さ調整といった基本機能は、見やすく整ったスプレッドシートを作る土台となります。これらを理解しておくことで、複雑なスタイルも柔軟に組み合わせられるようになります。
フォントの種類やサイズ、色、太字などを変更するのは最も頻繁に行う操作の一つです。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
セル内の文字をスタイル属性で直接変更できます。
配置は HorizontalAlignment と VerticalAlignment プロパティで制御し、WrapText で長文をセル内に収めます。
cell = sheet.Range[4, 2]
cell.Text = "中央配置かつ折り返し表示"
cell.Style.HorizontalAlignment = HorizontalAlignType.Center
cell.Style.VerticalAlignment = VerticalAlignType.Center
cell.Style.WrapText = True
長い文字列でも読みやすく整列します。
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()
下側に黒の細線を追加します。
背景色は Style.Color で設定し、見出しや重要項目を強調する際によく使います。
cell = sheet.Range[8, 2]
cell.Text = "背景色セル"
cell.Style.Color = Color.get_Yellow()
セルが目立つように塗りつぶされます。
文字や罫線だけでなく、列幅や行高を調整することで見やすさが向上します。
# 列幅を指定
sheet.Columns[1].ColumnWidth = 20
# 行の高さを指定
sheet.Rows[7].RowHeight = 20
また、内容に合わせて自動調整も可能です:
これによりデータが収まりやすく整った表になります。
実際の適用例は以下の通りです:

Pythonを使用したExcelのフォント設定についてさらに詳しく知りたい場合は、「PythonでExcelのフォントを設定・変更する方法」を参照してください。
個別のセルだけでなく範囲全体や再利用可能なスタイルも扱えます。セル範囲操作には CellRange、再利用スタイル定義には Workbook.Styles コレクションを使用します。
見出しやタイトルを作成する際に利用します。
range = sheet.Range[2, 2, 2, 4]
range.Merge()
range.Text = "四半期レポート"
range.Style.HorizontalAlignment = HorizontalAlignType.Center
range.RowHeight = 30
B2:D2 が結合され、中央揃えのタイトルが作成されます。
Excel には既定のスタイルが用意されており、Spire.XLS から直接適用できます。
range.BuiltInStyle = BuiltInStyles.Heading1
すぐに「見出し 1」スタイルが適用されます。
複数セルやシートに共通ルールを適用したい場合に有効です。
# カスタムスタイル作成
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 書式設定を可能にする 主要クラス・プロパティ・メソッド を整理します。これを理解すれば、柔軟で保守しやすいスクリプトを書けます。
| クラス / プロパティ / メソッド | 説明 |
|---|---|
| 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 で生成する例です。地域ごとのデータを整理し、書式設定を組み合わせることで見やすくプロフェッショナルなレポートを作成します。
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 を利用してすぐに始めることもできます。
はい。Python にはフォント、色、罫線、配置、条件付き書式などを Excel ファイルにプログラムで適用できるライブラリがあります。
Excel の書式設定には Spire.XLS for Python などのライブラリを使用できます。コードを通じてフォントの変更、配置の設定、列幅の調整、セルの結合、カスタムスタイルや組み込みスタイルの適用が可能です。
はい。Python は書式設定だけでなく、Excel ファイルの作成、読み込み、編集、保存も行えるため、動的なレポート作成やデータ自動化に役立ちます。
複数のブックやシートで書式ルールを統一するカスタムスタイルや再利用可能な関数を定義することです。これにより一貫性が保たれ、作業時間を短縮できます。

C# 開発では、DataSet はインメモリでデータを管理するためによく利用されます。通常はデータベースクエリの結果やシステム連携の処理結果として使われ、さまざまな場面で C# から DataSet を Excel に出力 するニーズがあります。例えば、レポートの生成、非エンジニアへのデータ共有、将来のためのアーカイブなどです。
本記事では、C# で DataSet を Excel にエクスポート する方法を Spire.XLS for .NET を使って解説します。Excel ファイルの作成、複数 DataTable のシート分割出力、書式設定、大量データの扱いまでステップごとに紹介します。
本記事の内容:
DataSet とは?
C# の DataSet は、構造化データをインメモリで保持するためのオブジェクトです。複数の DataTable を格納でき、行・列・リレーションを含むため、データベースに直接接続せずにリレーショナルデータを扱うのに便利です。
なぜ DataSet を Excel に出力するのか?
CSV やテキスト形式に比べ、Excel は リッチな書式、複数シート、高い可読性を提供します。
C# で DataSet を Excel に出力するには、Spire.XLS for .NET を利用します。NuGet でインストール可能です。
Install-Package Spire.XLS
必要な名前空間を追加します。
using Spire.Xls;
using System.Data;
using System.Drawing; // 色指定用
DataSet を Excel に出力する基本ステップは、データ準備と Excel への書き込みです。実際にはデータベースや API から取得することが多いですが、ここでは理解しやすいようサンプル DataSet を作成し、各 DataTable を個別シートに出力する例を示します。
以下は 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;
}
}
準備した 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 を同じシートに配置することも可能です。
出力結果プレビュー
以下は 3 つの DataTable がシートに出力された Excel のプレビューです。

データベースから直接 Excel に出力する例については 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();
書式設定のポイント
さらに詳細な設定は CellRange と CellStyle の API を参照してください。
書式適用後のプレビュー
青背景・白文字のヘッダー、罫線、日付や通貨のフォーマットが反映されています。

大量データを扱う場合は、パフォーマンスやメモリ使用量に注意が必要です。対策として:
エクスポートだけでなく、逆に 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 を利用できます。
はい。ds.Tables をループし、それぞれに InsertDataTable を呼び出してシートを作成します。
可能です。Workbook.LoadFromFile() でファイルを読み込み、対象シートに InsertDataTable を使って書き込みます。
はい。DataSet のデータ型がそのまま出力されます。さらに日付や通貨などの書式を後から設定することもできます。
シート分割、バッチ挿入、複雑な書式を減らすことでパフォーマンスを改善できます。

レポートや請求書、PDF形式で保存されたデータセットを扱う際、開発者はしばしばその表データをスプレッドシートやデータベース、分析ツールで再利用する必要があります。一般的な解決策は JavaでPDFをCSVに変換すること です。CSVは軽量で構造化され、ほぼすべてのプラットフォームで扱えるため非常に便利です。
テキストや画像の書き出しと異なり、PDFからCSVへの変換の本質は PDFから表を抽出しCSVとして保存すること です。Spire.PDF for Java を使えば、PDF内の表構造を検出して数行のコードでプログラム的にCSVとして出力できます。
この記事では、環境構築から表抽出、さらに複数ページや1ページ内の複数表など複雑なケースへの対応まで、JavaでのPDFからCSVへの変換手順 をステップごとに解説します。
本チュートリアルの内容
JavaでPDFをCSVに変換する前に、開発環境を整える必要があります。適切なライブラリを選び、プロジェクトに追加しましょう。
PDFファイルにはCSV形式でのエクスポート機能が備わっていないため、プログラムによる表抽出が現実的なアプローチです。Spire.PDF for Java は、PDF内の表構造を検出し、直接CSVに保存できるAPIを提供しており、シンプルかつ効率的に変換を行えます。
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に変換する最も実用的な方法は表の抽出です。Spire.PDF for Javaを使えば以下のステップで実現できます。
以下にJavaコードのサンプルを示します。
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;
}
}
PDFから抽出した表をCSVに変換した例:

実際のPDFには複数表、複数ページ、または不規則な表構造が含まれることが多いです。ここではそれらへの対応方法を紹介します。
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に保存した例:

表が複数ページにまたがる場合はページごとに繰り返し処理し、追記していくのがポイント です。
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に統合した例:

CSVはテキストデータのみを保持するため、結合セル・フォント・画像などの情報は失われます。書式を保持したい場合はExcel(.xlsx)にエクスポートする方法が適しています。詳細は JavaでPDF表をExcelにエクスポートする方法 を参照してください。
CSVではカンマ、セミコロン、ダブルクォート、改行などの特殊文字がファイル構造を壊す可能性があります。 上記のJava例では escapeCsvField メソッドで改行除去と適切なエスケープ処理を行っています。
さらに高度な処理が必要な場合は Spire.XLS for Java を利用して Excelワークシートにデータを書き込み、その後 CSVとして保存 すれば、特殊文字も自動処理され正しいCSVが得られます。
オープンソースの OpenCSV や Apache Commons CSV なども同様に特殊文字処理を自動で行える選択肢です。
JavaでPDFをCSVに変換するとは、基本的に 表を抽出して構造化データとして保存すること を意味します。CSVは軽量で広くサポートされており、表形式データの保存や分析に最適です。Spire.PDF for Javaを導入し、この記事のコード例に従うことで、このプロセスを自動化でき、時間を節約し手作業を減らせます。
さらに高度な機能を試したい方は、無料評価ライセンスの申請 を行うか、小規模プロジェクトには Free Spire.PDF for Java を利用できます。
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 をバイト配列として扱うケースがよくあります。たとえば、PDF 文書をデータベースに保存したり、API を通して送受信したり、ファイルシステムを使わずに完全にメモリ内で処理する必要がある場合です。このような場面では、C# で PDF とバイト配列を相互に変換する方法が重要になります。
本記事では、Spire.PDF for .NET を使用して、バイト配列から PDF を生成する方法、PDF をバイト配列に変換する方法、さらにはメモリ上で直接 PDF を編集する方法まで、手順を追って解説します。
読みたいところからジャンプ
byte[] をデータの受け渡し形式として利用することで、一時ファイルを避けられ、クラウドやコンテナ環境にも適したコードが書けます。
準備: サンプルコードを実行する前に、Spire.PDF for .NET の NuGet パッケージを追加してください。
Install-Package Spire.PDF
インストール後は、byte[] や Stream から読み込み、ページを編集し、出力をメモリやディスクに書き出せます。追加のコンバーターは不要です。
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 への変換フローです。

ポイント:
逆方向として、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 を完全にメモリ上で編集できる点にあります。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 の例です。

補足:
ゼロから PDF を構築する手順については、C# で PDF 文書を作成する方法 を参照ください。
バイト配列ワークフローに適した特徴をまとめると以下の通りです。
| 課題 | Spire.PDF for .NET で得られるメリット |
|---|---|
| I/O の柔軟性 | ファイルパス・Stream・byte[] すべて同じ 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 をバイト配列に変換してデータベースに保存する方法は? PdfDocument で SaveToStream を実行し、MemoryStream の ToArray() を呼び出します。その byte[] を BLOB として保存できます。
もちろん可能です。バイト配列からロードし、テキスト・画像・透かし・注釈・フォーム入力を行い、新しい byte[] に保存できます。
ストリームは早めに Dispose し、必要に応じてバッファを再利用します。操作やスレッドごとに新しい PdfDocument を生成してください。大きなファイルにはストリーム I/O を活用することで、メモリ使用量を安定させられます。
PDF文書はテキストだけでなく、画像も重要な要素として情報伝達に大きく貢献します。PDF内の画像を追加・置換・削除できれば、ビジュアル面の向上や古い画像の更新、コンテンツ内容の修正などに役立ちます。
本記事では、Spire.PDF for Python を使用して、PythonでPDF文書内の画像を追加、置換、削除する方法を解説します。
目次
この機能を使用するには、Spire.PDF for Pythonとplum-dispatch v1.7.4が必要です。Windows環境では、以下のpipコマンドで簡単にインストールできます。
pip install Spire.PDF
または、Spire.PDF for Pythonのダウンロードページ から直接ダウンロードして、プロジェクトに追加することもできます。
PDFページに画像を追加するには、PdfPage.Canvas.DrawImage() メソッドを使用します。手順は以下の通りです。
コード例
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ファイル:

Spire.PDF for Pythonには、特定ページ内の画像を取得・操作できる PdfImageHelper クラスがあります。画像を新しいものに置き換えるには、PdfImageHelper.ReplaceImage() メソッドを使用します。手順は以下の通りです。
コード例
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ファイル:

特定ページの画像を削除するには、PdfPageBase.DeleteImage(index) メソッドを使用します。手順は以下の通りです。
コード例
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 環境で QR コードやバーコードをスキャン するニーズが高まっています。チケット認証や決済、在庫管理などで、ASP.NET の QR コードスキャナーやバーコード読み取り機能を導入すると、Web/エンタープライズシステムの効率と精度が大きく向上します。
本チュートリアルでは、Spire.Barcode for .NET を使用し、C# で ASP.NET にバーコードスキャン機能を実装する手順を解説します。画像アップロードから QR/各種バーコードの読み取りまでをカバーし、高い認識精度と既存プロジェクトへの容易な統合を実現します。
ガイド構成
ステップ 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 要素で構成します。
まずバックエンド実装でスキャン処理を確実に動かし、その後最小構成の Razor Pages フロントエンドに接続します。
アップロードファイルをメモリに読み込み、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 枚の画像内に複数コードがある場合も対応)。
補助メソッド(任意)
要件に応じて使い分けできます。
以下は、画像をアップロードしてスキャン結果を表示する簡易 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 コードおよび各種バーコードをスキャンできます。コード生成が必要な場合は、ASP.NET Core で QR コードを生成する方法 も参照してください。
アプリを実行したら、次のような画像で動作確認を行います。
認識がうまくいかない場合のチェックポイント:
回帰テスト向けに、サンプルの QR/バーコード画像ライブラリを小規模に用意しておくと便利です。
本チュートリアルのスキャンロジックは アプリ種別に依存しません。画像の受け渡し方法だけを変えれば、以下のような環境でも同じ BarcodeScanner.Scan() を再利用できます。
例:最小構成の 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/バーコードスキャンを素早く追加できます。
本記事では、Spire.Barcode for .NET を用いて ASP.NET Core に QR/バーコードスキャン機能を実装する手順 を解説しました。画像を受け取り、デコードし、結果を表示するまでの流れをシンプルに構築でき、EC、チケット、ドキュメント認証など多様な業務シナリオに応用できます。
高度な要件に対しては、認識処理のカスタマイズや複数画像形式・バーコード種類への詳細対応など、追加機能も利用可能です。すべての高度機能を解放するには、無償評価ライセンスの申請 を行ってください。
今すぐ Spire.Barcode for .NET をダウンロード して、ASP.NET 向けのバーコードスキャン機能を実装しましょう。

QRコードは、認証や非接触決済、URL・連絡先情報の共有など、現代のWebアプリケーションに欠かせない要素となっています。 ASP.NET を使った開発においても、C#でQRコードを生成する機能は、実用的かつ頻繁に求められる機能の一つです。
本記事では、Spire.Barcode for .NET を用いて、ASP.NET(Razor Pagesベース)でQRコードを生成する方法を、実際のコードを交えながら丁寧に解説します。紹介する手法は、MVCやWeb API、Web Formsといった他のASP.NETプロジェクトにも応用可能です。
目次
必要な環境:
以下の環境が必要です:
ライブラリのインストール:
NuGet パッケージマネージャーコンソールから以下のコマンドでインストールします:
Install-Package Spire.Barcode
Spire.Barcode は、外部APIを使用せずにQRコードをメモリ上で生成できる、完全な.NET向けバーコードライブラリです。小規模なプロジェクトであれば、Free Spire.Barcode for .NET の利用も可能です。
このセクションでは、ASP.NET Core Razor Pages プロジェクトを使って、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コード画像を生成以下は、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 を使ってブラウザに直接表示され、ダウンロードも可能です。
実行例は以下の通りです:

QRコードのスキャン機能が必要な場合は、C#で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ドキュメント をご覧ください。
このQRコード生成ロジックは、Razor Pages以外のASP.NETプロジェクトにも簡単に応用できます。
コントローラーに以下のようなアクションを追加します:
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");
}
}
以下のように 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として呼び出すのに最適です。
コードビハインドで以下のように処理可能です:
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> コントロールに埋め込んで表示します。
Spire.Barcode for .NET を使えば、Razor Pages、MVC、Web API、Web Forms など、すべての ASP.NET プロジェクトにおいて、QRコードの生成とカスタマイズが簡単に実装できます。
画像をBase64文字列で扱うことで、ファイル保存や管理が不要になり、展開や保守もシンプルになります。 認証システム、チケット発行、連絡先共有といったさまざまな用途に対応できる、信頼性の高いアプローチです。
Q: 日本語やアラビア語などの文字に対応していますか?
A: はい。QRCodeDataMode.Byte を使用すればUnicode対応可能です。
Q: QRコードのサイズや色は変更できますか?
A: 可能です。X や ForeColor、ImageWidth などのプロパティを使って調整できます。
Q: このソリューションは完全にオフラインで動作しますか? A: はい。外部APIへの接続なしでローカルで完結します。
Q: Web API経由でQRコード生成機能を提供できますか? A: はい。ASP.NET Web API を使って他のアプリに画像を提供できます。

企業向けアプリケーション開発では、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認証も可)
必要なライブラリ:
Install-Package Spire.XLSをインストール)サンプルデータベース
以下の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構文や接続文字列を変更するだけで、エクスポートの基本ロジックは変わりません。
SQL Server Expressの場合、SqlConnectionを使って接続します。
string connectionString = @"Data Source=YourServer\SQLEXPRESS;Initial Catalog=YourDatabaseName;Integrated Security=True;";
Integrated Security=TrueUser ID=yourUsername;Password=yourPassword;Encrypt=True;TrustServerCertificate=TrueSqlDataAdapterを利用してクエリを実行し、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);
}
}
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などの形式で保存可能。ストリームへの保存も対応

エクスポート後、見やすくするために以下のように書式設定が可能です。
// ヘッダー行のスタイル
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();

数値フォーマットの詳細は: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.Sqlite、MySql.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でも基本機能を利用可能です。
A:SqlConnectionでデータをDataTableに読み込み、Spire.XLSのInsertDataTable()を呼び出します。
A:可能です。データベースドライバと接続文字列を変更してください。
A:不要です。Spire.XLSは独立したExcel処理ライブラリです。
A:できます。ワークシートを複数作成し、それぞれにデータを挿入してください。

C# で DataTable を Excel ファイルにエクスポートする 作業は、レポートの生成、ログの出力、システム間のデータ共有など、.NET 開発において非常によくあるニーズです。スタンドアロン型のライブラリを使用することで、複雑なセットアップや外部依存を必要とせず、DataTable のデータを迅速かつ柔軟に Excel ファイルに出力できます。
この記事では、Spire.XLS for .NET を使用して、C# で DataTable を Excel(.xlsx / .xls)にエクスポートし、書式設定を適用して見やすいファイルに仕上げる方法を段階的に解説します。
目次:
まずは、プロジェクトに Spire.XLS for .NET を追加してください。
NuGet でインストールするには以下のコマンドを使用します:
Install-Package Spire.XLS
Spire.XLS は、.NET Framework、.NET Core、.NET 6/7+、ASP.NET に対応しており、Microsoft Office のインストールは不要です。
以下の手順では、Spire.XLS を用いて DataTable を Excel ファイルに変換するプロセスを、データ準備から保存、Web 出力、書式設定まで順を追って紹介します。
まず、以下のようなカラムを持つ 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 をバインドできます。
次に、ワークブックを初期化し、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);
補足:
出力結果のイメージ:

Web アプリケーションでは、ファイルをディスクに保存せず直接ダウンロードさせたい場合があります。
MemoryStream stream = new MemoryStream();
workbook.SaveToStream(stream, FileFormat.Version2013);
stream.Position = 0;
この MemoryStream を ASP.NET のコントローラで返すことで、ブラウザで Excel ファイルのダウンロードが開始されます。
関連記事:C# で 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();
主要プロパティとメソッド:
書式設定後のイメージ:

詳細な数値フォーマット設定はこちら:
Spire.XLS で Excel の数値フォーマットを C# で設定する方法
| 問題 | 解決方法 |
|---|---|
| ファイルが開けない/破損エラーが出る | ストリームの正しいクローズと拡張子の整合性を確認 |
| 特殊文字や日本語が文字化けする | UTF-8 エンコードの使用と対応フォントの設定を確認 |
| 列幅が狭すぎる | AutoFitColumns() で自動調整、または ColumnWidth を手動設定 |
C# で DataTable を Excel にエクスポートする作業は、Spire.XLS を使えば非常に簡単です。.xls / .xlsx 形式のファイルを生成でき、Office のインストールも不要。デスクトップ/Web アプリを問わず、実用的で見栄えのよい Excel 出力が実現できます。
すべての機能を試したい場合は、無料の一時ライセンス を申請してください。
Spire.XLS の InsertDataTable() を使用してワークシートに読み込み、SaveToFile() でファイルとして保存できます。
はい。Free Spire.XLS for .NET は、Microsoft Office をインストールせずに、Excel ファイルの作成と出力ができる無料ライブラリです。
可能です。コントローラで Workbook を生成し、MemoryStream として返すことで、ブラウザで直接ダウンロード可能です。
.xlsx は Office 2007 以降対応の新形式で、.xls は古い Excel 97〜2003 用の形式です(最大行数に制限あり)。

Java で開発を行う中で、CSV ファイルを Excel に変換する 作業は、レポート作成やデータ分析、ファイル変換ツールなど、さまざまなシーンで頻繁に求められます。手動で CSV をパースすることも可能ですが、コードが煩雑になりやすく、書式の制御も困難です。
その点、Spire.XLS for Java のような Excel 専用ライブラリを活用することで、レイアウトやスタイルの制御、テンプレートの活用、複数 CSV の統合 などを、シンプルなコードで実現できます。
このチュートリアルでは、Java で CSV を Excel に変換するさまざまな方法を紹介します。基本的な変換から、書式設定、テンプレートの利用、複数 CSV のマージまでを網羅しています。
目次
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 の利用も可能です。
最も基本的な使い方は、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ファイルに変換した後の出力ファイルです。

また、区切り文字や開始行・列も指定できるため、タイトル付き CSV やレイアウトが決まっているシートにも対応できます。
workbook.loadFromFile("data_semicolon.csv", ";", 3, 2);
レポートや顧客向けドキュメントを出力する際には、見やすさや印象のために書式の適用が欠かせません。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出力の例です。

テンプレートファイル(既存の Excel)に CSV データを挿入したい場合は、insertArray() メソッドなどで可能です。
ただし、テンプレートに挿入したデータには自動で書式は反映されないため、CellStyle で別途スタイルを設定しましょう。
複数の 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();
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ファイル内のそれぞれのワークシートに配置されます。

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シートです。

関連チュートリアル:
Javaを使用したExcelファイルの結合と分割
出力に問題がある場合は以下を確認してください:
CSV が UTF-8 でエンコードされているか確認してください。
区切り文字(カンマやセミコロン)が一致しているか確認。
複数シートに分けるなどでメモリ使用量を最適化。
列名や順番を事前に統一しましょう。
単純な CSV 変換から、ビジネス文書の自動出力まで、Spire.XLS for Java は Java による Excel 生成を強力にサポートします。数行のコードで CSV から Excel(XLSX/XLS)への変換が可能で、スタイル適用やテンプレート挿入、複数 CSV の統合まで柔軟に対応できます。
自動化によって作業を効率化し、見栄えの良いプロフェッショナルな Excel ファイルを簡単に作成できます。
一時ライセンスを申請 すれば、すべての機能を無制限でお試しいただけます。
Workbook.loadFromFile("file.csv", ",") で読み込み、saveToFile("output.xlsx", ExcelVersion.Version2016) で保存します。
はい。CellStyle を使ってフォント、色、配置、数値書式などを設定できます。
可能です。テンプレートファイルを読み込み、setText() や insertDataTable() などで CSV 内容を挿入します。
それぞれの CSV を別シートに追加するか、1 つのシートにすべてのデータを順に挿入することで対応できます。