「ClosedXML - Excelファイルの操作」の版間の差分

 
(同じ利用者による、間の5版が非表示)
25行目: 25行目:
Closed XMLはC#開発者にとって、Excelファイル操作を効率的に行うための強力なツールである。<br>
Closed XMLはC#開発者にとって、Excelファイル操作を効率的に行うための強力なツールである。<br>
その使いやすさ、豊富な機能、そして堅牢性により、多くのプロジェクトで重要な役割を果たしている。<br>
その使いやすさ、豊富な機能、そして堅牢性により、多くのプロジェクトで重要な役割を果たしている。<br>
<br>
* 公式ドキュメント
*: https://docs.closedxml.io/en/latest/
* Github
*: https://github.com/ClosedXML/ClosedXML
<br><br>
<br><br>


102行目: 107行目:
RiderまたはVisual StudioからNuGetを使用して、Closed XMLをインストールする。<br>
RiderまたはVisual StudioからNuGetを使用して、Closed XMLをインストールする。<br>
* Riderの場合
* Riderの場合
*# プロジェクトを開く。
*# [ツール]メインメニュー - [Nuget] - [ソリューション の Nuget パッケージを管理] (または、[<プロジェクト名> の Nuget パッケージを管理])を選択する。
*# [ツール]メインメニュー - [Nuget] - [ソリューション の Nuget パッケージを管理] (または、[<プロジェクト名> の Nuget パッケージを管理])を選択する。
*# メイン画面下部にある[パッケージ]タブから<u>ClosedXML</u>と入力して検索する。
*# メイン画面下部にある[パッケージ]タブから <u>ClosedXML</u> と入力して検索する。
*# メイン画面下部の右にある[+]ボタンを押下して、Closed XMLをインストールする。
*# メイン画面下部の右にある[+]ボタンを押下して、Closed XMLをインストールする。
*: <br>
* Visual Studioの場合
*# プロジェクトを開く。
*# NuGetパッケージマネージャーを開く。
*#* [ツール]メインメニュー - [NuGetパッケージマネージャー]を選択して、[ソリューションのNuGetパッケージの管理]を選択する。
*#* または、ソリューションエクスプローラーでプロジェクトを右クリックして、コンテキストメニューから[NuGetパッケージの管理]を選択する。
*# ClosedXMLを検索する。
*#: NuGetパッケージマネージャーの検索ボックスに <u>ClosedXML</u> と入力して検索する。
*# Closed XMLのインストール
*#: 検索結果からClosed XMLを選択して、[インストール]ボタンを押下する。
*# インストールの確認ダイアログが表示されるので、[OK]ボタンを押下してインストールを完了する。
*# 参照の確認
*#: インストールが完了した後、プロジェクトの参照にClosed XMLが追加されていることを確認する。
*: <br>
* パッケージマネージャーコンソールからインストールする場合
*# プロジェクトを開く。
*# [表示]メインメニュー - [その他のウィンドウ] - [パッケージマネージャーコンソール]を選択して、パッケージマネージャーコンソールを開く。
*# パッケージマネージャーコンソールから、Closed XMLとその依存関係をダウンロードしてインストールする。
*#: <code>Install-Package ClosedXML</code>
*# ソリューションエクスプローラーのプロジェクトの参照において、ClosedXMLが追加されていることを確認する。
*: <br>
* <code>dotnet</code>コマンドを使用する場合
*# ターミナルを開く。
*# プロジェクトのルートディレクトリに移動する。
*# Closed XMLをインストールする。
*#: 最新の安定版をインストールする場合
*#: <code>dotnet add package ClosedXML</code>
*#: <br>
*#: バージョンを指定してインストールする場合
*#: <code>dotnet add package ClosedXML --version 0.102.3</code>
*#: <br>
*: <u>※注意</u>
*: <u>プロジェクトがGit等のバージョン管理システムを使用している場合、これらの変更がトラッキングされることを確認すること。</u>
*: <u>プロジェクトを再ビルドして、新しく追加されたパッケージが正しく統合されていることを確認することを推奨する。</u>
<br>
<br>
また、Closed XMLのGithubからソースコードをダウンロードして、ビルドおよびインストールすることもできる。<br>
また、Closed XMLのGithubからソースコードをダウンロードして、ビルドおよびインストールすることもできる。<br>
<br>
<br>
Closed XMLをインストールする時、Open XML SDK等のいくつかの必要なパッケージが同時にインストールされる。<br>
Closed XMLをインストールする時、Open XML SDK等のいくつかの必要なパッケージが同時にインストールされる。<br>
<br>
プロジェクトにおいて、ClosedXMLを使用する場合は、ソースコードファイルの先頭にusingステートメントを追加する。<br>
<syntaxhighlight lang="c#">
using ClosedXML.Excel;
</syntaxhighlight>
<br><br>
<br><br>


