
C# による Excel ファイルの生成は、レポートシステムの構築、構造化データの出力、Excel ベースの業務自動化において非常に一般的な作業です。デスクトップアプリ、ASP.NET Core Web API、クロスプラットフォームアプリなど、どのような .NET プロジェクトでも、コードで .xlsx ファイルを生成することで、データ処理と連携を大幅に効率化できます。
本記事では、Spire.XLS for .NET(Excel を操作できる単体のライブラリ)を使用して、.NET 環境で Excel ファイルを作成する方法を紹介します。デスクトップアプリ、ASP.NET Web サービス、バックグラウンド処理など、さまざまな場面で活用可能です。ワークブックの新規作成、DataTable のエクスポート、サーバーサイドでの生成、書式や数式の適用といった主要機能を、実用的なコード例とともに解説します。
目次
Spire.XLS for .NET は、Microsoft Office をインストールせずに .xls や .xlsx ファイルをコードのみで作成できる軽量なライブラリです。COM 依存もないため、Web サーバーやクラウドアプリ、マイクロサービス環境に最適です。
NuGet パッケージマネージャーから簡単に導入できます:
Install-Package Spire.XLS
軽量用途には無料版の Free Spire.XLS for .NET も利用可能です:
Install-Package FreeSpire.XLS
小規模なデータ出力やテンプレートの生成には、C# コードで Excel ファイルを新規作成するのが効率的です。レイアウトや内容を柔軟に制御できます。
以下は、テキストと数値を含む基本的なワークシートを作成する例です:
using Spire.Xls;
// 新しいワークブックとワークシートを作成
Workbook workbook = new Workbook();
Worksheet sheet = workbook.Worksheets[0];
sheet.Name = "概要";
// ヘッダーとデータを入力
// セル名でアクセス
sheet.Range["A1"].Text = "従業員";
sheet.Range["B1"].Text = "部署";
sheet.Range["C1"].Text = "給与";
// 行と列でアクセス
sheet.Range[2, 1].Text = "山田太郎";
sheet.Range[2, 2].Text = "人事部";
sheet.Range[2, 3].NumberValue = 650000;
sheet.Range[3, 1].Text = "佐藤花子";
sheet.Range[3, 2].Text = "情報システム部";
sheet.Range[3, 3].NumberValue = 720000;
// スタイルを適用
CellStyle headerStyle = workbook.Styles.Add("Header");
headerStyle.Font.IsBold = true;
sheet.Range["A1:C1"].Style = headerStyle;
sheet.Range.Style.Font.FontName = "Yu Gothic UI";
// 列の幅を自動調整
sheet.Range.AutoFitColumns();
// ファイルを保存
workbook.SaveToFile("BasicExcel.xlsx", ExcelVersion.Version2016);
workbook.Dispose();
生成されたExcelファイル:

この方法は Excel がインストールされていない環境でも動作し、簡単なデータ出力や設定ファイルの作成に最適です。
データベースや API からの取得結果をそのまま Excel に出力したい場合、DataTable を使うのが一般的です。Spire.XLS を使えば、1 行ずつループすることなく、構造化されたデータをワークシートに簡単に取り込めます。
以下は、DataTable の内容をワークシートに取り込むサンプルです:
using System.Data;
using Spire.Xls;
// データテーブルを作成(シミュレーション)
DataTable dt = new DataTable("商品一覧");
dt.Columns.Add("商品名", typeof(string));
dt.Columns.Add("価格", typeof(double));
dt.Columns.Add("在庫数", typeof(int));
dt.Rows.Add("ノートパソコン", 129800, 20);
dt.Rows.Add("モニター", 19800, 50);
dt.Rows.Add("マウス", 2480, 150);
// Excel にインポート
Workbook workbook = new Workbook();
Worksheet sheet = workbook.Worksheets[0];
sheet.Name = "在庫管理";
sheet.InsertDataTable(dt, true, 1, 1);
// 列幅を調整
sheet.AllocatedRange.ColumnWidth = 15;
// ファイルを保存
workbook.SaveToFile("InventoryReport.xlsx", ExcelVersion.Version2016);
workbook.Dispose();
生成されたExcelファイル:

