C# 如何将超链接添加到Excel';带C的s细胞#

C# 如何将超链接添加到Excel';带C的s细胞#,c#,excel,hyperlink,C#,Excel,Hyperlink,如您所见,有时我们需要在Excel文件中添加大量超链接,作为程序员,您不希望手动执行,但希望以编程方式执行。 我已经在互联网上搜索过了,但我只找到了如何以编程方式添加Web的超链接,而不是当前的excel文件超链接。 因此,我认为以编程方式添加当前excel文件的超链接(或本地超链接)是一个很好的理想选择。我还没有找到一种方法,可以使用lib Microsoft.Office.Interop.excel将超链接添加到excel的单元格中,但我提出了一种理想方法,可以通过剪贴板数据添加超链接 我研

如您所见,有时我们需要在Excel文件中添加大量超链接,作为程序员,您不希望手动执行,但希望以编程方式执行。 我已经在互联网上搜索过了,但我只找到了如何以编程方式添加Web的超链接,而不是当前的excel文件超链接。
因此,我认为以编程方式添加当前excel文件的超链接(或本地超链接)是一个很好的理想选择。

我还没有找到一种方法,可以使用lib Microsoft.Office.Interop.excel将超链接添加到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单元格。

Excel支持:

查看我上面链接的页面,了解
HYPERLINK()
函数的常见示例,例如您正在查找的内容

例如,以下公式打开一个文件,导航到年度工作表并选择F10。超链接文本是单元格D1的内容

=HYPERLINK("[http://example.microsoft.com/report/budget report.xlsx]Annual!F10", D1) 
在上面的示例中,Excel文件位于HTTP位置,但也可能是本地路径,如下所示:

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