チュートリアル

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

Super User

Super User

C# で Excel ファイルを作成する流れ

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 ファイルの新規作成

小規模なデータ出力やテンプレートの生成には、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ファイル: C# で作成した従業員情報の Excel ワークシート

この方法は Excel がインストールされていない環境でも動作し、簡単なデータ出力や設定ファイルの作成に最適です。

C# で DataTable を 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ファイル:

C# で DataTable を Excel にエクスポートした例

この手法は、在庫リスト、売上レポート、分析結果などの出力に広く活用されています。

関連情報:DataTable と Excel の相互変換方法(C#)

C# で Excel に書式設定と数式を適用

見やすくプロフェッショナルな 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ファイル:

C# で書式と数式を含む Excel レポートの例

売上明細や会計帳簿など、視認性と自動集計が求められるシーンに最適です。

より高度な数値フォーマットについては、こちらをご覧ください: Excel セルの数値フォーマットを設定する方法(C#/VB.NET)

ASP.NET Core で Excel ファイルを生成

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ファイル:

ASP.NET Core で生成した進捗レポートの Excel ファイル C#

このアプローチは、社内ポータル、業務ツール、データ出力 API などに幅広く活用できます。

  • ✅ 対応:ASP.NET Core 3.1、.NET 5、6、7、8
  • ✅ 対象:Razor Pages、MVC、API エンドポイントなど

ASP.NET Web Forms で Excel ファイルを生成

従来の 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ファイル:

ASP.NET Web Forms で生成したユーザー情報の Excel ファイル C#

Excel ファイルを即時出力できるため、社内システムや業務アプリに便利な仕組みです。

よくある質問(FAQ)

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 出力機能をすぐに実装できます。

👉 無料の一時ライセンスを申請 して、すべての機能を試用し、評価版の制限を解除しましょう。

Python で PDF に文字を追加するイメージ

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

おすすめポイント:

  • 外部ソフト不要で PDF 操作が可能
  • テキスト位置・書式の精密な制御に対応
  • 既存 PDF の編集、新規作成どちらにも対応
  • OS を問わず動作(Windows、macOS、Linux)

新しい PDF を作成してテキストを追加する

Python で 白紙の PDF を新たに作成し、テキストを挿入 するには、以下のように操作します。

サンプル:新規 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ファイル:

Pythonを使用して新しいPDFドキュメントを作成し、テキストを追加する

📌 ポイント: 複数行の文字列を表示するには、Y 座標を調整したり、複数回 DrawString() を使うことで実現可能です。

既存の PDF にテキストを追加する

既存の PDF ファイルに 文字を追記する には、ファイルを読み込んで任意のページを取得し、必要な位置にテキストを描画します。

よくある用途:

  • 注釈・コメントの追加
  • ステータスの記入(例:「承認済」など)
  • テンプレートへのフィールド入力

サンプル:既存 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ファイル:

Pythonを使用して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ファイル:

Pythonを使用してPDFにテキストウォーターマークを追加する

⚠ ファイルが他のプロセスによって使用中の場合、保存時に PermissionError が発生することがあります。

よくある問題とクロスプラットフォーム対応

PDF に文字を追加する際、以下のような問題が発生することがあります。主な原因と対処方法を以下にまとめます:

問題 原因 解決策
文字位置がズレる ページサイズを考慮していない ClientSizeMeasureString() を使って動的に調整
文字が表示されない フォントが未対応または不足 Arial Unicode や Noto Sans を使用し、必要に応じて埋め込み
Unicode 文字が正しく表示されない フォントが対応していない 広範な Unicode 対応フォントを選定し、埋め込む
テキストと本文が重なる Y 座標が近すぎる MeasureString() で高さを計測し、行間を調整
文書に透かしが表示される 有償版を未認証のまま使用している 無料版を使うか、一時ライセンスを申請
ファイルサイズが大きくなる フォントを埋め込んでいるため PdfFont を使ってフォント埋め込みを避ける
macOS/Linux で表示が崩れる OS 間のフォント差異や描画方式の違い クロスプラットフォームフォントを使用し、必要ならフォントを同梱配布

まとめ

Spire.PDF for Python を使えば、PDF ドキュメントに柔軟に文字を追加できます。新規作成・既存編集・バッチ処理まで対応しており、フォント・配置・スタイルも自在に調整可能です。

まずは無料版で試してみるか、一時ライセンス を取得して全機能を体験してみてください。

📌 よくある質問(FAQ)

Python で PDF に文字を追加するには?

DrawString() メソッドを使うことで、フォントや位置、スタイルを指定してテキストを描画できます。

既存の PDF に書き込みはできますか?

はい、できます。LoadFromFile() で PDF を読み込み、対象ページに DrawString() で文字を挿入できます。

テキストファイルを PDF に変換できますか?

テキスト内容を 1 行ずつ読み込み、位置を調整しながら PDF に描画することで変換可能です。

複数の PDF に同じ文字を一括追加できますか?

はい。ループ処理で PDF を順次読み込み、共通のテキストを挿入することで実現できます。

Spire.Email でメールを送信 – HTML フォーマット、SMTP 設定、添付ファイル、複数宛先対応

C# アプリケーションからメールを送信する ことは、ビジネスや業務システム開発において一般的なタスクです。プロジェクトの進捗報告、アラート通知、自動レポートなど、信頼性の高いメール送信機能は欠かせません。

この記事では、SMTP 通信とメールフォーマットを簡単に実装できる強力なコンポーネントである Spire.Email for .NET を使って、C# でメールを送信する方法を解説します。SMTP 設定、Gmail との連携、HTML/テキスト本文、ファイル添付、複数宛先の指定など、多彩な機能を紹介します。

目次

1. プロジェクトの準備

まずは .NET プロジェクト(Console App または ASP.NET)を作成し、Spire.Email for .NET パッケージを導入します。

NuGet からインストール:

Install-Package Spire.Email

または Spire.Email for .NET を手動でダウンロードし、ローカルのインストールフォルダから Spire.Email.dll を参照設定します。

2. プレーンテキストメールを SMTP 経由で送信する方法(C#)

以下の例では、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);

ポイント

  • MailAddressMailMessage クラスを使用
  • ConnectionProtocols.StartTls により、TLS によるセキュアな通信を確立

以下のスクリーンショットは、上記のコードで実際に送信されたメールの内容です。

Spire.Email を使用したプレーンテキストメールの送信

3. Gmail SMTP を使って HTML メールと添付ファイルを送信(C#)

以下は 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 を使用
  • BodyHtmlBodyText を併用することで、HTML/非対応クライアントの両方に対応
  • To.Add(), Cc.Add(), Bcc.Add() で複数宛先を追加
  • Gmail の SMTP を StartTls でセキュアに使用

💡 2 段階認証を有効にしている場合、アプリ パスワード の設定が必要です。

以下は、Gmail SMTP を通じて送信された HTML メール(CC・BCC・PDF 添付あり)の表示例です。

C# で Gmail SMTP 経由の HTML メール(添付あり)を送信

関連チュートリアル: C# で添付ファイル付きのメールを送信する方法

4. 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.ContentIdDispositionType = "Inline" により、HTML 内に画像を埋め込み表示
  • SendOne() で個別メールを送信
  • SendSome() で複数メールをまとめて一括送信(例:定期レポートや通知)

以下のスクリーンショットは、企業ロゴを埋め込んだ HTML メールの表示例です。

埋め込み画像付き HTML メール(Spire.Email)

5. よくあるエラーとトラブルシューティング

エラー内容 主な原因
認証失敗 認証情報が間違っている、またはアプリパスワードが未設定
セキュア接続が必要です ConnectionProtocolsStartTLS または SSL が必要
HTML が表示されない BodyHtmlBodyText の両方を適切に設定していない
ファイルが見つかりません 添付ファイルのパスが間違っている

6. Spire.Email の活用シーン

Spire.Email for .NET は、以下のようなシナリオに最適です:

  • 日次/週次のレポート自動配信
  • ユーザー登録完了通知
  • 注文確認メール(添付付き)
  • Web フォームからの通知
  • 埋め込み画像付きのニュースレター配信

SMTP ヘッダや MIME フォーマット、エンコーディング処理を意識せず、直感的に操作できる API を提供します。

結論

Spire.Email for .NET を使えば、C# アプリケーションに信頼性の高いメール送信機能を簡単に組み込むことができます。トランザクションメール、HTML レポート、スケジュール配信など、あらゆる用途に柔軟に対応可能です。

プレーンテキスト/HTML 両対応、添付ファイル、Gmail SMTP、画像の埋め込み、複数送信など、豊富な機能を備えており、外部ライブラリに頼らずメール機能を統合できます。

7. 無償の一時ライセンスを申請する方法

メール本文や添付ファイルに表示される評価版の警告を削除するには、無償の一時ライセンスを申請してください。

👉 1 ヶ月の無償ライセンスを申請する

フォームを記入し、指示に従ってライセンスを適用するだけで、全機能が試用可能になります。

8. よくある質問(FAQ)

C# で HTML メールを送信するには?

MailMessage オブジェクトの BodyHtml プロパティに HTML を設定することで HTML メールを送信できます。HTML 非対応のクライアント向けに BodyText も併用することをおすすめします。

C# で複数の宛先にメールを送るには?

message.To.Add()message.Cc.Add()message.Bcc.Add() を使って複数宛先を追加できます。Spire.Email は To/Cc/Bcc の各フィールドに対応しています。

ASP.NET や MVC プロジェクトで SMTP を使ってメールを送信する方法は?

ASP.NET や MVC プロジェクトでも、Console アプリと同様に SmtpClient を設定し、SendOne()SendSome() メソッドを使ってメールを送信できます。

C#でQRコードを読み取るチュートリアルのカバー画像(バーコードスキャナーとコード)

QR コードは、ユーザー認証、モバイル決済、商品パッケージ、イベントチケットなど、現代の多くのアプリケーションで広く利用されています。これらのシーンにおいて、特にスキャン画像やアップロードファイルを処理する際、C# で QR コードを読み取るニーズは高まっています。

そのためには、精度が高く、実装が簡単なデコード手法が必要です。本チュートリアルでは、C# を使って画像から QR コードを読み取るシンプルな方法を紹介します。セットアップも少なく、簡潔に統合できます。

目次

1. プロジェクトの準備

まず、QR コードの読み取りに対応した .NET 向けバーコードライブラリを使用します。ここでは、画像ファイルやストリームから QR コードを読み取る簡単なAPIを提供する Spire.Barcode for .NET を使用します。

1.1 NuGet経由でライブラリをインストール

以下のコマンドで NuGet からインストールできます:

Install-Package Spire.Barcode

基本的な用途であれば、Free Spire.Barcode for .NET も利用可能です:

Install-Package FreeSpire.Barcode

1.2 コンソールアプリケーションの作成

デモとして、Visual Studio で C# コンソールアプリを作成します:

  • 対応フレームワーク:.NET Framework, .NET Core/.NET 6+, ASP.NET, Xamarin(クロスプラットフォーム対応)
  • NuGetを使わない場合は、Spire.Barcode.dll への参照を追加します

2. C# で画像から QR コードを読み取る

C# で画像ファイルから QR コードを読み取るには、ライブラリが提供する静的メソッド BarcodeScanner.Scan() を使用します。このメソッドは画像のパスと BarCodeType を引数として受け取り、指定したバーコードタイプ(ここでは QR コード)に一致するすべての結果を返します。

この方法は、JPG、PNG、EMF 形式の画像に対応しており、デスクトップアプリやファイルアップロードを処理するバックエンドサービスに最適です。

2.1 サンプルコード:画像ファイルからQRコードをデコード

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#による読み取り結果:

画像からQRコードを読み取り、コンソールに表示するC#コード

2.2 解説

  • Scan() は、画像内のすべてのバーコードを読み取ってデコードします
  • BarCodeType.QRCode により、QR コードのみを対象とすることができます(他の種類にも変更可能)
  • QR コードが複数含まれている場合でも、すべて配列で取得可能です

3. C# でストリームから QR コードを読み取る

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 からバーコードを読み取る方法

4. 精度向上とエラー処理

実際のアプリケーションでは、画像品質や入力の問題により、QR コードの認識に失敗することもあります。以下は、C# での認識精度向上とエラー対策のベストプラクティスです。

4.1 精度を高めるポイント

  • 高解像度の画像を使用し、ぼやけや圧縮を避ける
  • **QR コード周囲の余白(クワイエットゾーン)**を確保する
  • PNG 形式など、劣化の少ない画像形式を使用する
  • 歪みのない正面画像を使う(斜めからの撮影を避ける)

4.2 エラー処理を追加する

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);
}

5. おまけ:QR コードの座標を取得する

画像内の 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 コードのデータと頂点座標(四隅)が取得できます。

読み取り結果:

QR コードのデータと座標を取得するC#コード

6. よくある質問(FAQ)

C# で QR コードを読み取るには?

Spire.Barcode for .NET ライブラリの BarcodeScanner.Scan() メソッドを使用することで、画像ファイルやストリームから簡単に QR コードを読み取ることができます。

自分の QR コード画像を読み取るには?

画像ファイルのパスを渡すか、WPF や Web アプリであればストリームとして読み込んでスキャナーに渡します。すべての QR コードが自動的にデコードされます。

QR コード以外のバーコードも読み取れますか?

はい、画像パスを Scan() メソッドに渡すだけで、対応しているすべてのバーコードタイプを自動で読み取れます。特定の種類(例:QR コードや Code128)のみに限定する場合は、BarCodeType を第二引数で指定します。

C# でおすすめのバーコードライブラリは?

Spire.Barcode for .NET は、使いやすさと多様なフォーマット対応、API のシンプルさから人気があります。無料・商用いずれの用途にも対応しています。

7. まとめ

Spire.Barcode for .NET を使用すれば、C# での QR コード読み取りは数行のコードで実装可能です。画像ファイルにもストリームにも対応しており、デスクトップ、サーバーサイド、WPF アプリケーションでも安定して動作します。最小限のセットアップで高性能な読み取り処理が行えます。

QR コードの生成、ドキュメントへの統合、リアルタイムスキャンなどへの応用も可能です。

💡すべてのバーコード読み取り機能を試したい方は、
無料の一時ライセンスを申請して、Spire.Barcode for .NET の全機能を体験してください。

C# で PDF を添付してメール送信するイメージ

C# で添付ファイル付きのメールを送信 するのは、レポートや請求書、ログの共有など、業務アプリケーションでよく求められる機能の一つです。.NET の標準ライブラリでも基本的なメール送信は可能ですが、添付ファイルの扱いやエンコーディング、動的に生成されるファイルの送信など、やや複雑な処理が必要になる場合があります。

この記事では、C# でメールにファイルを添付して送信する方法 を、具体的な C# コードとともにわかりやすく解説します。ローカルファイルの添付、メモリストリームやバイト配列からの添付、SMTP の設定方法などを順を追って紹介していきます。コンソールアプリや ASP.NET など、さまざまなプロジェクトに応用できる内容です。

目次

1. はじめに:Spire.Email で C# メール送信を始める

Spire.Email for .NET は、Outlook や他のメールクライアントに依存せず、C# アプリケーション内でメールの作成・送信・受信・管理を実現できるプロフェッショナルなライブラリです。SMTP、POP3、IMAP をサポートし、添付ファイルや HTML 本文、インラインリソースなども簡単に扱えます。

インストール

NuGet 経由で簡単にインストールできます:

Install-Package Spire.Email

または、公式サイトから Spire.Email をダウンロード して手動でインストールすることも可能です。

2. C# でローカルファイルを添付してメールを送信する方法

業務システムなどでは、PDF レポートなどのファイルを定期的に送信するケースが多くあります。ここでは、ローカルディスク上のファイル(例:PDF)を添付し、Spire.Email を使って C# から送信する基本的な方法を紹介します。

主なステップは以下の通りです:

  • 送信者・受信者情報の設定
  • HTML 形式のメール本文の作成
  • Attachment クラスを使ったファイル添付
  • SMTP クライアントの構成と認証設定

サンプルコード

この実践的な例では、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 を添付したメールが送信されます。

C# コードによる添付メールの送信結果

3. C# でメモリストリームやバイト配列からファイルを添付する方法

ドキュメントや画像をリアルタイムで生成して添付したい場合、ファイルを保存せずにそのまま添付できると便利です。Spire.Email では、MemoryStreambyte[] から直接添付が可能です。

メモリストリームから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 タイプの判別に影響します。

4. C# で Outlook の SMTP を使ってメールを送信する方法

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 にも対応しているため、セキュアな通信が可能です。

5. C# による実用的な添付メール送信の例:動的宛名と複数送信

実際のビジネスシナリオでは、プロジェクトの進捗レポートを複数の受信者に送信し、それぞれにパーソナライズされた内容を含める必要があることがよくあります。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 アプリでも簡単に応用できます。

以下は送信されたメールのスクリーンショットです。

C# による個別化された添付付きメールの例


6. トラブル対処とベストプラクティス

  • 認証エラー:SMTP の認証情報(ユーザー名・パスワード・TLS 設定)を再確認
  • ポート制限:ポート 25 がブロックされている場合は 587(TLS)や 465(SSL)を使用
  • 添付サイズ制限:SMTP サーバーの制限に注意。大きなファイルは圧縮や分割を検討
  • 認証情報の安全管理:コードへの埋め込みは避け、環境変数や安全な設定ファイルへ
  • MIME タイプの誤認識:ファイル名に正しい拡張子を含める

Spire.Email を使えば、これらの問題にもスマートに対応できます。


7. まとめと次のステップ

今回は、Spire.Email for .NET を使って、C# で添付ファイル付きメールを送信する方法を一通り紹介しました。ローカルファイル、ストリーム、Outlook 対応まで、実用的なパターンに対応しています。

.NET アプリでメール機能を簡単に導入したい方は、一時ライセンスを申請 してぜひお試しください。


8. よくある質問(FAQ)

❓ C# でファイルを添付してメール送信するには?

message.Attachments.Add(new Attachment(@"file.pdf"));

メモリストリームやバイト配列からの添付にも対応しています。

❓ 添付付きメールの送信方法は?

添付後に SmtpClient.SendOne() を使って送信します。SMTP の設定や認証情報を正しく構成してください。

❓ .NET Core でも使えますか?

はい。Spire.Email for .NET.NET Core, .NET Standard, .NET 5+, .NET Framework, ASP.NET, MonoAndroid, Xamarin.iOS に対応しています。

❓ Excel ファイルも添付できますか?

もちろん可能です:

message.Attachments.Add(new Attachment(@"report.xlsx"));

有効なファイルパスを指定し、アプリからアクセス可能である必要があります。

PythonでSpire.PDFを使ってPDFを読み取る

Python を使って PDF ファイルを読み取ることは、ドキュメントの自動化、コンテンツの分析、データのスクレイピングといった作業において非常に重要です。契約書や報告書、請求書、学術論文など、どのような PDF であっても、その内容にプログラムからアクセスできれば、作業の効率が飛躍的に向上し、より高度なワークフローを構築できます。

PythonでPDFのテキスト、表、画像、メタデータなどを正確に読み取るためには、信頼性の高いPDFリーダーライブラリが必要です。本ガイドでは、サードパーティツールに依存せず、豊富な機能を備えたプロフェッショナルかつ使いやすいライブラリ Spire.PDF for Python を使って、PythonでPDFを読み取る方法をご紹介します。

目次

開発環境の準備

Spire.PDF for Python は、PDFのテキスト、表、画像、メタデータを高精度かつ簡単に読み取ることができるライブラリです。

  • ディスクまたはメモリからPDFを読み取り可能
  • 表・テキスト・画像・文書情報をすべて取得可能
  • 外部ツール不要でスタンドアロン動作
  • 精度の高い構造データ抽出
  • 無料バージョンもあり

pipを使用したインストール方法:

pip install spire.pdf

小規模なPDF処理を行う場合は、Free Spire.PDF for Python をご利用いただくことも可能です:

pip install spire.pdf.free

PythonでPDFファイルを読み込む方法

PDFファイルの内容を取得する前に、まずメモリ上に読み込む必要があります。Spire.PDF を使えば、ローカルファイルからでも、バイト配列などのメモリ経由でもPDFを簡単に読み込めます。

ファイルパスからPDFを読み込む

PdfDocument.LoadFromFile() を使用して、PDFファイルをローカルから読み込みます。

from spire.pdf import PdfDocument

# PdfDocument のインスタンスを作成します
pdf = PdfDocument()
# PDF ドキュメントを読み込みます
pdf.LoadFromFile("sample.pdf")

メモリ上のバイト配列から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からテキストを読み取る

PDF内のテキスト情報を抽出することは、文書解析や自動処理における最も基本的な操作です。Spire.PDF を使えば、全体のテキストやページ単位、指定エリアのテキストも簡単に取得できます。

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から全テキストを抽出するPythonコード

ページ内の特定エリアからテキストを読み取る

領域を指定して、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の領域からテキストを取得する

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から表データを取得

画像ベースのPDFからテーブルを抽出したい場合は、OCRを併用する必要があります:Pythonで画像からテキストを認識する方法

PDFから画像を取得する

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から画像を抽出

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文書から読み取ったメタデータ:

PDFのメタデータ取得

よくある質問(FAQ)

PythonでPDFを読み取ることはできますか?

はい。Spire.PDF for Python を使えば、テキスト・表・画像・メタ情報などを簡単に取得できます。

Jupyter Notebookでも使えますか?

はい。pipでインストールすれば、Jupyter Notebook環境でもそのまま使用できます。

PDFからテキストを取り出す方法は?

PdfTextExtractor.ExtractText() を使って、各ページごとの可視テキストを抽出可能です。

PDFをディスクに保存せず読み込むには?

LoadFromStream() を使えば、メモリ上のバイトデータから直接PDFを読み込めます。

まとめ

Spire.PDF for Python を使えば、PythonでのPDFファイル読み取りを簡単に実現できます。テキスト、表、画像、メタデータのすべてに対応し、ドキュメント自動化やデータ分析に最適です。

大規模なPDF処理や全機能の活用には、無料ライセンスを申請 してフルバージョンをご活用ください。

C#でPDFからバーコードを読み取る概要図

C#でPDFファイルからバーコードを読み取ることは、多くのビジネスワークフローで実用的なニーズです。特にスキャン済みの書類やデジタルフォームを自動処理する場合に頻繁に使用されます。物流、金融、医療、製造などの分野では、PDF内に画像として埋め込まれたバーコード、またはベクターグラフィックスとして描かれたバーコードが含まれていることがよくあります。

本記事では、C# を使用して PDF からバーコードを読み取るための 2 つの実践的な方法を紹介します。1 つは PDF ページに埋め込まれた画像を抽出してスキャンする方法、もう 1 つはページ全体を画像としてレンダリングし、その画像からバーコードを認識する方法です。いずれの方法も、1次元バーコードと2次元バーコードの両方に対応しています。

目次

✅ 準備:必要な環境とライブラリ

C#でPDFからバーコードを認識するには、以下の環境を用意してください:

  • NuGet パッケージに対応した C# プロジェクト(.NET Framework / .NET Core / .NET 6 など)
  • 以下の2つのライブラリをインストール:

NuGet パッケージマネージャーで以下のコマンドを実行:

Install-Package Spire.Barcode
Install-Package Spire.PDF

🚀 ステップバイステップ:C#で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++;
            }
        }
    }
}

