如何将超链接添加到Excel的单元格与C#

正如你所看到的,有时我们需要在Excel文件中添加大量的超链接,而作为一名程序员,你不想手动执行,但是你想以编程的方式进行。 我已经通过互联网search,但我只find如何以编程方式添加Web的超链接,而不是当前的Excel文件超链接。 所以我认为这将是一个很好的理想,找出如何以编程方式添加当前的Excel文件的超链接(或本地超链接)。

Excel支持HYPERLINK()函数 :

 HYPERLINK(link_location, [friendly_name]) 

看看我上面链接到的HYPERLINK()函数的常见例子,如你正在寻找什么。

例如,下面的公式打开一个文件,导航到Annual工作表并selectF10。 超链接文本是单元格D1的内容。

 =HYPERLINK("[http://example.microsoft.com/report/budget report.xlsx]Annual!F10", D1) 

在上面的示例中,Excel文件位于HTTP位置,但同样也可以是本地path,如下所示:

 =HYPERLINK("[D:\Documents\budget report.xlsx]Annual!F10", D1) 

我还没有find一种方法来添加超链接到Excel的单元格与Microsoft.Office.Interop.Excel,但我想出了一个理想的,我可以通过剪贴板数据添加超链接。

我研究了Excel剪贴板数据,发现Excel数据可以是HTML数据。 所以我把这些数据作为HTML处理并粘贴到Excel中 – 而BAM–我们得到了Excel单元格的超链接

我们有这样的课

  class HDNData { StringBuilder builder; public void SetBuilder(StringBuilder dataBuilder) { this.builder = dataBuilder; } public string Data { get; set; } public string Hyperlink { get; set; } public string HexColor { get; set; } public override string ToString() { builder.Clear(); bool hasHyperlink = !string.IsNullOrEmpty(Hyperlink); bool hasColor = !string.IsNullOrEmpty(HexColor); if (hasHyperlink) { builder.Append("<a href=\""); builder.Append(Hyperlink); builder.Append("\">"); } if(hasColor) { builder.Append("<span style='color:"); builder.Append(HexColor); builder.Append("'>"); } builder.AppendLine(Data); if (hasHyperlink) builder.Append("</a>"); return builder.ToString(); } } class HDNHtml { StringBuilder builder = new StringBuilder(); StringBuilder cellBuilder = new StringBuilder(); private List<List<HDNData>> data = new List<List<HDNData>>(); public void Add(int i, HDNData hdnData) { if(i < data.Count) { hdnData.SetBuilder(cellBuilder); data[i].Add(hdnData); } else { if (i == data.Count) { data.Add(new List<HDNData>()); hdnData.SetBuilder(cellBuilder); data[i].Add(hdnData); } } } public override string ToString() { builder.Clear(); builder.AppendLine("<html>"); builder.AppendLine("<head></head>"); builder.AppendLine("<body>"); builder.AppendLine("<table>"); builder.AppendLine("<col>"); foreach (List<HDNData> row in data) { builder.AppendLine("<tr>"); foreach (HDNData col in row) { builder.AppendLine("<td>"); builder.Append(col.ToString()); builder.AppendLine("</td>"); } builder.AppendLine("</tr>"); } builder.AppendLine("</table>"); builder.AppendLine("</body>"); builder.AppendLine("</html>"); return builder.ToString(); } } 

并且像这样使用这个类

  HDNHtml hdn = new HDNHtml(); Random r = new Random(); HDNData hdnData = new HDNData(); hdnData.Data = r.Next().ToString(); hdnData.HexColor = "#FFCCFF"; hdn.Add(0,hdnData); hdnData = new HDNData(); hdnData.Data = r.Next().ToString(); hdnData.Hyperlink = "#GTA"; hdn.Add(0, hdnData); hdnData = new HDNData(); hdnData.Data = r.Next().ToString(); hdnData.Hyperlink = "#GTA"; hdn.Add(0, hdnData); hdnData = new HDNData(); hdnData.Data = r.Next().ToString(); hdnData.Hyperlink = "#GTA"; hdn.Add(1, hdnData); hdnData = new HDNData(); hdnData.Data = r.Next().ToString(); hdnData.Hyperlink = "#GTA"; hdn.Add(1, hdnData); string data = hdn.ToString(); txtWarnings.Text = data; Clipboard.SetText(data); 

现在运行代码并将剪贴板数据粘贴到Excel表格中。 请注意,在Excel工作簿必须弄脏单元名称:GTA,因此Excel的单元格的超链接将链接到该GTA单元格。