У меня есть надстройка для Excel, написанная на C #, которая имеет некоторый код обработки копирования / вставки.Когда пользователь копирует, я хочу поместить свой собственный объект класса TableData в буфер обмена и получить его обратно, когда пользователь вставит данные на лист.Звучит очень просто, и я нашел в Интернете дюжину статей, но по какой-то причине он не работает в моем коде.
Вот мой класс TableData:
[Serializable]
[Guid("794E06D9-7CE4-40dc-8187-BDC105A0F866")]
public class TableData
{
public string Name;
public TableData()
{ }
}
Я даже дал ему GUID дляубедитесь, что он загружает точно такой же класс, даже если он загружается из какой-либо другой сборки (если объект надстройки загружен дважды по какой-либо причине).
Это то, что я делаю, чтобы установить данные при копировании:
TableData data = new TableData();
data.Name = "test";
Clipboard.SetData("MyTable", data);
И при вставке:
TableData data = Clipboard.GetData("MyTable") as TableData;
ЗДЕСЬ >> данные равны нулю, но если я печатаю GetData («MyTable») в ближайшем окне, он показывает поток памяти, который я не смог преобразоватьв TableData, даже используя метод BinaryFormatter :: DeSerialize ()
Я мог бы сделать здесь какую-то глупую ошибку, но я не могу понять это.Кто-нибудь может указать на проблему здесь?
ОБНОВЛЕНО
Это дополнение COM, а не дополнение VSTO.Я установил макросы в методе OnKey, чтобы они вызывались, когда пользователь нажимает клавиши CTRL + C и CTRL + V на листе Excel.Существует отдельный модуль VBA, который обрабатывает эти запросы и направляет их в надстройку .NET.
Application.OnKey("^c", "OnCopy");
Таким образом, вызов переходит к VBA, а затем VBA перезванивает в мою надстройку .NET.Не уверен, что между вызовами участвует какой-то другой процесс.
Работает нормально, если я помещаю и получаю байт [] из буфера обмена, но не для своего пользовательского класса