【C#】Excelのハイパーリング設定でHRESULT からの例外:0x800A03ECが発生

C#

本記事は、Excelのハイパーリング設定の際に発生する以下のエラーの対策について紹介します。

ハンドルされていない例外: System.Runtime.InteropServices.COMException: HRESULT からの例外:0x800A03EC
   場所 System.RuntimeType.ForwardCallToInvokeMember(String memberName, BindingFlags flags, Object target, Int32[] aWrapperTypes, MessageData& msgData)
   場所 Microsoft.Office.Interop.Excel.Shape.get_Hyperlink()
   場所 Program.Main() .............

エラーが発生するコード

テキストボックス(オートシェイプ)の Hyperlink.Address プロパティに直接アドレスを文字列として格納しようとすると、上記エラーが発生します。

// 参照の追加画面で Microsoft.Office.Interop.Excel を追加してください ★
using System;
using Microsoft.Office.Core;
using Excel = Microsoft.Office.Interop.Excel;

class Program
{
    static void Main()
    {
        // Excel アプリケーションの初期化
        Excel.Application excelApp = new Excel.Application();
        excelApp.Visible = true; // Excelを表示

        // 新しいワークブックの作成
        Excel.Workbook workbook = excelApp.Workbooks.Add();
        Excel.Worksheet sheet = workbook.Sheets[1];

        // テキストボックスの追加
        Excel.Shape textBox1 = sheet.Shapes.AddTextbox(
            MsoTextOrientation.msoTextOrientationHorizontal,
            100, 100, 200, 50); // 位置とサイズを指定

        // テキストボックスに表示する文字列
        textBox1.TextFrame2.TextRange.Text = "example.comを開く";

        // テキストボックスにハイパーリンクを設定 ★
        textBox1.Hyperlink.Address = "http://www.example.com";

        // ワークブックやアプリケーションの保存、閉じる処理は適宜行う
        // 例: workbook.SaveAs("C:\path\to\your\file.xlsx");
        // excelApp.Quit();
    }
}

エラーが発生しないようにする方法

sheet.Hyperlinks.Addメソッドを使用することで回避できます。

// 参照の追加画面で Microsoft.Office.Interop.Excel を追加してください ★
using System;
using Microsoft.Office.Core;
using Excel = Microsoft.Office.Interop.Excel;

class Program
{
    static void Main()
    {
        // Excel アプリケーションの初期化
        Excel.Application excelApp = new Excel.Application();
        excelApp.Visible = true; // Excelを表示

        // 新しいワークブックの作成
        Excel.Workbook workbook = excelApp.Workbooks.Add();
        Excel.Worksheet sheet = workbook.Sheets[1];

        // テキストボックスの追加
        Excel.Shape textBox1 = sheet.Shapes.AddTextbox(
            MsoTextOrientation.msoTextOrientationHorizontal,
            100, 100, 200, 50); // 位置とサイズを指定

        // テキストボックスに表示する文字列
        textBox1.TextFrame2.TextRange.Text = "example.comを開く";

        // テキストボックスにハイパーリンクを設定 ★
        sheet.Hyperlinks.Add(textBox1, "http://www.example.com");

        // ワークブックやアプリケーションの保存、閉じる処理は適宜行う
        // 例: workbook.SaveAs("C:\path\to\your\file.xlsx");
        // excelApp.Quit();
    }
}
タイトルとURLをコピーしました