以下は、方法①(画像抽出)でのスキャン結果イメージです:

C#でPDFから埋め込み画像のバーコードを抽出

🔍 おすすめのケース:スキャンされたPDFや、バーコードが画像として含まれている場合。

参考記事:
C#を使用して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");
                }
            }
        }
    }
}

以下は、方法②(ページ全体のレンダリング)によるスキャン結果の例です:

C#でPDFページ全体を画像化してバーコード認識

🔍 おすすめのケース:PDF内のバーコードが画像ではなく描画されたコンテンツである場合。

🔎 どちらの方法を使うべき?

ケース 推奨される方法
スキャンされたページ 埋め込み画像の抽出
デジタルPDF・描画バーコード ページ全体の画像化
混在・不明な構造 両方を試すのがおすすめ

構造が不明なPDFには、両方の方法を併用することでより確実な認識が可能です。

❓ FAQ(よくある質問)

Q: 複数ページのPDFでも対応できますか?
A: はい、すべてのページをループ処理することで対応可能です。

Q: 1ページに複数のバーコードがある場合は?
A: BarcodeScanner.Scan() メソッドを使えば、複数のバーコードを一括で検出できます。

Q: 解像度を上げれば認識精度は向上しますか?
A: はい。たとえば、300 DPI以上で画像化すると、小さなバーコードでも認識精度が向上します。SaveAsImage(int, PdfImageType, int, int) を使用してDPIを指定できます。

Q: 無料で使用できますか?
A: はい。 Free Spire.Barcode for .NETFree Spire.PDF for .NET の組み合わせで基本的なバーコード読み取りが可能です。ただし、無料版には機能制限があります。商用利用や高機能が必要な場合は、無料トライアルライセンスを申請して評価することもできます。


✅ まとめ

C# を使って PDF ファイルからバーコードを読み取るには、画像抽出とページレンダリングという 2 つの方法があり、それぞれのPDF形式に応じて柔軟に対応できます。Spire.Barcode と Spire.PDF を活用すれば、効率的かつ確実なバーコード認識が実現できます。

ピボットテーブルは、データをさまざまな視点から整理、集計、分析できる柔軟な手段であり、有益なインサイトの発見や的確な意思決定に役立ちます。カテゴリ、日付、数値などの条件に基づいてデータを簡単に並べ替えたり要約したりできるため、複雑なデータセットの処理や多角的な比較分析に特に便利です。

本記事では、Spire.XLS for Python を使用して、Python で Excel 文書内のピボットテーブルを作成または操作する方法を紹介します。

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

この操作には、Spire.XLS for Python と plum-dispatch v1.7.4 が必要です。これらは、Spire.XLS for Python の公式ウェブサイトから手動でダウンロードするか、以下の pip コマンドでインストールできます。

