ずにコピー&ペーストのハイパーリンク式Iは、Excelがアドインされていて表を作成し、いずれかの列は、このハイパーリンクの式を有する:エクセル - 式
=HYPERLINK(CONCATENATE("https://www.example.org/",[id]),[id])
ユーザーはこのことを含んでいるセルをコピーする場合式、彼らは別のワークシートに貼り付けると、彼らはこの取得:だから
=HYPERLINK(CONCATENATE("https://www.example.org/",ListObject1[id]),ListObject1[id])
、彼らは、のは、彼らが最初のワークシートの最初の行からセルをコピーするとしましょう、と別のワークシートの5行目に貼り付け最初のワークシートの5行目の値を取得します。式。
残念ながら、これは意図されていません。ユーザーが期待するのは、式の代わりにコピーした値を取得することです。では、ユーザーが貼り付け操作を実行するときに、式の代わりにハイパーリンクの値を取得するようにするにはどうすればよいですか?
残念ながら、ハイパーリンクが失われるため、「値にペースト」は機能しません。
これで、クリップボードのデータを編集して式を削除し、クリップボードのデータにハイパーリンクの値を挿入する方法があるかどうかを調べるようにしているので、ユーザーが貼り付けを実行するとハイパーリンクのデータ。
これまでのところ動作しません。私はクリップボードのデータオブジェクトの "XML Spreadsheet"を修正しましたが、うまくいかず、変更する必要があるかもしれません。
この問題を解決するための助けや提案がありがとうございます。
ありがとうございます!
編集:クリップボードのデータの「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は私が試したコードを含めるように私の質問を編集しました。ありがとう! –