0

dataTable を Excel にエクスポートするときにハイパーリンクを追加したい

しかし、Excel はハイパーリンク プロパティを表示できず、文字列のみを表示します。

dataTable 入力フィールドに制限はありますか?

以下は、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 ドキュメント 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++;
    }
4

2 に答える 2

2

このための関数がExcelにあります。構文は次のとおりです。

=HYPERLINK(url;friendlyname)

セル内のテキストがそのようになっていることを確認してください.urlとフレンドリーネームはもちろんプレースホルダーであり、それらをURLとテキストに置き換えて表示する必要があります.

于 2012-09-07T07:17:07.707 に答える
2

.net DataTableには、.net タイプのみを含めることができます。そのため、dataTable 内に「ハイパーリンク」を追加することはできません。もちろん、Excel の Cell にハイパーリンクを追加することもできます。Excel へのハイパーリンクの追加の詳細については、この質問またはMSDNを参照してください。あなたのコードによると、これは次のようになります

// 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");
        } 
    }
}
于 2012-09-07T07:21:23.943 に答える