【问题标题】:Inserting hyperlink in the DataTable C#在 DataTable C# 中插入超链接
【发布时间】:2012-09-07 06:53:37
【问题描述】:

我想在将数据表导出到excel中添加超链接

但是excel不能显示超链接属性,只能显示字符串。

dataTable 输入字段有什么限制吗?

下面是我格式化数据表的代码

       int dt_current_row = 0;
        string[] Days = testDays.ToArray();

        for (int i = 0; i < tableOriginal.Rows.Count; i++)
        {
            string wo_number = handle(tableOriginal.Rows[i]["WO_NUMBER"].ToString());
            string date = handle(tableOriginal.Rows[i]["CREATE_DATE"].ToString());

            if (i == 0)
            {

                // Insert New
                DataRow dr = dt.NewRow();
                dt.Rows.Add(dr);
                dr["WO_NUMBER"] = wo_number;

                for (int x = 1; x < dt.Columns.Count; x++)
                {
                    int z = Convert.ToInt32(Math.Floor(0.5 * (x - 1)));
                    //search Date
                    if (tableOriginal.Rows[i]["CREATE_DATE"].ToString() == Days[z])
                    {
                        //if equal , insert num and ID 
                        object xx = tableOriginal.Rows[i]["NUM"];
                        int num = Convert.ToInt32(xx);
                        dr["PHOTO_" + z.ToString()] = num;

                        object yy = tableOriginal.Rows[i]["PHOTO_ID"];
                        string photo = Convert.ToString(yy);
                        dr["ID_" + z.ToString()] = HttpContext.Current.Server.HtmlEncode(httpLink + photo);

                        break;
                    }
                }
            }

....以及将DataTable中的单元格导出到excel Document xls中的单元格的部分 我试过设置公式,但它不起作用

foreach (DataRow r in result.Rows)
    {
        currentCol = 1;
        foreach (DataColumn c in result.Columns)
        {
            string temp = c.ColumnName.ToString().Substring(0,2);
            if (temp.Equals("ID")) 
            {
                httpLinkForPhoto = r[currentCol - 1].ToString();
                if (!httpLinkForPhoto.Equals(null))
                {
                    string formula = "=HYPERLINK(" + httpLinkForPhoto + "," + httpLinkForPhoto + ")";
                    excelDoc2.SetFormula(1, 1, currentRow, currentCol, currentRow, currentCol, formula);
                }
            }
            else
            { 
                excelDoc2.setCell(1, 1, currentRow, currentCol, r[currentCol - 1].ToString()); 
            }            
            currentCol++;
        }
        currentRow++;
    }

【问题讨论】:

    标签: c# excel datatable


    【解决方案1】:

    .net DataTable 只能包含 .net 类型。所以不可能在数据表中添加“超链接”。但当然您可以向 Excel 单元格添加超链接。有关向 Excel 添加超链接的详细信息,请参阅 this questionMSDN。根据您的代码,这可能看起来像

    // common syntax to  add a Hyperlink to Excel
    object Add(
    [In] object Anchor, 
    [In] string Address, 
    [In, Optional] object SubAddress, 
    [In, Optional] object ScreenTip, 
    [In, Optional] object TextToDisplay
    );
    
    // your code
    for (int rowIndex=0; rowIndex<result.Rows.Count; rowIndex++)
    {
        for (int columnIndex=0; columnIndex<result.Columns.Count; columnIndex++)
        {
            string yourValue = result.Rows[rowIndex].Item[columnIndex].ToString();
            if (columnIndex!=YOUR_HYPERLINK_COLUMN_INDEX)
                excelDoc2.setCell(1, 1, rowIndex, columnIndex, yourValue);      
            else
            {
                 Excel.Range range = (Range) YOUR_SHEET.Cells[rowIndex, columnIndex];
    
                 CURRENT_WORKSHEET.Hyperlinks.Add(
                               range, 
                               yourValue, 
                               Type.Missing,"YOUR_SCREEN_TIP",
                               "YOUR_TEXT_TO_DISPLAY");
            } 
        }
    }
    

    【讨论】:

    • YOUR_HYPERLINK_COLUMN_INDEX 是什么意思?这是否意味着我必须使用列索引进行硬编码才能启用这种超链接功能?
    • 是的!在您的代码中,只有一列应该有超链接(PHOTO_ID - 对吗?),因此您可以将 YOUR_HYPERLINK_COLUMN_INDEX 更改为此列的索引
    • 问题已修改我曾尝试将列名的前缀过滤掉为“ID”,然后插入公式,但结果不起作用。
    • 试试插入公式怎么样?
    • 你试过我的解决方案了吗(没有公式?)你的结果是什么?
    【解决方案2】:

    Excel 中有一个函数可以做到这一点。语法是

    =HYPERLINK(url;friendlyname)
    

    只要确保你的单元格中的文本看起来像这样,url 和friendlyname 当然是占位符,你应该用它们代替你的URL 和要显示的文本。

    【讨论】:

      猜你喜欢
      • 2017-05-03
      • 2011-10-15
      • 2022-11-16
      • 1970-01-01
      • 2016-06-23
      • 1970-01-01
      • 2023-03-11
      • 2011-09-22
      • 2019-11-15
      相关资源
      最近更新 更多