pip install Spire.XLS

Python で Excel にピボットテーブルを作成する

Spire.XLS for Python は、Excel 文書内でピボットテーブルを操作するための PivotTable クラスを提供しています。既存の Excel ワークシートのデータに基づいてピボットテーブルを作成するには、以下の手順に従ってください。

  • Workbook オブジェクトを作成します。
  • Workbook.LoadFromFile() メソッドで Excel 文書を読み込みます。
  • Workbook.Worksheets[index] プロパティを使用して、対象のワークシートを取得します。
  • Worksheet.Range プロパティで、ピボットテーブルの元になるセル範囲を指定します。
  • Workbook.PivotCaches.Add() メソッドを使用して PivotCache オブジェクトを作成します。
  • Worksheet.PivotTables.Add() メソッドで、ワークシートにピボットテーブルを追加します。
  • 行エリアに必要なフィールドを追加します。
  • 値エリアに必要なフィールドを追加します。
  • Workbook.SaveToFile() メソッドで、結果のファイルを保存します。
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()

Python で Excel ピボットテーブルを作成するコードとその実行結果

Python でピボットテーブルを列の値で並べ替える

特定のフィールドを並べ替えるには、PivotTable.PivotFields[index] プロパティでフィールドを取得し、PivotField.SortType プロパティを使って並べ替え方法を指定します。以下は、特定のフィールドの値に基づいてピボットテーブルを並べ替える手順です。

  • Workbook オブジェクトを作成します。
  • Workbook.LoadFromFile() メソッドで Excel 文書を読み込みます。
  • Workbook.Worksheets[index] プロパティで対象のワークシートを取得します。
  • Worksheet.PivotTables[index] プロパティでピボットテーブルを取得します。
  • PivotTable.PivotFields[fieldName] プロパティで対象のフィールドを取得します。
  • PivotField.SortType プロパティを使って並べ替えを設定します。
  • Workbook.SaveToFile() メソッドで、並べ替え後のファイルを保存します。
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()

