C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[2]: c# にて エクセルにハイパーリンク設定


(過去ログ 120 を表示中)

[トピック内 4 記事 (1 - 4 表示)]  << 0 >>

■70438 / inTopicNo.1)  c# にて エクセルにハイパーリンク設定
  
□投稿者/ kevin (1回)-(2014/03/26(Wed) 10:22:25)

分類:[C#] 

フリーのライブラリなど使わずに c#にて エクセルにハイパーリンクを設定したい

c#でエクセルを作成後 エクセル側の機能でハイパーリンクを設定するしかないのでしょうか?
C#でエクセル作成時にハイパーリンクを設定できればいいのですが




xlsSheet.Cells[sheetRowIndex, sheetColumnIndex].hyperlinkとできればいいのですが
どなたか作成方法ご教授ください。


引用返信 編集キー/
■70439 / inTopicNo.2)  Re[1]: c# にて エクセルにハイパーリンク設定
□投稿者/ shu (512回)-(2014/03/26(Wed) 11:10:27)
No70438 (kevin さん) に返信

マクロ記録の内容:
ActiveSheet.Hyperlinks.Add Anchor:=Selection, Address:= _
"リンク先", TextToDisplay:="表示内容"



xlsSheet.Hyperlinks.Add(xlsSheet.Cells[sheetRowIndex, sheetColumnIndex],
"〜 リンク先 〜", "", "", "表示内容")

のような感じでどうでしょうか?
引用返信 編集キー/
■70441 / inTopicNo.3)  Re[1]: c# にて エクセルにハイパーリンク設定
□投稿者/ 魔界の仮面弁士 (572回)-(2014/03/26(Wed) 11:20:05)
No70438 (kevin さん) に返信
> xlsSheet.Cells[sheetRowIndex, sheetColumnIndex].hyperlinkとできればいいのですが
> どなたか作成方法ご教授ください。

hyperlink ではなく
Hyperlinks です。


まず、VBA 的な文法でいえば、

Dim hs As Excel.Hyperlinks
Dim h As Excel.Hyperlink
Dim r As Excel.Range

Set hs = Sheet1.Hyperlinks
Set r = Sheet1.Range("B2")
Set h = hs.Add(r, "http://www.bing.com/", "", "Web検索", "Bing")

です。実際には変数を使わずに、一行で書ききってしまう事が多いですが。


上記を踏まえたうえで、C# 4.0 で記述してみるとこんな感じ。

とりあえず、dynamic を用いたレイトバインドコードで記述してみます。

using System;
using System.Runtime.InteropServices;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        private void button1_Click(object sender, EventArgs e)
        {
            dynamic app = Activator.CreateInstance(
                Type.GetTypeFromProgID("Excel.Application"));
            dynamic books = app.Workbooks;
            dynamic book = books.Add();
            dynamic sheets = book.Worksheets;
            dynamic sheet1 = sheets[1];
            app.Top = 0;
            app.Left = 0;
            app.Visible = true;

            dynamic r = sheet1.Range["B2"];
            dynamic hs = sheet1.Hyperlinks;
            dynamic h = hs.Add(r, "http://www.bing.com/", "", "Web検索", "Bing");

            if (Marshal.IsComObject(h)) { Marshal.ReleaseComObject(h); h = null; }
            if (Marshal.IsComObject(hs)) { Marshal.ReleaseComObject(hs); hs = null; }
            if (Marshal.IsComObject(r)) { Marshal.ReleaseComObject(r); r = null; }
            if (Marshal.IsComObject(sheet1)) { Marshal.ReleaseComObject(sheet1); sheet1 = null; }
            if (Marshal.IsComObject(sheets)) { Marshal.ReleaseComObject(sheets); sheets = null; }
            book.Saved = true;
            if (Marshal.IsComObject(book)) { Marshal.ReleaseComObject(book); book = null; }
            if (Marshal.IsComObject(books)) { Marshal.ReleaseComObject(books); books = null; }
            this.Activate();
            MessageBox.Show("Excelを閉じます。");
            app.Quit();
            if (Marshal.IsComObject(app)) { Marshal.ReleaseComObject(app); app = null; }
        }

        public Form1()
        {
            InitializeComponent();
        }
    }
}



なお、COM 参照で Microsoft.Office.Interop.Excel 名前空間
(PIA の Microsoft.Office.Interop.Excel.dll)、もしくは
Interop.Excel 名前空間 (自動生成IA の Interop.Excel.dll) を
利用している場合は、変数宣言や解放手順などが異なる部分が
ありますので、そこは適宜修正してみてください。

引用返信 編集キー/
■70446 / inTopicNo.4)  Re[2]: c# にて エクセルにハイパーリンク設定
□投稿者/ kevin (2回)-(2014/03/26(Wed) 16:46:30)
No70439 (shu さん) に返信
No70441 (inTopicNo.3さん) に返信


以下でできました。
xlsSheet.Hyperlinks.Add(xlsSheet.Cells[sheetRowIndex, 11], s_hyper, "", "", flow_id);

大変助かりました。
ありがとうございました。

解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -