|
■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) を
利用している場合は、変数宣言や解放手順などが異なる部分が
ありますので、そこは適宜修正してみてください。
|