Python コードによって Excel のピボットテーブルを列の値で並べ替えた結果

Python でピボットテーブルの行を展開・折りたたむ

ピボットフィールドの詳細を折りたたむには、PivotField.HideItemDetail(string itemValue, bool isHiddenDetail) メソッドを使用し、第 2 引数に true を設定します。詳細を再表示するには false を設定します。以下が操作手順です。

  • Workbook オブジェクトを作成します。
  • Workbook.LoadFromFile() メソッドで Excel 文書を読み込みます。
  • Workbook.Worksheets[index] プロパティで対象のワークシートを取得します。
  • Worksheet.PivotTables[index] プロパティでピボットテーブルを取得します。
  • PivotTable.PivotFields[fieldName] プロパティで対象のフィールドを取得します。
  • PivotField.HideItemDetail(string itemValue, bool isHiddenDetail) メソッドで、行の展開または折りたたみを設定します。
  • Workbook.SaveToFile() メソッドで結果を保存します。
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()

Python を使ってピボットテーブルの行を展開・折りたたみした Excel の表示結果

一時ライセンスを申請する

結果ドキュメントから評価メッセージを削除したい場合、または機能制限を取り除く場合は、についてこのメールアドレスはスパムボットから保護されています。閲覧するにはJavaScriptを有効にする必要があります。にお問い合わせ、30 日間有効な一時ライセンスを取得してください。

