Я портирую Excel Addin (использованный Shimloader) на Exceldna, и да, я видел другие вопросы SO (и не SO), но ничего не решает мой вопрос, и я надеюсь, что есть более новые решения.
Код прост.
[ExcelFunction(Name="DoSomething")]
string DoSomething()
{
var xl = ExcelDna.Application;
var callerCell = xl.Caller;
var row = getRow(excelReference.RowFirst+1, callerCell.WorkSheet) ;
}
В GetRow ():
var row = (Range)worksheet.Rows[row];
var cell = (Range)bracketRow.Columns[4];
Когда я проверяю отладчик, я вижу, что найденная ячейка на 100% правильная, потому что cell.FormulaLocal
соответствует формуле строки и столбца Excel.
Значение в FormulaLocal
равно "OtherSheet!A12"
.
Но по какой-то причине, когда я пытаюсь cell.Value2
, он выдает COMException
и ничего больше. Это не многопоточное приложение, и я не могу понять, почему это происходит.
Есть идеи?
EDIT:
Когда я изменяю формулу на значение, которое она должна была получить, если ссылка на лист была успешной, она не выдает.
РЕДАКТИРОВАТЬ 2:
Я справился с этим, добавив атрибут IsMacroType=true
в функцию Excel. Но теперь xl.Caller
возвращает null
, argh