867行目: 912行目:
<br>
<br>
<u>OpenXML SDKを使用する場合は、より低レベルでのストリーミングに近い処理が可能であるが、実装が複雑になる。</u><br>
<u>OpenXML SDKを使用する場合は、より低レベルでのストリーミングに近い処理が可能であるが、実装が複雑になる。</u><br>
<br><br>
== ハイパーリンクの挿入と管理 ==
以下の例では、ハイパーリンクの挿入と管理を行っている。<br>
A1セルには外部リンク (Google)、A2セルには内部リンク (B5セル) が設定される。<br>
また、プログラム内でA1セルのリンクを変更して、A2セルのリンクを削除している。<br>
<br>
* 外部ハイパーリンクの挿入
*: worksheet.Cell("A1").Valueでセルにリンク名を指定する。
*: worksheet.Cell("A1").Hyperlinkオブジェクトに、XLHyperlinkオブジェクトを割り当てて、外部リンクを指定する。
*: <br>
* 内部ハイパーリンク (ワークシート内のセル参照) の作成
*: worksheet.Cell("A2").Hyperlinkオブジェクトに、XLHyperlinkオブジェクトを割り当てて、セル参照を文字列で指定する。
*: <br>
* ハイパーリンクの取得と変更
*: worksheet.Cell("A1").Hyperlinkオブジェクトでリンクオブジェクトを取得する。
*: link.ExternalAddressプロパティでリンク先のURLを取得または変更できる。
*: <br>
* ハイパーリンクの削除
*: セルのHyperlinkオブジェクトにnullを代入することにより、リンクを削除することができる。
<br>
<syntaxhighlight lang="c#">
using System;
using System.IO;
using ClosedXML.Excel;
class Program
{
    static void Main(string[] args)
    {
      try
      {
          // 新しいワークブックを作成
          using (var workbook = new XLWorkbook())
          {
            // ワークシートを追加
            var worksheet = workbook.Worksheets.Add("ハイパーリンクサンプル");
            // 2つ目のワークシートを追加 (絶対参照リンクで使用)
            var secondWorksheet = workbook.Worksheets.Add("第2シート");
            secondWorksheet.Cell("A1").Value = "これは第2シートである";
            try
            {
                // セルにハイパーリンクを挿入
                worksheet.Cell("A1").Value = "Googleへのリンク";
                worksheet.Cell("A1").Hyperlink = new XLHyperlink("https://www.google.com");
                // 別のセルへの内部リンクを作成
                worksheet.Cell("A2").Value = "B5セルへのリンク";
                worksheet.Cell("A2").Hyperlink = new XLHyperlink("B5");
                worksheet.Cell("B5").Value = "ここにリンクされています";
                // 別シートへの絶対参照を含むハイパーリンクを作成
                // シート名に特殊文字やスペースが含まれる場合、必ずシート名を引用符で囲む必要がある
                worksheet.Cell("A3").Value = "第2シートのA1セルへのリンク";
                worksheet.Cell("A3").Hyperlink = new XLHyperlink("'第2シート'!A1");
                // 別シートへの絶対参照リンクの確認
                var sheetLink = worksheet.Cell("A3").Hyperlink;
                if (sheetLink != null)
                {
                  Console.WriteLine($"A3のリンク先: {sheetLink.InternalAddress}");
                  // 第2シートの内容を確認
                  Console.WriteLine($"第2シートのA1セルの値: {secondWorksheet.Cell("A1").Value}");
                }
                else
                {
                  Console.WriteLine("警告: A3セルにハイパーリンクが見つかりません");
                }
                // ハイパーリンクの取得と変更
                var link = worksheet.Cell("A1").Hyperlink;
                if (link != null)
                {
                  Console.WriteLine($"A1のリンク先: {link.ExternalAddress}");
                  // リンクを変更
                  link.ExternalAddress = new Uri("https://www.example.com");
                }
                else
                {
                  Console.WriteLine("警告: A1セルにハイパーリンクが見つかりません。");
                }
                // ハイパーリンクの削除
                worksheet.Cell("A2").Hyperlink = null;
            }
            catch (Exception ex)
            {
                Console.WriteLine($"エラー: ワークシートの操作中に問題が発生  詳細: {ex.Message}");
            }
            try
            {
                // ファイルを保存
                string filePath = "ハイパーリンクサンプル.xlsx";
                workbook.SaveAs(filePath);
                Console.WriteLine($"Excelファイルが正常に作成: {filePath}");
            }
            catch (IOException ioEx)
            {
                Console.WriteLine($"エラー: ファイルの保存中にIOエラーが発生  詳細: {ioEx.Message}");
            }
            catch (Exception ex)
            {
                Console.WriteLine($"エラー: ファイルの保存中に予期せぬエラーが発生  詳細: {ex.Message}");
            }
          }
      }
      catch (Exception ex)
      {
          Console.WriteLine($"致命的なエラー: プログラムの実行中に予期せぬエラーが発生しました。詳細: {ex.Message}");
      }
    }
}
</syntaxhighlight>
<br><br>
== 印刷設定の調整 ==
以下の例では、Excelの印刷設定を調整している。<br>
指定した印刷設定が適用されたExcelファイルが作成されるため、実際に印刷またはプレビューすることにより、これらの設定の効果を確認できる。<br>
<br>
<u>※注意</u><br>
<u>印刷設定の一部 (特にページレイアウトに関するもの) は、Excelで直接ファイルを開いて確認する必要がある。</u><br>
<u>実際の印刷結果は、使用するプリンタやドライバにより若干異なる場合がある。</u><br>
<br>
<u>実際の印刷時には、プリンタのドライバや設定により上書きされる可能性がある。</u><br>
<u>最終的な印刷結果を確認するには、実際にプリンタで印刷する、または、Excelのプリントプレビュー機能を使用することを推奨する。</u><br>
<br>
<syntaxhighlight lang="c#">
using System;
using ClosedXML.Excel;
class Program
{
    static void Main(string[] args)
    {
      try
      {
          using (var workbook = new XLWorkbook())
          {
            var worksheet = workbook.Worksheets.Add("印刷設定サンプル");
            // サンプルデータの追加
            for (int i = 1; i <= 20; i++)
            {
                worksheet.Cell(i, 1).Value = $"行 {i}";
                worksheet.Cell(i, 2).Value = $"データ {i}";
            }
            // ページ設定の調整
            // ページ設定にアクセスする
            var pageSetup = worksheet.PageSetup;
            // 用紙サイズと向きの設定
            /// 用紙サイズをA4に設定
            pageSetup.PaperSize = XLPaperSize.A4Paper;
            /// 印刷の向きを横向きに設定
            pageSetup.PageOrientation = XLPageOrientation.Landscape;
            // 上下左右の余白を設定 (単位はポイント)
            pageSetup.Margins.Top    = 28.35; // 1cm = 28.35ポイント
            pageSetup.Margins.Bottom = 28.35;
            pageSetup.Margins.Left  = 28.35;
            pageSetup.Margins.Right  = 28.35;
            // ヘッダとフッタの設定
            // ヘッダ, フッタ, テキスト, ページ番号, 日付を追加
            pageSetup.Header.Left.AddText("ClosedXML サンプル");
            pageSetup.Header.Right.AddText(XLHFPredefinedText.PageNumber);
            pageSetup.Footer.Center.AddText("印刷日: ");
            pageSetup.Footer.Center.AddText(XLHFPredefinedText.Date);
            // 印刷範囲の設定
            // 特定の範囲のみを印刷するように設定
            worksheet.PageSetup.PrintAreas.Add("A1:B15");
            // 印刷タイトルの設定
            // 各ページで繰り返し表示される行 (通常はヘッダ行) を設定
            worksheet.PageSetup.SetRowsToRepeatAtTop(1, 1);
            // 1ページに収まるように自動調整
            // 初期の拡大率を設定, 指定したページ数に収まるように自動調整
            worksheet.PageSetup.Scale              = 100;  // 100%からスタート
            worksheet.PageSetup.ScaleHFWithDocument = true;
            worksheet.PageSetup.FitToPages(1, 0);            // 幅を1ページに、高さは自動
            // ラインの表示 / 非表示
            // セルの境界線が印刷されなくなる
            // データの視認性が向上するが、セルの区切りが不明確になる場合がある
            pageSetup.ShowGridlines            = false;  // 印刷時にグリッドライン (セルの罫線) を非表示にする
            // 各ページに行番号と列文字が印刷される
            // 大きなデータセットを扱う場合に便利である
            pageSetup.ShowRowAndColumnHeadings = true;  // 印刷時に行番号と列文字 (見出し) を表示する
            // 印刷品質の設定
            // 印刷品質をDPI (1インチあたりのドット数) で指定する
            // 以下の例では、600 DPIに指定しているが、使用するプリンタがサポートする値に調整すること
            pageSetup.PrintQuality = 600;
            // 白黒印刷の指定
            // カラーデータでも白黒で印刷する
            // ただし、色の違いで表現していた情報が失われる可能性があるので注意すること
            pageSetup.BlackAndWhite = true;
            // ファイルの保存
            workbook.SaveAs("印刷設定サンプル.xlsx");
            Console.WriteLine("Excelファイルの作成に成功");
          }
      }
      catch (Exception ex)
      {
          Console.WriteLine($"エラー: プログラムの実行中に問題が発生  詳細: {ex.Message}");
      }
    }
}
</syntaxhighlight>
<br><br>
<br><br>