Excel の数式は、スプレッドシート内のデータに対して演算や処理を行うための式です。基本的な加算・減算・乗算・除算に加え、統計処理、日付や時間の計算、論理判定など、さまざまな高度な関数も利用できます。Excel に数式を取り入れることで、作業の効率化、エラーの削減、データからの洞察取得を実現できます。

本記事では、Spire.XLS for Python を使用して、Excel ファイルに数式を追加・読み取る方法 を詳しく解説します。

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

この操作には、Spire.XLS for Python と plum-dispatch v1.7.4 が必要です。これらは、Spire.XLS for Python の公式ウェブサイトから手動でダウンロードするか、以下の pip コマンドでインストールできます。

pip install Spire.XLS

Python で Excel に数式を追加する

Spire.XLS for Python では、特定のセルに数式を追加するために Worksheet.Range[rowIndex, columnIndex].Formula プロパティを使用します。以下は、数式を追加する具体的な手順です。

  • Workbook クラスのオブジェクトを作成します。
  • Workbook.Worksheets[sheetIndex] プロパティで、対象のワークシートを取得します。
  • Worksheet.Range[rowIndex, columnIndex].Text および .NumberValue プロパティで、セルにテキストや数値データを追加します。
  • Worksheet.Range[rowIndex, columnIndex].Formula プロパティで、セルに数式を入力します。
  • Workbook.SaveToFile() メソッドを使って、結果を Excel ファイルとして保存します。
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()