この手法は、在庫リスト、売上レポート、分析結果などの出力に広く活用されています。
関連情報:DataTable と Excel の相互変換方法(C#)
見やすくプロフェッショナルな Excel ファイルを作成するためには、データの出力に加えて、セルの書式設定や数式の挿入も重要です。C# と Spire.XLS を使えば、文字の色・太字・罫線・通貨形式・計算式などを自由に設定できます。
以下の例では、ヘッダー行のスタイル設定、通貨形式の適用、計算式の挿入、交互に背景色を変える処理を紹介しています:
using Spire.Xls;
using System.Drawing;
Workbook workbook = new Workbook();
Worksheet sheet = workbook.Worksheets[0];
sheet.Name = "売上レポート";
// ヘッダーラベルを設定
sheet.Range["A1"].Text = "商品名";
sheet.Range["B1"].Text = "単価";
sheet.Range["C1"].Text = "数量";
sheet.Range["D1"].Text = "合計";
// サンプルデータを追加
string[,] items = {
{ "ボールペン", "150", "10" },
{ "ノート", "375", "5" },
{ "消しゴム", "99", "20" }
};
for (int i = 0; i < items.GetLength(0); i++)
{
int row = i + 2;
sheet.Range[$"A{row}"].Text = items[i, 0];
sheet.Range[$"B{row}"].NumberValue = double.Parse(items[i, 1]);
sheet.Range[$"C{row}"].NumberValue = double.Parse(items[i, 2]);
sheet.Range[$"D{row}"].Formula = $"=B{row}*C{row}";
}
// スタイル:ヘッダー行
CellStyle headerStyle = workbook.Styles.Add("HeaderStyle");
headerStyle.Font.IsBold = true;
headerStyle.Font.Color = Color.White;
headerStyle.Font.Size = 12;
headerStyle.Font.FontName = "Yu Gothic UI";
headerStyle.KnownColor = ExcelColors.DarkBlue;
headerStyle.HorizontalAlignment = HorizontalAlignType.Center;
headerStyle.VerticalAlignment = VerticalAlignType.Center;
headerStyle.Borders[BordersLineType.EdgeTop].LineStyle = LineStyleType.Thick;
headerStyle.Borders[BordersLineType.EdgeLeft].LineStyle = LineStyleType.Thick;
sheet.Range["A1:D1"].Style = headerStyle;
// スタイル:データセル
CellStyle dataStyle = workbook.Styles.Add("DataStyle");
dataStyle.Font.FontName = "Yu Gothic UI";
dataStyle.NumberFormat = "\"¥\"#,##0"; // 円形式で小数なし
dataStyle.HorizontalAlignment = HorizontalAlignType.Right;
dataStyle.VerticalAlignment = VerticalAlignType.Center;
dataStyle.Borders[BordersLineType.EdgeLeft].LineStyle = LineStyleType.Thin;
dataStyle.Borders[BordersLineType.EdgeBottom].LineStyle = LineStyleType.Thin;
// 単価・数量・合計列にスタイルを適用
sheet.Range["B2:D4"].Style = dataStyle;
// 任意:交互行の背景色を変更して読みやすく
for (int r = 2; r <= 4; r++)
{
if (r % 2 == 0)
sheet.Range[$"A{r}:D{r}"].Style.KnownColor = ExcelColors.LightYellow;
}
// 列幅と行の高さを調整
sheet.AllocatedRange.ColumnWidth = 10;
sheet.AllocatedRange.RowHeight = 20;
// ファイルを保存
workbook.SaveToFile("styled.xlsx", FileFormat.Version2016);
workbook.Dispose();
作成されたExcelファイル:

売上明細や会計帳簿など、視認性と自動集計が求められるシーンに最適です。
より高度な数値フォーマットについては、こちらをご覧ください: Excel セルの数値フォーマットを設定する方法(C#/VB.NET)
ASP.NET Core(.NET 6/7/8)を使用した Web アプリでは、ダッシュボードや管理画面で Excel 出力機能がよく利用されます。
以下のサンプルでは、Razor Pages を使用してサーバー側で Excel ファイルを生成し、HTTP 応答としてダウンロードさせる方法を紹介しています:
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;
using Spire.Xls;
using System.Data;
public class ExportModel : PageModel
{
public IActionResult OnGet()
{
// 専門的なデータをシミュレート:プロジェクト進捗レポート
DataTable dt = new DataTable("プロジェクト進捗");
dt.Columns.Add("プロジェクトID", typeof(string));
dt.Columns.Add("プロジェクト名", typeof(string));
dt.Columns.Add("担当者", typeof(string));
dt.Columns.Add("開始日", typeof(DateTime));
dt.Columns.Add("予定完了日", typeof(DateTime));
dt.Columns.Add("進捗状況", typeof(string));
dt.Columns.Add("ステータス", typeof(string));
dt.Rows.Add("PRJ001", "スマート倉庫システム", "張 強", new DateTime(2024, 3, 1), new DateTime(2024, 9, 30), "65%", "進行中");
dt.Rows.Add("PRJ002", "企業ポータルサイトのアップグレード", "李 華", new DateTime(2024, 5, 10), new DateTime(2024, 7, 15), "100%", "完了");
dt.Rows.Add("PRJ003", "データガバナンスプラットフォーム構築", "王 敏", new DateTime(2024, 6, 1), new DateTime(2024, 12, 31), "30%", "遅延");
// Excel ワークブックとワークシートを作成
Workbook workbook = new Workbook();
Worksheet sheet = workbook.Worksheets[0];
sheet.Name = "プロジェクト進捗レポート";
// テーブル(ヘッダー付き)を挿入
sheet.InsertDataTable(dt, true, 1, 1);
// ヘッダースタイルを設定
CellStyle headerStyle = workbook.Styles.Add("HeaderStyle");
headerStyle.Font.IsBold = true;
headerStyle.HorizontalAlignment = HorizontalAlignType.Center;
headerStyle.VerticalAlignment = VerticalAlignType.Center;
sheet.Rows[0].Style = headerStyle;
sheet.Range.Style.Font.FontName = "Yu Gothic UI";
// 列幅を自動調整
sheet.AllocatedRange.AutoFitColumns();
// メモリストリームに保存
using var stream = new MemoryStream();
workbook.SaveToStream(stream, FileFormat.Version2016);
stream.Position = 0;
// ファイルを返す
return File(stream.ToArray(),
"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
"プロジェクト進捗レポート.xlsx");
}
}
エクスポートされたExcelファイル:

このアプローチは、社内ポータル、業務ツール、データ出力 API などに幅広く活用できます。
従来の ASP.NET Web Forms を利用している場合でも、Spire.XLS を使えばサーバーサイドで Excel ファイルを動的に生成し、クライアントに直接ダウンロードさせることが可能です。ファイルをディスクに保存する必要はありません。
以下は Web Forms アプリでの実装例です:
using Spire.Xls;
using System;
using System.IO;
namespace YourNamespace
{
public partial class Default : System.Web.UI.Page
{
protected void btnExport_Click(object sender, EventArgs e)
{
// Excel ファイルを作成し、ダウンロードとして出力
Workbook workbook = new Workbook();
Worksheet sheet = workbook.Worksheets[0];
sheet.Name = "ユーザー一覧";
// ヘッダー
string[] headers = { "ユーザーID", "氏名", "所属部署", "入社日" };
for (int i = 0; i < headers.Length; i++)
{
sheet.Range[1, i + 1].Text = headers[i];
sheet.Range[1, i + 1].Style.Font.IsBold = true;
}
// サンプルデータ
string[,] data = {
{ "U001", "佐藤 美咲", "人事部", "2023-01-15" },
{ "U002", "山本 健太", "情報システム部", "2022-11-03" }
};
// データを入力
for (int r = 0; r < data.GetLength(0); r++)
for (int c = 0; c < data.GetLength(1); c++)
sheet.Range[r + 2, c + 1].Text = data[r, c];
// 列幅を自動調整
sheet.Range.Style.Font.FontName = "Yu Gothic UI";
sheet.AllocatedRange.AutoFitColumns();
// ブラウザでダウンロードさせる
using (MemoryStream ms = new MemoryStream())
{
workbook.SaveToStream(ms, FileFormat.Version2016);
byte[] bytes = ms.ToArray();
Response.Clear();
Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
Response.AddHeader("Content-Disposition", "attachment; filename=ユーザー一覧.xlsx");
Response.BinaryWrite(bytes);
Response.End();
}
}
}
}
エクスポートされたExcelファイル:

Excel ファイルを即時出力できるため、社内システムや業務アプリに便利な仕組みです。
Q. C# で Excel ファイルを作成するには? Spire.XLS などのライブラリを使うことで、Office をインストールせずに Excel ファイルを作成・保存できます。
Q. データを Excel にエクスポートするには? DataTable をワークシートに読み込んで保存すれば簡単にエクスポートできます。列ヘッダーや書式も自動設定されます。
Q. ASP.NET で Excel ファイルを生成するには?
ASP.NET Core ではファイルをメモリ上で作成し、HTTP 応答として返します。Web Forms では Response.BinaryWrite() を使用して出力できます。
Q. Spire.XLS は .NET Core に対応していますか? はい。Spire.XLS は .NET Core 3.1、.NET 5、.NET 6、.NET 7、.NET 8 に対応しており、クロスプラットフォーム開発にも利用できます。
Spire.XLS for .NET を使用すれば、C# で簡単かつ柔軟に Excel ファイルを作成できます。デスクトップアプリ、ASP.NET Core、Web Forms、バッチ処理など、あらゆる .NET 環境に対応しています。
DataTable のエクスポート、書式付きレポートの生成、自動化された出力処理など、本記事で紹介した方法を活用すれば、Excel 出力機能をすぐに実装できます。
👉 無料の一時ライセンスを申請 して、すべての機能を試用し、評価版の制限を解除しましょう。

PDF 処理において、文字の追加は非常に一般的なニーズです。レポートの自動生成、注釈の追加、テンプレートへの入力、バージョン情報の記載など、Python で PDF にテキストを追加すること によって、文書処理の効率と柔軟性が大幅に向上します。
手動編集や複雑な外部ツールに頼ることなく、PDF 専用ライブラリを用いれば、数行のコードで文字を正確に挿入することが可能です。この記事では、強力な PDF 操作ライブラリ Spire.PDF for Python を使用して、PDF へのテキスト挿入手順を解説します。
コンテンツ一覧
まずは Python 用 PDF 処理ライブラリ Spire.PDF for Python をインストールします。
pip install Spire.PDF
Free Spire.PDF for Pythonをご利用の場合は以下をインストールしてください:
pip install spire.pdf.free
おすすめポイント:
Python で 白紙の PDF を新たに作成し、テキストを挿入 するには、以下のように操作します。
from spire.pdf import PdfDocument, PdfTrueTypeFont, PdfFontStyle, PdfSolidBrush, PdfRGBColor, PointF, RectangleF, \
PdfStringFormat, PdfTextAlignment, PdfVerticalAlignment
# 新しい PDF ドキュメントを作成し、新しいページを追加
pdf = PdfDocument()
page = pdf.Pages.Add()
# ページに追加するテキスト(例文)
text = ("本レポートは、2025年第1四半期における各製品の販売実績をまとめたものです。"
+ "以下に、製品カテゴリごとの総売上の内訳を示し、"
+ "続いて、地域別の売上比較を行います。")
# フォント、ブラシ、描画位置を設定
font = PdfTrueTypeFont("Yu Gothic UI", 14.0, PdfFontStyle.Regular, True)
brush = PdfSolidBrush(PdfRGBColor(0, 0, 0)) # 黒色
point = PointF(50.0, 100.0)
# レイアウト領域と文字列フォーマットを設定
layoutArea = RectangleF(50.0, 50.0, page.GetClientSize().Width - 100.0, page.GetClientSize().Height)
stringFormat = PdfStringFormat(PdfTextAlignment.Left, PdfVerticalAlignment.Top)
# テキストを描画
page.Canvas.DrawString(text, font, brush, layoutArea, stringFormat, False)
# PDF ファイルとして保存して閉じる
pdf.SaveToFile("output/new.pdf")
pdf.Close()
🔍 技術解説:
PdfTrueTypeFont() はシステムフォントを読み込み、サイズやスタイルも指定可能PdfSolidBrush() によって文字色を設定(例:黒=(0, 0, 0))RectangleF() でテキスト描画エリアを定義し、自動改行にも対応PdfStringFormat() によって文字の配置(左上、中央など)を指定DrawString() で PDF ページにテキストを描画(既存内容には影響なし)生成されたPDFファイル:

📌 ポイント: 複数行の文字列を表示するには、Y 座標を調整したり、複数回 DrawString() を使うことで実現可能です。
既存の PDF ファイルに 文字を追記する には、ファイルを読み込んで任意のページを取得し、必要な位置にテキストを描画します。
よくある用途:
from spire.pdf import PdfDocument, PdfFontStyle, PdfSolidBrush, PdfRGBColor, PointF, PdfCjkStandardFont, PdfCjkFontFamily
# 既存の PDF ファイルを読み込む
pdf = PdfDocument()
pdf.LoadFromFile("input.pdf")
page = pdf.Pages[0]
# フォントを作成(Times Roman、12ポイント、太字)
font = PdfCjkStandardFont(PdfCjkFontFamily.HeiseiMinchoW3, 16.0, PdfFontStyle.Bold)
# 赤色のブラシを作成
brush = PdfSolidBrush(PdfRGBColor(255, 0, 0)) # 赤
# テキストの描画位置を設定
location = PointF(150.0, 110.0)
# 指定位置にテキストを描画
page.Canvas.DrawString("本書類は承認されました。", font, brush, location)
# 修正後の PDF を保存して閉じる
pdf.SaveToFile("output/modified.pdf")
pdf.Close()
🔍 技術解説:
LoadFromFile() で既存 PDF を読み込みpdf.Pages[index] によりページ単位でアクセス可能PointF(x, y) でテキストの描画位置を設定(単位はポイント)生成されたPDFファイル:

💡 必要に応じて座標を調整することで、任意の位置にテキストを自由に配置できます。
テキストの見た目をカスタマイズすることも可能です。Spire.PDF for Python では、フォント・カラー・透明度・回転などのスタイル設定に対応しており、水印や強調表示の表現に便利です。
# PdfTrueTypeFont を作成(Calibri、16ポイント、斜体、フォント埋め込みあり)
font = PdfTrueTypeFont("Calibri", 16.0, PdfFontStyle.Italic, True)
# PdfFont を作成(Times Roman、16ポイント、斜体)
font = PdfFont(PdfFontFamily.TimesRoman, 16.0, PdfFontStyle.Italic)
# テキストの描画色を指定する PdfBrush を作成
brush = PdfSolidBrush(PdfRGBColor(34, 139, 34)) # フォレストグリーン(濃緑)
💡 PdfTrueTypeFont を使えばフォントを PDF 内に埋め込み、他の環境でも文字化けを防げます。ファイル容量を抑えたい場合は、埋め込みなしの PdfFont を使うのも一手です。
# 現在のキャンバス状態を保存
state = page.Canvas.Save()
# 半透明を設定(0.0 = 完全に透明、1.0 = 完全に不透明)
page.Canvas.SetTransparency(0.4)
# 原点をページの中央に移動
page.Canvas.TranslateTransform(page.Size.Width / 2, page.Size.Height / 2)
# キャンバスを -45 度回転(反時計回り)
page.Canvas.RotateTransform(-45)
# 新しい原点位置にテキストを描画
page.Canvas.DrawString("下書き", font, brush, PointF(-50, -20))
回転と透明度の組み合わせで、水平方向や斜め方向のウォーターマークを表現できます。
from spire.pdf import PdfDocument, PdfTrueTypeFont, PdfFontStyle, PdfSolidBrush, PdfRGBColor, PointF
from spire.pdf.common import Color
# PDF ファイルを読み込む
pdf = PdfDocument()
pdf.LoadFromFile("サンプル.pdf")
page = pdf.Pages[0]
# 透かしとして描画するテキスト
text = "外部提供禁止" # "Confidential" を日本語で「機密」と翻訳
# フォントを作成(Arial、40ポイント、太字、フォント埋め込みあり)
font = PdfTrueTypeFont("Yu Gothic UI", 40.0, PdfFontStyle.Bold, True)
# ブラシを作成(ダークブルー)
brush = PdfSolidBrush(PdfRGBColor(Color.get_DarkBlue())) # ダークブルー
# テキストサイズを測定して中央位置を計算
size = font.MeasureString(text)
x = (page.Canvas.ClientSize.Width - size.Width) / 2
y = (page.Canvas.ClientSize.Height - size.Height) / 2
# キャンバスの状態を保存
state = page.Canvas.Save()
# 透過度を 0.3(30%の不透明度)に設定
page.Canvas.SetTransparency(0.3)
# 原点をページ中央に移動
page.Canvas.TranslateTransform(x + size.Width / 2, y + size.Height / 2)
# キャンバスを -45 度回転(反時計回り)
page.Canvas.RotateTransform(-45.0)
# テキストを中央に描画
page.Canvas.DrawString(text, font, brush, PointF(-size.Width / 2, -size.Height / 2))
# キャンバスの状態を元に戻す
page.Canvas.Restore(state)
# 水印付きの PDF を保存
pdf.SaveToFile("output/with_watermark.pdf")
pdf.Close()
💡 「機密」「副本」などの文字を斜めに薄く表示したい場合に有効です。複数ページへの一括挿入も可能です。
生成されたPDFファイル:

⚠ ファイルが他のプロセスによって使用中の場合、保存時に PermissionError が発生することがあります。
PDF に文字を追加する際、以下のような問題が発生することがあります。主な原因と対処方法を以下にまとめます:
| 問題 | 原因 | 解決策 |
|---|---|---|
| 文字位置がズレる | ページサイズを考慮していない | ClientSize や MeasureString() を使って動的に調整 |
| 文字が表示されない | フォントが未対応または不足 | Arial Unicode や Noto Sans を使用し、必要に応じて埋め込み |
| Unicode 文字が正しく表示されない | フォントが対応していない | 広範な Unicode 対応フォントを選定し、埋め込む |
| テキストと本文が重なる | Y 座標が近すぎる | MeasureString() で高さを計測し、行間を調整 |
| 文書に透かしが表示される | 有償版を未認証のまま使用している | 無料版を使うか、一時ライセンスを申請 |
| ファイルサイズが大きくなる | フォントを埋め込んでいるため | PdfFont を使ってフォント埋め込みを避ける |
| macOS/Linux で表示が崩れる | OS 間のフォント差異や描画方式の違い | クロスプラットフォームフォントを使用し、必要ならフォントを同梱配布 |
Spire.PDF for Python を使えば、PDF ドキュメントに柔軟に文字を追加できます。新規作成・既存編集・バッチ処理まで対応しており、フォント・配置・スタイルも自在に調整可能です。
まずは無料版で試してみるか、一時ライセンス を取得して全機能を体験してみてください。
DrawString() メソッドを使うことで、フォントや位置、スタイルを指定してテキストを描画できます。
はい、できます。LoadFromFile() で PDF を読み込み、対象ページに DrawString() で文字を挿入できます。
テキスト内容を 1 行ずつ読み込み、位置を調整しながら PDF に描画することで変換可能です。
はい。ループ処理で PDF を順次読み込み、共通のテキストを挿入することで実現できます。

C# アプリケーションからメールを送信する ことは、ビジネスや業務システム開発において一般的なタスクです。プロジェクトの進捗報告、アラート通知、自動レポートなど、信頼性の高いメール送信機能は欠かせません。
この記事では、SMTP 通信とメールフォーマットを簡単に実装できる強力なコンポーネントである Spire.Email for .NET を使って、C# でメールを送信する方法を解説します。SMTP 設定、Gmail との連携、HTML/テキスト本文、ファイル添付、複数宛先の指定など、多彩な機能を紹介します。
目次
まずは .NET プロジェクト(Console App または ASP.NET)を作成し、Spire.Email for .NET パッケージを導入します。
Install-Package Spire.Email
または Spire.Email for .NET を手動でダウンロードし、ローカルのインストールフォルダから Spire.Email.dll を参照設定します。
以下の例では、SMTP サーバーを経由してプレーンテキストのメールを送信する方法を紹介します。
using Spire.Email;
using Spire.Email.Smtp;
// SMTP クライアントを構成します
SmtpClient smtp = new SmtpClient();
smtp.Host = "smtp.example.com";
smtp.Port = 587;
smtp.Username = "your@example.com";
smtp.Password = "your_password";
smtp.ConnectionProtocols = ConnectionProtocols.StartTls;
// メールアドレスを作成します
MailAddress sender = new MailAddress("your@example.com", "送信者名");
MailAddress recipient = new MailAddress("recipient@example.com", "受信者名");
MailMessage message = new MailMessage(sender, recipient);
// メールの内容を設定します
message.Subject = "テストメール";
message.BodyText = "これはプレーンテキストのテストメールです。";
// メールを送信します
smtp.SendOne(message);
ポイント:
MailAddress と MailMessage クラスを使用ConnectionProtocols.StartTls により、TLS によるセキュアな通信を確立以下のスクリーンショットは、上記のコードで実際に送信されたメールの内容です。

以下は Gmail の SMTP を使用して、HTML メールを複数の宛先に送信し、添付ファイルを追加する例です。HTML をサポートしないメールクライアント向けにテキスト本文も設定しています。
using Spire.Email;
using Spire.Email.Smtp;
// MailAddress オブジェクトを作成します
MailAddress from = new MailAddress("your@gmail.com", "あなたの名前");
MailAddress to1 = new MailAddress("user1@example.com", "ユーザー1");
MailAddress to2 = new MailAddress("user2@example.com", "ユーザー2");
// メールメッセージを作成します
MailMessage message = new MailMessage(from, to1);
message.To.Add(to2);
message.Cc.Add(new MailAddress("cc@example.com", "CC担当者"));
message.Bcc.Add(new MailAddress("bcc@example.com"));
// メッセージの HTML 本文とテキスト本文を設定します
message.Subject = "月次レポート - 2025年6月";
message.BodyHtml = "<h2 style='color:#2E86C1;'>レポート概要</h2><p>添付のPDFレポートをご確認ください。</p>";
message.BodyText = "レポート概要 - 添付のPDFをご確認ください。";
// メールに添付ファイルを追加します
Attachment attachment = new Attachment(@"Sample.pdf");
message.Attachments.Add(attachment);
// SMTP クライアントを構成します
SmtpClient smtp = new SmtpClient();
smtp.Host = "smtp.gmail.com";
smtp.Port = 587;
smtp.Username = "your@gmail.com";
smtp.Password = "your_app_password";
smtp.ConnectionProtocols = ConnectionProtocols.StartTls;
// メールを送信します
smtp.SendOne(message);
ポイント:
MailAddress, MailMessage, Attachment, SmtpClient を使用BodyHtml + BodyText を併用することで、HTML/非対応クライアントの両方に対応To.Add(), Cc.Add(), Bcc.Add() で複数宛先を追加StartTls でセキュアに使用💡 2 段階認証を有効にしている場合、アプリ パスワード の設定が必要です。
以下は、Gmail SMTP を通じて送信された HTML メール(CC・BCC・PDF 添付あり)の表示例です。

関連チュートリアル: C# で添付ファイル付きのメールを送信する方法
このセクションでは、Spire.Email の機能を使って、埋め込み画像やバッチ送信など、さらに高度なメール送信の例を紹介します。
using Spire.Email;
using Spire.Email.Smtp;
// 画像を埋め込んだメールを準備します
MailMessage message = new MailMessage(
new MailAddress("your@domain.com", "送信者"),
new MailAddress("client@domain.com", "クライアント"));
message.Subject = "ブランディング更新";
message.BodyHtml = "<h1>新しいロゴ</h1><img src=\"cid:logo\">";
message.BodyText = "画像を見るにはHTML形式でこのメッセージをご覧ください。";
Attachment logo = new Attachment(@"C:\Images\logo.png");
logo.ContentId = "logo";
logo.DispositionType = "Inline";
message.Attachments.Add(logo);
// 2通目のメールを準備します
MailMessage message2 = new MailMessage(
new MailAddress("your@domain.com"),
new MailAddress("sales@domain.com"));
message2.Subject = "週間サマリー";
message2.BodyText = "これは自動送信された週間更新メールです。";
// SMTP クライアントを作成します
SmtpClient smtp = new SmtpClient();
smtp.Host = "smtp.domain.com";
smtp.Port = 587;
smtp.Username = "your@domain.com";
smtp.Password = "your_password";
smtp.ConnectionProtocols = ConnectionProtocols.StartTls;
// 1通のメールを送信します
smtp.SendOne(message);
// 複数のメールを一括送信します
smtp.SendSome(new List<MailMessage> { message, message2 });
ポイント:
Attachment.ContentId+DispositionType = "Inline" により、HTML 内に画像を埋め込み表示SendOne() で個別メールを送信SendSome() で複数メールをまとめて一括送信(例:定期レポートや通知)以下のスクリーンショットは、企業ロゴを埋め込んだ HTML メールの表示例です。

| エラー内容 | 主な原因 |
|---|---|
| 認証失敗 | 認証情報が間違っている、またはアプリパスワードが未設定 |
| セキュア接続が必要です | ConnectionProtocols に StartTLS または SSL が必要 |
| HTML が表示されない | BodyHtml と BodyText の両方を適切に設定していない |
| ファイルが見つかりません | 添付ファイルのパスが間違っている |
Spire.Email for .NET は、以下のようなシナリオに最適です:
SMTP ヘッダや MIME フォーマット、エンコーディング処理を意識せず、直感的に操作できる API を提供します。
Spire.Email for .NET を使えば、C# アプリケーションに信頼性の高いメール送信機能を簡単に組み込むことができます。トランザクションメール、HTML レポート、スケジュール配信など、あらゆる用途に柔軟に対応可能です。
プレーンテキスト/HTML 両対応、添付ファイル、Gmail SMTP、画像の埋め込み、複数送信など、豊富な機能を備えており、外部ライブラリに頼らずメール機能を統合できます。
メール本文や添付ファイルに表示される評価版の警告を削除するには、無償の一時ライセンスを申請してください。
フォームを記入し、指示に従ってライセンスを適用するだけで、全機能が試用可能になります。
MailMessage オブジェクトの BodyHtml プロパティに HTML を設定することで HTML メールを送信できます。HTML 非対応のクライアント向けに BodyText も併用することをおすすめします。
message.To.Add()、message.Cc.Add()、message.Bcc.Add() を使って複数宛先を追加できます。Spire.Email は To/Cc/Bcc の各フィールドに対応しています。
ASP.NET や MVC プロジェクトでも、Console アプリと同様に SmtpClient を設定し、SendOne() や SendSome() メソッドを使ってメールを送信できます。

QR コードは、ユーザー認証、モバイル決済、商品パッケージ、イベントチケットなど、現代の多くのアプリケーションで広く利用されています。これらのシーンにおいて、特にスキャン画像やアップロードファイルを処理する際、C# で QR コードを読み取るニーズは高まっています。
そのためには、精度が高く、実装が簡単なデコード手法が必要です。本チュートリアルでは、C# を使って画像から QR コードを読み取るシンプルな方法を紹介します。セットアップも少なく、簡潔に統合できます。
目次
まず、QR コードの読み取りに対応した .NET 向けバーコードライブラリを使用します。ここでは、画像ファイルやストリームから QR コードを読み取る簡単なAPIを提供する Spire.Barcode for .NET を使用します。
以下のコマンドで NuGet からインストールできます:
Install-Package Spire.Barcode
基本的な用途であれば、Free Spire.Barcode for .NET も利用可能です:
Install-Package FreeSpire.Barcode
デモとして、Visual Studio で C# コンソールアプリを作成します:
C# で画像ファイルから QR コードを読み取るには、ライブラリが提供する静的メソッド BarcodeScanner.Scan() を使用します。このメソッドは画像のパスと BarCodeType を引数として受け取り、指定したバーコードタイプ(ここでは QR コード)に一致するすべての結果を返します。
この方法は、JPG、PNG、EMF 形式の画像に対応しており、デスクトップアプリやファイルアップロードを処理するバックエンドサービスに最適です。
using Spire.Barcode;
class Program
{
static void Main(string[] args)
{
// QRコード画像を読み込む
string imagePath = @"C:\qr-code.png";
// QRコードをスキャン
string[] results = BarcodeScanner.Scan(imagePath, BarCodeType.QRCode);
// 結果を表示
foreach (string result in results)
{
Console.WriteLine("QRコードの内容: " + result + "\n");
}
}
}
QR コード画像と、C#による読み取り結果:

Web API やモダンなアプリケーションでは、画像を Stream として処理する場面がよくあります。たとえば、アップロードファイルやクラウドストレージからの読み取りなどです。
BarcodeScanner.Scan() メソッドは Stream を直接受け取ることもでき、Bitmap に変換せずにメモリストリームから QR コードを読み取れます。
using Spire.Barcode;
using System.IO;
class Program
{
static void Main(string[] args)
{
using (FileStream fs = new FileStream(@"C:\qr-code.png", FileMode.Open, FileAccess.Read))
{
// ストリームから直接QRコードを読み取る
string[] results = BarcodeScanner.Scan(fs, BarCodeType.QRCode, false);
foreach (string result in results)
{
Console.WriteLine("QRコードの内容: " + result);
}
}
}
}
この方法は、WPF や ASP.NET Core アプリでメモリ上で画像を扱う場合に特に便利です。
関連チュートリアル: C# で PDF からバーコードを読み取る方法
実際のアプリケーションでは、画像品質や入力の問題により、QR コードの認識に失敗することもあります。以下は、C# での認識精度向上とエラー対策のベストプラクティスです。
try-catch ブロックで処理を囲み、失敗時の例外処理やユーザー通知を行います:
try
{
string[] results = BarcodeScanner.Scan(imagePath, BarCodeType.QRCode);
if (results.Length == 0)
{
Console.WriteLine("QRコードが見つかりませんでした。");
}
else
{
Console.WriteLine("QRコード: " + results[0]);
}
}
catch (Exception ex)
{
Console.WriteLine("QRコードのデコード中にエラーが発生しました: " + ex.Message);
}
画像内の QR コードの正確な位置(切り抜き、マーク表示、アノテーション用途など)が必要な場合は、ScanInfo() メソッドを使って座標情報を取得できます:
BarcodeInfo[] results = BarcodeScanner.ScanInfo(imagePath, BarCodeType.QRCode);
foreach (BarcodeInfo result in results)
{
Console.WriteLine("データ: " + result.DataString);
Console.WriteLine($"座標: " + string.Join(",", result.Vertexes.Select(p => $"({p.X},{p.Y})")) + "\n");
}
これにより、各 QR コードのデータと頂点座標(四隅)が取得できます。
読み取り結果:

Spire.Barcode for .NET ライブラリの BarcodeScanner.Scan() メソッドを使用することで、画像ファイルやストリームから簡単に QR コードを読み取ることができます。
画像ファイルのパスを渡すか、WPF や Web アプリであればストリームとして読み込んでスキャナーに渡します。すべての QR コードが自動的にデコードされます。
はい、画像パスを Scan() メソッドに渡すだけで、対応しているすべてのバーコードタイプを自動で読み取れます。特定の種類(例:QR コードや Code128)のみに限定する場合は、BarCodeType を第二引数で指定します。
Spire.Barcode for .NET は、使いやすさと多様なフォーマット対応、API のシンプルさから人気があります。無料・商用いずれの用途にも対応しています。
Spire.Barcode for .NET を使用すれば、C# での QR コード読み取りは数行のコードで実装可能です。画像ファイルにもストリームにも対応しており、デスクトップ、サーバーサイド、WPF アプリケーションでも安定して動作します。最小限のセットアップで高性能な読み取り処理が行えます。
QR コードの生成、ドキュメントへの統合、リアルタイムスキャンなどへの応用も可能です。
💡すべてのバーコード読み取り機能を試したい方は、
無料の一時ライセンスを申請して、Spire.Barcode for .NET の全機能を体験してください。

C# で添付ファイル付きのメールを送信 するのは、レポートや請求書、ログの共有など、業務アプリケーションでよく求められる機能の一つです。.NET の標準ライブラリでも基本的なメール送信は可能ですが、添付ファイルの扱いやエンコーディング、動的に生成されるファイルの送信など、やや複雑な処理が必要になる場合があります。
この記事では、C# でメールにファイルを添付して送信する方法 を、具体的な C# コードとともにわかりやすく解説します。ローカルファイルの添付、メモリストリームやバイト配列からの添付、SMTP の設定方法などを順を追って紹介していきます。コンソールアプリや ASP.NET など、さまざまなプロジェクトに応用できる内容です。
目次
Spire.Email for .NET は、Outlook や他のメールクライアントに依存せず、C# アプリケーション内でメールの作成・送信・受信・管理を実現できるプロフェッショナルなライブラリです。SMTP、POP3、IMAP をサポートし、添付ファイルや HTML 本文、インラインリソースなども簡単に扱えます。
NuGet 経由で簡単にインストールできます:
Install-Package Spire.Email
または、公式サイトから Spire.Email をダウンロード して手動でインストールすることも可能です。
業務システムなどでは、PDF レポートなどのファイルを定期的に送信するケースが多くあります。ここでは、ローカルディスク上のファイル(例:PDF)を添付し、Spire.Email を使って C# から送信する基本的な方法を紹介します。
主なステップは以下の通りです:
サンプルコード
この実践的な例では、C#を使用して添付ファイル付きのメールを送信する方法を、わずか数行のコードで明確に説明しています。
using Spire.Email;
using Spire.Email.Smtp;
class Program
{
static void Main()
{
try
{
// 差出人、宛先、CC のメールアドレスを作成
MailAddress addressFrom = new MailAddress("このメールアドレスはスパムボットから保護されています。閲覧するにはJavaScriptを有効にする必要があります。", "送信者名");
MailAddress addressTo = new MailAddress("このメールアドレスはスパムボットから保護されています。閲覧するにはJavaScriptを有効にする必要があります。", "受信者名");
MailAddress addressCc = new MailAddress("このメールアドレスはスパムボットから保護されています。閲覧するにはJavaScriptを有効にする必要があります。", "CC 名");
// メールメッセージを作成し、差出人と宛先を設定
MailMessage message = new MailMessage(addressFrom, addressTo);
// CC を追加
message.Cc.Add(addressCc);
// 件名と本文(HTML)を設定
message.Subject = "2025年6月分 月次レポート";
message.BodyHtml = "<div style='font-family:Meiryo, sans-serif; font-size:14px; color:#333; line-height:1.8;'>" +
"<p>関係者各位</p>" +
"<p>いつもお世話になっております。</p>" +
"<p>2025年6月分の<strong style='color:#2E86C1;'>月次レポート</strong>を添付いたしましたので、ご確認ください。</p>" +
"<p>ご不明な点がございましたら、お気軽にご連絡ください。</p>" +
"<p style='margin-top:30px;'>どうぞよろしくお願いいたします。</p>" +
"<p style='font-style:italic; color:#555;'>送信者名</p>" +
"</div>";
// 添付ファイルを追加
string filePath = @"Sample.pdf";
Attachment attachment = new Attachment(filePath);
message.Attachments.Add(attachment);
// SMTP クライアントの設定
SmtpClient smtp = new SmtpClient();
smtp.Host = "smtp.yourcompany.com";
smtp.Port = 587;
smtp.Username = "your_username";
smtp.Password = "your_password";
smtp.ConnectionProtocols = ConnectionProtocols.StartTls;
// メールを送信
smtp.SendOne(message);
// 成功メッセージ
Console.WriteLine("メールを正常に送信しました。");
}
catch (Exception ex)
{
// エラーメッセージ
Console.WriteLine("メールの送信に失敗しました。");
Console.WriteLine("エラー内容: " + ex.Message);
}
}
}
実行すると、以下のように PDF を添付したメールが送信されます。

ドキュメントや画像をリアルタイムで生成して添付したい場合、ファイルを保存せずにそのまま添付できると便利です。Spire.Email では、MemoryStream や byte[] から直接添付が可能です。
メモリストリームからPDFを添付する:
using System.IO;
using Spire.Email;
String filePath = @"Sample.pdf";
MemoryStream stream = new MemoryStream(File.ReadAllBytes(filePath));
Attachment attachment = new Attachment(stream, Path.GetFileName(filePath);
message.Attachments.Add(attachment);
バイト配列からも添付できます:
String filePath = @"Sample.pdf";
byte[] fileBytes = File.ReadAllBytes(filePath);
MemoryStream memStream = new MemoryStream(fileBytes);
Attachment imgAttachment = new Attachment(memStream, Path.GetFileName(filePath));
message.Attachments.Add(imgAttachment);
添付ファイル名には拡張子(.pdf, .xlsx など)を必ず含めてください。MIME タイプの判別に影響します。
Outlook(Microsoft 365)の SMTP サーバーを利用してメールを送信することも可能です。設定は以下の通りです。
Outlook SMTP 設定
smtp.Host = "smtp.office365.com";
smtp.Port = 587;
smtp.Username = "このメールアドレスはスパムボットから保護されています。閲覧するにはJavaScriptを有効にする必要があります。";
smtp.Password = "your_password";
smtp.ConnectionProtocols = ConnectionProtocols.StartTls;
TLS や STARTTLS にも対応しているため、セキュアな通信が可能です。
実際のビジネスシナリオでは、プロジェクトの進捗レポートを複数の受信者に送信し、それぞれにパーソナライズされた内容を含める必要があることがよくあります。Spire.Email for .NET を使用すれば、添付ファイル付きで挨拶文をカスタマイズした個別メールを、シンプルな C# アプリケーション内で簡単に送信できます。
以下の例では、プロジェクトの進捗レポートを複数の顧客に送信する方法を紹介します。挨拶文に受信者名を動的に挿入し、PDF や Excel ファイルを添付しています。
完全なコード例
using Spire.Email;
using Spire.Email.Smtp;
class Program
{
static void Main()
{
// 差出人を定義
MailAddress addressFrom = new MailAddress("このメールアドレスはスパムボットから保護されています。閲覧するにはJavaScriptを有効にする必要があります。", "送信者");
// 宛先リストを定義(名前とメールアドレス)
List<MailAddress> recipients = new List<MailAddress>
{
new MailAddress("このメールアドレスはスパムボットから保護されています。閲覧するにはJavaScriptを有効にする必要があります。", "営業チームA"),
new MailAddress("このメールアドレスはスパムボットから保護されています。閲覧するにはJavaScriptを有効にする必要があります。", "マネージャーB"),
new MailAddress("このメールアドレスはスパムボットから保護されています。閲覧するにはJavaScriptを有効にする必要があります。", "サポートチームC")
};
// 添付ファイルを定義
string[] attachmentFiles = { @"Sample.pdf", @"Sample.xlsx" };
// SMTP 設定(1回だけ)
SmtpClient smtp = new SmtpClient();
smtp.Host = "smtp.yourcompany.com";
smtp.Port = 587;
smtp.Username = "your_username";
smtp.Password = "your_password";
smtp.ConnectionProtocols = ConnectionProtocols.StartTls;
// 各宛先に個別にメールを送信
foreach (var recipient in recipients)
{
try
{
// 宛先ごとに新しいメールメッセージを作成
MailMessage message = new MailMessage(addressFrom, recipient);
message.Subject = "2025年第2四半期 プロジェクト進捗報告";
// 宛名をあいさつに使用
string greetingName = string.IsNullOrEmpty(recipient.DisplayName)
? "ご担当者様"
: recipient.DisplayName + " 様";
// 本文(HTML形式)
message.BodyHtml = $@"
<div style='font-family:Meiryo, sans-serif; font-size:14px; color:#333; line-height:1.8;'>
<p>{greetingName}</p>
<p>いつも大変お世話になっております。</p>
<p>2025年第2四半期の<strong>プロジェクト進捗報告書</strong>を添付いたします。内容は以下の通りです:</p>
<ul style='padding-left:20px; margin:0;'>
<li>達成したマイルストーン</li>
<li>未完了のタスク</li>
<li>主要な考察・所見</li>
</ul>
<p>ご質問やご不明点などがございましたら、お気軽にご連絡ください。</p>
<p style='margin-top:30px;'>引き続きどうぞよろしくお願いいたします。<br><strong>送信者</strong></p>
</div>";
// 添付ファイルを追加
foreach (string file in attachmentFiles)
{
Attachment attachment = new Attachment(file);
message.Attachments.Add(attachment);
}
// メールを送信
smtp.SendOne(message);
Console.WriteLine($"{recipient.Address} にメールを送信しました。");
}
catch (Exception ex)
{
Console.WriteLine($"{recipient.Address} へのメール送信に失敗しました。");
Console.WriteLine("エラー内容: " + ex.Message);
}
}
}
}
このコードは、C# コンソールアプリや ASP.NET アプリでも簡単に応用できます。
以下は送信されたメールのスクリーンショットです。

Spire.Email を使えば、これらの問題にもスマートに対応できます。
今回は、Spire.Email for .NET を使って、C# で添付ファイル付きメールを送信する方法を一通り紹介しました。ローカルファイル、ストリーム、Outlook 対応まで、実用的なパターンに対応しています。
.NET アプリでメール機能を簡単に導入したい方は、一時ライセンスを申請 してぜひお試しください。
message.Attachments.Add(new Attachment(@"file.pdf"));
メモリストリームやバイト配列からの添付にも対応しています。
添付後に SmtpClient.SendOne() を使って送信します。SMTP の設定や認証情報を正しく構成してください。
はい。Spire.Email for .NET は .NET Core, .NET Standard, .NET 5+, .NET Framework, ASP.NET, MonoAndroid, Xamarin.iOS に対応しています。
もちろん可能です:
message.Attachments.Add(new Attachment(@"report.xlsx"));
有効なファイルパスを指定し、アプリからアクセス可能である必要があります。

Python を使って PDF ファイルを読み取ることは、ドキュメントの自動化、コンテンツの分析、データのスクレイピングといった作業において非常に重要です。契約書や報告書、請求書、学術論文など、どのような PDF であっても、その内容にプログラムからアクセスできれば、作業の効率が飛躍的に向上し、より高度なワークフローを構築できます。
PythonでPDFのテキスト、表、画像、メタデータなどを正確に読み取るためには、信頼性の高いPDFリーダーライブラリが必要です。本ガイドでは、サードパーティツールに依存せず、豊富な機能を備えたプロフェッショナルかつ使いやすいライブラリ Spire.PDF for Python を使って、PythonでPDFを読み取る方法をご紹介します。
目次
Spire.PDF for Python は、PDFのテキスト、表、画像、メタデータを高精度かつ簡単に読み取ることができるライブラリです。
pipを使用したインストール方法:
pip install spire.pdf
小規模なPDF処理を行う場合は、Free Spire.PDF for Python をご利用いただくことも可能です:
pip install spire.pdf.free
PDFファイルの内容を取得する前に、まずメモリ上に読み込む必要があります。Spire.PDF を使えば、ローカルファイルからでも、バイト配列などのメモリ経由でもPDFを簡単に読み込めます。
PdfDocument.LoadFromFile() を使用して、PDFファイルをローカルから読み込みます。
from spire.pdf import PdfDocument
# PdfDocument のインスタンスを作成します
pdf = PdfDocument()
# PDF ドキュメントを読み込みます
pdf.LoadFromFile("sample.pdf")
API経由で受信したPDFや一時ファイルなど、ディスクに保存せずにバイト配列から直接読み込むには、Stream オブジェクトを使います。
from spire.pdf import PdfDocument, Stream
# PDF ファイルをバイト配列として読み込みます
with open("sample.pdf", "rb") as f:
byte_data = f.read()
# バイト配列を使ってストリームを作成します
pdfStream = Stream(byte_data)
# ストリームを使って PdfDocument を作成します
pdf = PdfDocument(pdfStream)
PDF内のテキスト情報を抽出することは、文書解析や自動処理における最も基本的な操作です。Spire.PDF を使えば、全体のテキストやページ単位、指定エリアのテキストも簡単に取得できます。
全ページをループし、PdfTextExtractor.ExtractText() を使ってテキストを抽出します。
from spire.pdf import PdfDocument, PdfTextExtractor, PdfTextExtractOptions
# PdfDocument のインスタンスを作成します
pdf = PdfDocument()
# PDF ドキュメントを読み込みます
pdf.LoadFromFile("sample.pdf")
all_text = ""
# 各ページをループ処理します
for pageIndex in range(pdf.Pages.Count):
page = pdf.Pages.get_Item(pageIndex)
# PdfTextExtractor のインスタンスを作成します
text_extractor = PdfTextExtractor(page)
# テキスト抽出オプションを設定します
options = PdfTextExtractOptions()
options.IsExtractAllText = True
options.IsSimpleExtraction = True
# 現在のページからテキストを抽出します
all_text += text_extractor.ExtractText(options)
print(all_text)
サンプルテキストの内容を取得しました:

領域を指定して、PDFの一部分のみからテキストを取得することも可能です。必要な情報がレイアウトの特定部分にある場合に便利です。
from spire.pdf import RectangleF, PdfDocument, PdfTextExtractor, PdfTextExtractOptions
# PDF ファイルを読み込みます
pdf = PdfDocument()
pdf.LoadFromFile("sample.pdf")
# 最初のページを取得します
page = pdf.Pages.get_Item(0)
# PdfTextExtractor のインスタンスを作成します
textExtractor = PdfTextExtractor(page)
# PdfTextExtractOptions を設定してテキスト抽出範囲を指定します
options = PdfTextExtractOptions()
area = RectangleF.FromLTRB(0, 200, page.Size.Width, 250) # x, y, 幅, 高さ
options.ExtractArea = area
options.IsSimpleExtraction = True
# 指定した範囲からテキストを抽出します
text = textExtractor.ExtractText(options)
text = text.split("Spire.PDF for Python.")[1]
print(text)
PDFページの領域から読み込まれたテキスト:

PDFの中には表形式でデータが記載されているケースが多く、特に請求書や明細、帳票などに頻出します。Spire.PDF は、レイアウト構造を認識して表を抽出する機能を持っており、PdfTableExtractor.ExtractTable() を使用して行単位・セル単位の情報を取得できます。
from spire.pdf import PdfDocument, PdfTableExtractor
# PDF ファイルを読み込みます
pdf = PdfDocument()
pdf.LoadFromFile("sample.pdf")
# PdfTableExtractor のインスタンスを作成します
table_extractor = PdfTableExtractor(pdf)
# 最初のページから表を抽出します
tables = table_extractor.ExtractTable(0)
for table in tables:
# 行数と列数を取得します
row_count = table.GetRowCount()
column_count = table.GetColumnCount()
# すべての行をループ処理します
for i in range(row_count):
table_row = []
# すべての列をループ処理します
for j in range(column_count):
# セルのテキストを取得します
cell_text = table.GetText(i, j)
table_row.append(cell_text)
print(table_row)
上記のコードを使用して抽出された表の内容:

画像ベースのPDFからテーブルを抽出したい場合は、OCRを併用する必要があります:Pythonで画像からテキストを認識する方法
PDFにはロゴやスキャン画像などのビジュアル要素が含まれていることがあります。Spire.PDF を使えば、ページに含まれる画像を抽出・保存できます。PdfImageHelper.GetImagesInfo() を使用して各ページの画像情報を取得し、保存します。
from spire.pdf import PdfDocument, PdfImageHelper
pdf = PdfDocument()
pdf.LoadFromFile("sample.pdf")
page = pdf.Pages.get_Item(0)
image_helper = PdfImageHelper()
images_info = image_helper.GetImagesInfo(page)
for i in range(len(images_info)):
images_info[i].Image.Save("output/Images/image" + str(i) + ".png")
PDFファイルから読み込まれた画像:

PDFには、タイトル、著者、キーワードなどのメタ情報が含まれています。これらを取得することで、ファイルの整理や検索の効率が向上します。DocumentInformation プロパティからアクセス可能です。
from spire.pdf import PdfDocument
pdf = PdfDocument()
pdf.LoadFromFile("sample.pdf")
properties = pdf.DocumentInformation
print("Title: " + properties.Title)
print("Author: " + properties.Author)
print("Subject: " + properties.Subject)
print("Keywords: " + properties.Keywords)
PDF文書から読み取ったメタデータ:

はい。Spire.PDF for Python を使えば、テキスト・表・画像・メタ情報などを簡単に取得できます。
はい。pipでインストールすれば、Jupyter Notebook環境でもそのまま使用できます。
PdfTextExtractor.ExtractText() を使って、各ページごとの可視テキストを抽出可能です。
LoadFromStream() を使えば、メモリ上のバイトデータから直接PDFを読み込めます。
Spire.PDF for Python を使えば、PythonでのPDFファイル読み取りを簡単に実現できます。テキスト、表、画像、メタデータのすべてに対応し、ドキュメント自動化やデータ分析に最適です。
大規模なPDF処理や全機能の活用には、無料ライセンスを申請 してフルバージョンをご活用ください。

C#でPDFファイルからバーコードを読み取ることは、多くのビジネスワークフローで実用的なニーズです。特にスキャン済みの書類やデジタルフォームを自動処理する場合に頻繁に使用されます。物流、金融、医療、製造などの分野では、PDF内に画像として埋め込まれたバーコード、またはベクターグラフィックスとして描かれたバーコードが含まれていることがよくあります。
本記事では、C# を使用して PDF からバーコードを読み取るための 2 つの実践的な方法を紹介します。1 つは PDF ページに埋め込まれた画像を抽出してスキャンする方法、もう 1 つはページ全体を画像としてレンダリングし、その画像からバーコードを認識する方法です。いずれの方法も、1次元バーコードと2次元バーコードの両方に対応しています。
目次
C#でPDFからバーコードを認識するには、以下の環境を用意してください:
NuGet パッケージマネージャーで以下のコマンドを実行:
Install-Package Spire.Barcode
Install-Package Spire.PDF
バーコードの格納方法に応じて、以下のいずれかの方法を選んでください。
スキャンされたPDFでは、バーコードは画像として埋め込まれていることが多いため、この方法が効果的です。BarcodeScanner.ScanOne() メソッドを使って画像から1つのバーコードを読み取ることができます。
using Spire.Barcode;
using Spire.Pdf;
using Spire.Pdf.Utilities;
using System.Drawing;
namespace ReadPDFBarcodeByExtracting
{
class Program
{
static void Main(string[] args)
{
// PDFファイルを読み込む
PdfDocument pdf = new PdfDocument();
pdf.LoadFromFile("Sample.pdf");
// ページの画像情報を取得する
PdfPageBase page = pdf.Pages[0];
PdfImageHelper imageHelper = new PdfImageHelper();
PdfImageInfo[] imagesInfo = imageHelper.GetImagesInfo(page);
// ページ内の画像を順に処理してバーコードを読み取る
int index = 0;
foreach (PdfImageInfo imageInfo in imagesInfo)
{
Image image = imageInfo.Image;
string scanResult = BarcodeScanner.ScanOne((Bitmap)image);
Console.WriteLine($"第 {index + 1} 個の画像のスキャン結果:\n" + scanResult + "\n");
index++;
}
}
}
}
以下は、方法①(画像抽出)でのスキャン結果イメージです:

🔍 おすすめのケース:スキャンされたPDFや、バーコードが画像として含まれている場合。
PDF内のバーコードが画像ではなく、ベクター形式で描画されている場合には、この方法が有効です。BarcodeScanner.Scan() メソッドを使えば、1つの画像から複数のバーコードを一括で読み取ることが可能です。
using Spire.Barcode;
using Spire.Pdf;
using System.Drawing;
namespace ReadPDFBarcodeByExtracting
{
class Program
{
static void Main(string[] args)
{
// PDFファイルを読み込む
PdfDocument pdf = new PdfDocument();
pdf.LoadFromFile("Sample.pdf");
// ドキュメントの各ページを処理し、ページを画像として保存
for (int i = 0; i < pdf.Pages.Count; i++)
{
Image image = pdf.SaveAsImage(i);
// 画像内のすべてのQRコード情報をスキャンして認識する
string[] scanResults = BarcodeScanner.Scan((Bitmap)image);
for (int j = 0; j < scanResults.Length; j++)
{
Console.WriteLine($"第 {i + 1} ページの第 {j + 1} 番目のバーコードのスキャン結果:\n" + scanResults[j] + "\n");
}
}
}
}
}
以下は、方法②(ページ全体のレンダリング)によるスキャン結果の例です:

🔍 おすすめのケース:PDF内のバーコードが画像ではなく描画されたコンテンツである場合。
| ケース | 推奨される方法 |
|---|---|
| スキャンされたページ | 埋め込み画像の抽出 |
| デジタルPDF・描画バーコード | ページ全体の画像化 |
| 混在・不明な構造 | 両方を試すのがおすすめ |
構造が不明なPDFには、両方の方法を併用することでより確実な認識が可能です。
Q: 複数ページのPDFでも対応できますか?
A: はい、すべてのページをループ処理することで対応可能です。
Q: 1ページに複数のバーコードがある場合は?
A: BarcodeScanner.Scan() メソッドを使えば、複数のバーコードを一括で検出できます。
Q: 解像度を上げれば認識精度は向上しますか?
A: はい。たとえば、300 DPI以上で画像化すると、小さなバーコードでも認識精度が向上します。SaveAsImage(int, PdfImageType, int, int) を使用してDPIを指定できます。
Q: 無料で使用できますか?
A: はい。 Free Spire.Barcode for .NET と Free Spire.PDF for .NET の組み合わせで基本的なバーコード読み取りが可能です。ただし、無料版には機能制限があります。商用利用や高機能が必要な場合は、無料トライアルライセンスを申請して評価することもできます。
C# を使って PDF ファイルからバーコードを読み取るには、画像抽出とページレンダリングという 2 つの方法があり、それぞれのPDF形式に応じて柔軟に対応できます。Spire.Barcode と Spire.PDF を活用すれば、効率的かつ確実なバーコード認識が実現できます。
ピボットテーブルは、データをさまざまな視点から整理、集計、分析できる柔軟な手段であり、有益なインサイトの発見や的確な意思決定に役立ちます。カテゴリ、日付、数値などの条件に基づいてデータを簡単に並べ替えたり要約したりできるため、複雑なデータセットの処理や多角的な比較分析に特に便利です。
本記事では、Spire.XLS for Python を使用して、Python で Excel 文書内のピボットテーブルを作成または操作する方法を紹介します。
この操作には、Spire.XLS for Python と plum-dispatch v1.7.4 が必要です。これらは、Spire.XLS for Python の公式ウェブサイトから手動でダウンロードするか、以下の pip コマンドでインストールできます。
pip install Spire.XLS
Spire.XLS for Python は、Excel 文書内でピボットテーブルを操作するための PivotTable クラスを提供しています。既存の Excel ワークシートのデータに基づいてピボットテーブルを作成するには、以下の手順に従ってください。
from spire.xls import *
from spire.xls.common import *
# Workbook オブジェクトを作成します
workbook = Workbook()
# サンプルの Excel ドキュメントを読み込みます
workbook.LoadFromFile("Sample.xlsx")
# 最初のワークシートを取得します
sheet = workbook.Worksheets[0]
# データソース範囲を選択します
cellRange = sheet.Range["A1:I11"]
piVotCache = workbook.PivotCaches.Add(cellRange)
# ピボットテーブルをワークシートに追加し、位置とキャッシュを設定します
pivotTable = sheet.PivotTables.Add("ピボットテーブル1", sheet.Range["A13"], piVotCache)
# 「Region」と「Product」フィールドを行エリアに追加します
regionField = pivotTable.PivotFields["支社名"]
regionField.Axis = AxisTypes.Row
pivotTable.Options.RowHeaderCaption = "支社名"
productField = pivotTable.PivotFields["商品カテゴリ"]
productField.Axis = AxisTypes.Row
# 「Quantity」と「Amount」フィールドを値エリアに追加します
pivotTable.DataFields.Add(pivotTable.PivotFields["売上個数"], "売上個数合計", SubtotalTypes.Sum)
pivotTable.DataFields.Add(pivotTable.PivotFields["単価(円)"], "売上金額合計(円)", SubtotalTypes.Sum)
# ピボットテーブルに組み込みスタイルを適用します
pivotTable.BuiltInStyle = PivotBuiltInStyles.PivotStyleMedium11
# 列幅を設定します
sheet.SetColumnWidth(1, 16)
sheet.SetColumnWidth(2, 16)
sheet.SetColumnWidth(3, 16)
# ドキュメントを保存します
workbook.SaveToFile("output/ピボットテーブル.xlsx")
workbook.Dispose()

特定のフィールドを並べ替えるには、PivotTable.PivotFields[index] プロパティでフィールドを取得し、PivotField.SortType プロパティを使って並べ替え方法を指定します。以下は、特定のフィールドの値に基づいてピボットテーブルを並べ替える手順です。
from spire.xls import *
# Workbook オブジェクトを作成します
workbook = Workbook()
# Excel ドキュメントを読み込みます
workbook.LoadFromFile("output/ピボットテーブル.xlsx")
# 最初のワークシートを取得します
sheet = workbook.Worksheets[0]
# 指定したピボットテーブルを取得します
pivotTable = sheet.PivotTables[0]
# 指定したフィールドを取得します
idField = pivotTable.PivotFields["支社名"]
# 「Order ID」フィールドの列のデータを並べ替えます(降順)
idField.SortType = PivotFieldSortType.Descending
# ドキュメントを保存します
workbook.SaveToFile("output/データ並べ替え.xlsx")
workbook.Dispose()

ピボットフィールドの詳細を折りたたむには、PivotField.HideItemDetail(string itemValue, bool isHiddenDetail) メソッドを使用し、第 2 引数に true を設定します。詳細を再表示するには false を設定します。以下が操作手順です。
from spire.xls import *
# Workbook オブジェクトを作成します
workbook = Workbook()
# サンプルの Excel ドキュメントを読み込みます
workbook.LoadFromFile("output/ピボットテーブル.xlsx")
# 最初のワークシートを取得します
sheet = workbook.Worksheets[0]
# 指定したピボットテーブルを取得します
pivotTable = sheet.PivotTables[0]
# 指定したフィールドを取得します
regoinField = pivotTable.PivotFields["支社名"]
# 「Region」フィールドの選択したアイテムの詳細を非表示にします
regoinField.HideItemDetail("東京支社", True)
regoinField.HideItemDetail("福岡支社", True)
# ドキュメントを保存します
workbook.SaveToFile("output/行を非表示にする.xlsx")
workbook.Dispose()

結果ドキュメントから評価メッセージを削除したい場合、または機能制限を取り除く場合は、についてこのメールアドレスはスパムボットから保護されています。閲覧するにはJavaScriptを有効にする必要があります。にお問い合わせ、30 日間有効な一時ライセンスを取得してください。
Excel の数式は、スプレッドシート内のデータに対して演算や処理を行うための式です。基本的な加算・減算・乗算・除算に加え、統計処理、日付や時間の計算、論理判定など、さまざまな高度な関数も利用できます。Excel に数式を取り入れることで、作業の効率化、エラーの削減、データからの洞察取得を実現できます。
本記事では、Spire.XLS for Python を使用して、Excel ファイルに数式を追加・読み取る方法 を詳しく解説します。
この操作には、Spire.XLS for Python と plum-dispatch v1.7.4 が必要です。これらは、Spire.XLS for Python の公式ウェブサイトから手動でダウンロードするか、以下の pip コマンドでインストールできます。
pip install Spire.XLS
Spire.XLS for Python では、特定のセルに数式を追加するために Worksheet.Range[rowIndex, columnIndex].Formula プロパティを使用します。以下は、数式を追加する具体的な手順です。
from spire.xls import *
# Workbook クラスのオブジェクトを作成します
workbook = Workbook()
# 最初のワークシートを取得します
sheet = workbook.Worksheets[0]
# 変数 currentRow と currentFormula を宣言します
currentRow = 1
currentFormula = ""
# ワークシートにテキストを追加し、セルのスタイルを設定します
sheet.Range[currentRow, 1].Text = "テストデータ:"
sheet.Range[currentRow, 1].Style.Font.IsBold = True
sheet.Range[currentRow, 1].Style.FillPattern = ExcelPatternType.Solid
sheet.Range[currentRow, 1].Style.KnownColor = ExcelColors.LightGreen1
sheet.Range[currentRow, 1].Style.Borders[BordersLineType.EdgeBottom].LineStyle = LineStyleType.Medium
currentRow += 1
# ワークシートに数値データを追加します
sheet.Range[currentRow, 1].NumberValue = 7.3
sheet.Range[currentRow, 2].NumberValue = 5
sheet.Range[currentRow, 3].NumberValue = 8.2
sheet.Range[currentRow, 4].NumberValue = 4
sheet.Range[currentRow, 5].NumberValue = 3
sheet.Range[currentRow, 6].NumberValue = 11.3
currentRow += 2
# ワークシートにテキストを追加し、セルのスタイルを設定します
sheet.Range[currentRow, 1].Text = "数式"
sheet.Range[currentRow, 2].Text = "結果"
sheet.Range[currentRow, 1, currentRow, 2].Style.Font.IsBold = True
sheet.Range[currentRow, 1, currentRow, 2].Style.KnownColor = ExcelColors.LightGreen1
sheet.Range[currentRow, 1, currentRow, 2].Style.FillPattern = ExcelPatternType.Solid
sheet.Range[currentRow, 1, currentRow, 2].Style.Borders[BordersLineType.EdgeBottom].LineStyle = LineStyleType.Medium
currentRow += 1
# --- 代表的な数式・関数のみ追加 ---
# 文字列
currentFormula = "=\"Hello\""
sheet.Range[currentRow, 1].Text = "'" + currentFormula
sheet.Range[currentRow, 2].Formula = currentFormula
currentRow += 1
# 整数
currentFormula = "=300"
sheet.Range[currentRow, 1].Text = "'" + currentFormula
sheet.Range[currentRow, 2].Formula = currentFormula
currentRow += 1
# 論理値(ブール値)
currentFormula = "=false"
sheet.Range[currentRow, 1].Text = "'" + currentFormula
sheet.Range[currentRow, 2].Formula = currentFormula
currentRow += 1
# セル参照
currentFormula = "=Sheet1!$B$2"
sheet.Range[currentRow, 1].Text = "'" + currentFormula
sheet.Range[currentRow, 2].Formula = currentFormula
currentRow += 1
# SUM(合計)
currentFormula = "=SUM(18,29)"
sheet.Range[currentRow, 1].Text = "'" + currentFormula
sheet.Range[currentRow, 2].Formula = currentFormula
currentRow += 1
# AVERAGE(平均)
currentFormula = "=AVERAGE(Sheet1!$D$2:F$2)"
sheet.Range[currentRow, 1].Text = "'" + currentFormula
sheet.Range[currentRow, 2].Formula = currentFormula
currentRow += 1
# IF(条件分岐)
currentFormula = "=IF(4>2,\"Yes\",\"No\")"
sheet.Range[currentRow, 1].Text = "'" + currentFormula
sheet.Range[currentRow, 2].Formula = currentFormula
currentRow += 1
# 1列目、2列目、3列目の列幅を設定します
sheet.SetColumnWidth(1, 32)
sheet.SetColumnWidth(2, 16)
sheet.SetColumnWidth(3, 16)
# セルスタイルを作成します
style = workbook.Styles.Add("Style")
style.HorizontalAlignment = HorizontalAlignType.Left
sheet.ApplyStyle(style)
# 結果ファイルを保存します
workbook.SaveToFile("output/Excelに数式を挿入.xlsx", ExcelVersion.Version2016)
workbook.Dispose()

Excel ワークシート内の数式を読み取るには、すべてのセルをループし、Cell.HasFormula プロパティで数式の有無を確認した上で、CellRange.Formula プロパティでその内容を取得します。以下が具体的な手順です。
from spire.xls import *
# Workbook クラスのオブジェクトを作成する
workbook = Workbook()
# Excel ファイルを読み込む
workbook.LoadFromFile("output/Excelに数式を挿入.xlsx")
# 最初のワークシートを取得する
sheet = workbook.Worksheets[0]
# ワークシートの使用範囲を取得する
usedRange = sheet.AllocatedRange
# 空のリストを作成する
list = []
# 使用範囲の各セルをループ処理する
for cell in usedRange:
# セルに数式が含まれているか確認する
if cell.HasFormula:
# セルのアドレス(例:B3)を取得する
cellName = cell.RangeAddressLocal
# セルに設定されている数式を取得する
formula = cell.Formula
# セル名と数式をリストに追加する(日本語で)
list.append(cellName + " の数式: " + formula)
# リストの内容をテキストファイルに書き込む(日本語ファイル名)
with open("output/数式一覧.txt", "w", encoding="utf-8") as text_file:
for item in list:
text_file.write(item + "\n")
# Workbook オブジェクトを解放する
workbook.Dispose()

結果ドキュメントから評価メッセージを削除したい場合、または機能制限を取り除く場合は、についてこのメールアドレスはスパムボットから保護されています。閲覧するにはJavaScriptを有効にする必要があります。にお問い合わせ、30 日間有効な一時ライセンスを取得してください。
Excel のテキストボックスは、ワークシート、グラフ、その他のオブジェクトに補足情報や注釈を追加するための柔軟な手段です。データ自体には直接関係しない説明文、ラベル、コメントなどを表示するのに役立ちます。
本記事では、Spire.XLS for Python を使用して、Excel にテキストボックスを追加・更新・削除する方法について解説します。
この操作には、Spire.XLS for Python と plum-dispatch v1.7.4 が必要です。これらは、Spire.XLS for Python の公式ウェブサイトから手動でダウンロードするか、以下の pip コマンドでインストールできます。
pip install Spire.XLS
テキストボックスは、Worksheet.TextBoxes.AddTextBox() メソッドを使って、ワークシートの任意の位置に追加できます。TextBox オブジェクトには、テキスト内容や書式を設定するためのプロパティが用意されています。
Spire.XLS for Python を使ってテキストボックスを作成する手順は以下の通りです。
from spire.xls import *
# Workbook オブジェクトを作成します
workbook = Workbook()
# 最初のワークシートを取得します
sheet = workbook.Worksheets[0]
# ワークシートにテキストボックスを追加し、位置とサイズを指定します
textBox = sheet.TextBoxes.AddTextBox(5, 3, 120, 400)
# テキストボックスの塗りつぶしの色を設定します
textBox.Fill.FillType = ShapeFillType.SolidColor
textBox.Fill.ForeKnownColor = ExcelColors.Gray25Percent
# テキストボックスにテキストを追加し、テキストの配置を設定します
textBox.Text = "これは Excel のテキストボックスです。"
textBox.HAlignment = CommentHAlignType.Center
textBox.VAlignment = CommentVAlignType.Center
# テキストのフォントを設定します
font = workbook.CreateFont()
font.FontName = "Yu Gocthic UI"
font.Size = 18
font.IsBold = True
font.Color = Color.get_DarkCyan()
richText = textBox.RichText
rt = RichText(richText)
rt.SetFont(0, len(textBox.Text) - 1, font)
# ワークブックを Excel ファイルとして保存します
workbook.SaveToFile('output/テキストボックスを挿入.xlsx', ExcelVersion.Version2016)
workbook.Dispose()

既存のテキストボックスは、Worksheet.TextBoxes[index] プロパティで取得し、TextBox.Text プロパティを通じて内容を取得・編集できます。
以下は、Spire.XLS for Python を使用してテキストボックスを更新する手順です。
from spire.xls import *
# Workbook オブジェクトを作成します
workbook = Workbook()
# Excel ファイルを読み込みます
workbook.LoadFromFile('output/テキストボックスを挿入.xlsx')
# 最初のワークシートを取得します
sheet = workbook.Worksheets[0]
# 最初のテキストボックスを取得します
tb = sheet.TextBoxes[0]
# テキストボックスのテキストを変更します
tb.Text = "このテキストボックスのテキストは変更されました。"
# ワークブックを別の Excel ファイルとして保存します
workbook.SaveToFile('output/テキストボックスを更新.xlsx', ExcelVersion.Version2016)
workbook.Dispose()

特定のテキストボックスは、Worksheet.TextBoxes[index].Remove() メソッドを使用して削除できます。手順は以下の通りです。
from spire.xls import *
# Workbook オブジェクトを作成します
workbook = Workbook()
# Excel ファイルを読み込みます
workbook.LoadFromFile('output/テキストボックスを挿入.xlsx')
# 最初のワークシートを取得します
sheet = workbook.Worksheets[0]
# 最初のテキストボックスを削除します
sheet.TextBoxes[0].Remove()
# ワークブックを別の Excel ファイルとして保存します
workbook.SaveToFile('output/テキストボックスを削除.xlsx', ExcelVersion.Version2016)
workbook.Dispose()
結果ドキュメントから評価メッセージを削除したい場合、または機能制限を取り除く場合は、についてこのメールアドレスはスパムボットから保護されています。閲覧するにはJavaScriptを有効にする必要があります。にお問い合わせ、30 日間有効な一時ライセンスを取得してください。