없이 하이퍼 링크 수식을 복사 및 붙여 넣기 내가 가진 엑셀 추가 기능에있는 테이블을 생성하고, 열 중 하나는이 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);
}
시도해 본 코드를 공유하십시오. – Bassie
@Bassie가 시도한 코드를 포함하도록 제 질문을 편집했습니다. 감사! –