Spire.XLS を使用して Python で追加された Excel 数式セルの表示例

Python で Excel の数式を読み取る

Excel ワークシート内の数式を読み取るには、すべてのセルをループし、Cell.HasFormula プロパティで数式の有無を確認した上で、CellRange.Formula プロパティでその内容を取得します。以下が具体的な手順です。

  • Workbook クラスのオブジェクトを作成します。
  • Workbook.LoadFromFile() メソッドで Excel ファイルを読み込みます。
  • Workbook.Worksheets[sheetIndex] プロパティを使って、対象のワークシートを取得します。
  • Worksheet.AllocatedRange プロパティで、使用されているセル範囲を取得します。
  • 空のリストを作成します。
  • 使用範囲内のすべてのセルをループ処理します。
  • 各セルの Cell.HasFormula プロパティで数式の有無をチェックします。
  • 数式を含むセルの CellRange.RangeAddressLocal(セル名)と .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()

Python スクリプトで数式を抽出した Excel ワークシートのイメージ

一時ライセンスを申請する

結果ドキュメントから評価メッセージを削除したい場合、または機能制限を取り除く場合は、についてこのメールアドレスはスパムボットから保護されています。閲覧するにはJavaScriptを有効にする必要があります。にお問い合わせ、30 日間有効な一時ライセンスを取得してください。

