2016-12-16 24 views
2

ご覧のとおり、Excelファイルに多くのハイパーリンクを追加する必要があります。プログラマは手動で行う必要はありませんが、実行したいと考えています。プログラム的に 私はインターネットを介して検索しましたが、現在のExcelのハイパーリンクではなく、Webのハイパーリンクをプログラムで追加する方法しか見つけられません。 したがって、現在のExcelファイルのハイパーリンク(またはローカルのハイパーリンク)をプログラムで追加する方法を見つけるのが理想的だと思います。C#でExcelのセルにハイパーリンクを追加する方法

答えて

1

ライブラリの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セルにリンクします。

2

ExcelがHYPERLINK() functionをサポートしています。

HYPERLINK(link_location, [friendly_name]) 

は、私は、そのようなあなたが探しているものとしてHYPERLINK()機能の一般的な例、については上記にリンクしたページを見てみましょう。

たとえば、次の数式はファイルを開き、年次のワークシートに移動し、F10を選択します。ハイパーリンクのテキストは、セルD1の内容です。上記の例で

、Excelファイルは、HTTPの場所にあるが、以下に示すように、それは同様に良好に、ローカルパスとすることができる:

=HYPERLINK("[D:\Documents\budget report.xlsx]Annual!F10", D1) 
関連する問題