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

ナビゲーションに移動 検索に移動
867行目: 867行目:
<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>
<br><br>


案内メニュー