Excel のテキストボックスは、ワークシート、グラフ、その他のオブジェクトに補足情報や注釈を追加するための柔軟な手段です。データ自体には直接関係しない説明文、ラベル、コメントなどを表示するのに役立ちます。

本記事では、Spire.XLS for Python を使用して、Excel にテキストボックスを追加・更新・削除する方法について解説します。

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

この操作には、Spire.XLS for Python と plum-dispatch v1.7.4 が必要です。これらは、Spire.XLS for Python の公式ウェブサイトから手動でダウンロードするか、以下の pip コマンドでインストールできます。

pip install Spire.XLS

Python で Excel にテキストボックスを追加する

テキストボックスは、Worksheet.TextBoxes.AddTextBox() メソッドを使って、ワークシートの任意の位置に追加できます。TextBox オブジェクトには、テキスト内容や書式を設定するためのプロパティが用意されています。

Spire.XLS for Python を使ってテキストボックスを作成する手順は以下の通りです。

  • Workbook オブジェクトを作成します。
  • Workbook.Worksheets[index] プロパティを使用して特定のワークシートを取得します。
  • Worksheet.TextBoxes.AddTextBox() メソッドで、指定した位置にテキストボックスを追加します。
  • TextBox.Text プロパティでテキストを設定します。
  • その他の TextBox プロパティを使って書式を調整します。
  • Workbook.SaveToFile() メソッドで Excel ファイルとして保存します。
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()

Pythonコードで追加されたExcelのテキストボックスの表示例

Python で Excel のテキストボックスを更新する

既存のテキストボックスは、Worksheet.TextBoxes[index] プロパティで取得し、TextBox.Text プロパティを通じて内容を取得・編集できます。

以下は、Spire.XLS for Python を使用してテキストボックスを更新する手順です。

  • Workbook オブジェクトを作成します。
  • Workbook.LoadFromFile() メソッドで既存の Excel ファイルを読み込みます。
  • Workbook.Worksheets[index] プロパティを使ってワークシートを取得します。
  • Worksheet.TextBoxes[index] で特定のテキストボックスを取得します。
  • TextBox.Text プロパティでテキスト内容を再設定します。
  • Workbook.SaveToFile() メソッドで別の Excel ファイルとして保存します。
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()

Spire.XLSを使って編集されたExcelテキストボックスの内容変更後のイメージ

Python で Excel のテキストボックスを削除する

特定のテキストボックスは、Worksheet.TextBoxes[index].Remove() メソッドを使用して削除できます。手順は以下の通りです。

  • Workbook オブジェクトを作成します。
  • Workbook.LoadFromFile() メソッドで Excel ファイルを読み込みます。
  • Workbook.Worksheets[index] プロパティを使って対象のワークシートを取得します。
  • Worksheet.TextBoxes[index].Remove() メソッドでテキストボックスを削除します。
  • Workbook.SaveToFile() メソッドで変更内容を保存した新しいファイルを出力します。
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 日間有効な一時ライセンスを取得してください。