2016-12-16 1 views
2

언뜻보기에 Excel 파일에 많은 하이퍼 링크를 추가해야하고 프로그래머는 수동으로하고 싶지는 않지만 수행하려고합니다. 프로그래밍 방식으로 인터넷을 통해 검색했지만 프로그래밍 방식으로 웹의 하이퍼 링크를 추가하는 방법 (현재 Excel 하이퍼 링크가 아닌) 만 찾는 방법을 찾습니다. 그래서 프로그래밍 방식으로 현재 Excel 파일의 하이퍼 링크 (또는 로컬 하이퍼 링크)를 추가하는 방법을 찾는 것이 이상적이라고 생각합니다.C#을 사용하여 Excel의 셀에 하이퍼 링크를 추가하는 방법

답변

1

라이브러리 Microsoft.Office.Interop.Excel을 사용하여 Excel의 셀에 하이퍼 링크를 추가하는 방법을 찾지 못했지만 클립 보드 데이터를 통해 하이퍼 링크를 추가 할 수있는 이상이 생겼습니다.

Excel의 클립 보드 데이터를 조사한 결과 엑셀 데이터가 HTML 데이터라는 것을 알았습니다. 그래서 HTML로 데이터를 처리 및 Excel에 붙여 넣습니다 - 그리고 BAM - 우리는 엑셀의 세포

우리는이

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) 
관련 문제