2017-10-27 5 views
0

없이 하이퍼 링크 수식을 복사 및 붙여 넣기 내가 가진 엑셀 추가 기능에있는 테이블을 생성하고, 열 중 하나는이 HYPERLINK 수식이됩니다 : 사용자가 셀을 복사 할 때엑셀 - 공식

=HYPERLINK(CONCATENATE("https://www.example.org/",[id]),[id]) 

이 포함되어 있습니다 공식, 그들은 다른 워크 시트에 붙여, 그들은이 얻을 : 그래서

=HYPERLINK(CONCATENATE("https://www.example.org/",ListObject1[id]),ListObject1[id]) 

, 그들은 이제 그들은 첫 번째 워크 시트의 첫 번째 행에서 셀을 복사 가정 해 봅시다, 다른 워크 시트의 5 행에 붙여 첫 번째 워크 시트의 5 번째 행의 값을 얻을 것입니다. 공식.

불행히도 이것은 의도하지 않았습니다. 사용자가 기대하는 것은 수식 대신 복사 한 값을 얻는 것입니다. 따라서 사용자가 붙여 넣기 작업을 수행 할 때 수식 대신 하이퍼 링크 값을 가져 오도록하려면 어떻게해야합니까?

불행히도 "값으로 붙여 넣기"가 작동하지 않습니다. 우리가 하이퍼 링크를 잃어 버리기 때문입니다.

이제 클립 보드 데이터를 편집하여 수식을 제거하고 클립 보드 데이터에 하이퍼 링크 값을 삽입하면 사용자가 붙여 넣기를 수행 할 때 하이퍼 링크 데이터를 가져올 수있는 방법이 있는지 조사하려고합니다. .

지금까지 작동하지 않습니다. 클립 보드 데이터 객체에서 "XML 스프레드 시트"를 수정했지만 작동하지 않았습니다. 아마도 수정해야 할 다른 것들이있을 것입니다.

이 문제를 해결하기위한 도움이나 제안에 감사드립니다.

감사합니다.

편집 : 클립 보드 데이터에서 "XML 스프레드 시트 '에서"공식 SS "

저는 여기를 제거하려 한 코드입니다. "ss : Formula"는 셀 수식을 저장하므로 수식을 가져 오는 대신 붙여 넣을 때 사용자가 제거하면 정확한 값을 얻을 수 있다고 생각했습니다.

  var dataObject = Clipboard.GetDataObject(); 
      var newDo = new DataObject(); 
      foreach (var format in dataObject.GetFormats()) 
      { 
       try 
       { 
        var value = dataObject.GetData(format); 
        newDo.SetData(format, value); 
       } 
       catch (Exception e) 
       { 
        Logger.Debug(e); 
       } 
      } 

      var xmlSpreadsheetClipboardData = Clipboard.GetData("XML Spreadsheet"); 
      if (xmlSpreadsheetClipboardData != null) 
      { 
       // Read the data and extract the workbook name, worksheet name, and cell. 
       var memoryStream = (MemoryStream) xmlSpreadsheetClipboardData; 
       var reader = new StreamReader(memoryStream, new System.Text.UTF7Encoding(), true); 
       var xml = reader.ReadToEnd().Replace("\0", ""); 
       var xmlDoc = new XmlDocument(); 
       xmlDoc.LoadXml(xml); 
       var node = xmlDoc.SelectSingleNode("/Workbook/Worksheet/Table"); 
       var worksheetXmlElementList = xmlDoc.GetElementsByTagName("Worksheet"); 
       var worksheetXmlElement = worksheetXmlElementList[0] as XmlElement; 
       var tableXmlElement = worksheetXmlElement.GetElementsByTagName("Table")[0] as XmlElement; 
       var rowXmlElement = tableXmlElement.GetElementsByTagName("Row")[0] as XmlElement; 
       var cellXmlElement = rowXmlElement.GetElementsByTagName("Cell")[0] as XmlElement; 
       cellXmlElement.Attributes.RemoveNamedItem("ss:Formula"); 
       newDo.SetData("XML Spreadsheet", xmlDoc.InnerXml); 
       Clipboard.SetDataObject(newDo); 
      } 
+0

시도해 본 코드를 공유하십시오. – Bassie

+0

@Bassie가 시도한 코드를 포함하도록 제 질문을 편집했습니다. 감사! –

답변

0

이것은 Excel의 빌드 방식입니다. 이것을 무시하려면 ctrl C를 눌러 수식을 복사 할 수 있습니다. 붙여 넣으려는 위치는 텍스트 만 선택하는 것보다 ctr + alt + V를 누르십시오.

C# 에서 해결하려면 어쩌면 u 행에 함수가 보이지 않도록 설정할 수 있습니다. 그리고이 보이지 않는 레코드의 가치를 보여주십시오. Excel에서 값이 뭔가를해야만 등을 사용하여 복사 할 경우 는 : https://stackoverflow.com/a/24555571/5713884

0

새 열을 만들 수 있다면, 당신은 당신이 복사 한 후 할 수있는 URL로 링크를 변환하는 VBA를 사용할 수 있습니다.

https://answers.microsoft.com/en-us/office/forum/office_2007-excel/remove-friendlyname-from-hyperlink-via-function-or/3ccec10d-d7cc-4c56-a9a3-9e13aeda77e1

Sub ExtractHL() 
Dim HL As Hyperlink 
    For Each HL In ActiveSheet.Hyperlinks 
     HL.Range.Offset(0, 1).Value = HL.Address 
    Next 
End Sub 
아니면 두 번째 열 계획 및 단지 (0,0) 오프셋 사용을 생략하고 URL을 현재 셀에있는 링크를 대체 할 수있다. 이 매크로는 버튼으로 실행될 수 있으며 사용자를 위해 다른 시트에 URL을 복사/붙여 넣기하고 URL을 원래 위치에 남겨 두도록 편집합니다.

Excel을 사용하는 경우에만 VBA가 유일한 솔루션이라고 생각합니다.

+0

C#을 사용하여이 작업을 수행 할 수 있지만 불행히도 이것은 속도가 느려서 하이퍼 링크를 생성하는 수식을 사용하는 이유입니다. 하이퍼 링크로 각 셀의 서식을 지정하면 속도가 느려집니다. –