Я написал дополнительный метод на проверку самого факта существования именованной ячейки. Перед попыткой получить на нее ссылку проверяю факт существования.
PHP код:
// MVB, 14.09.2004 Существует ли указанный Range в листе Excel
// Имеет смысл при использовании именованных ячеек
// bookMark -> Excel bookmark name
public boolean rtg_existsRange(MSOfficeBookMark_RU bookMark,int _workSheetId = 1)
{
COM comRange,
comWorkSheet,
comApplication;
boolean existsRange = false;
str strRange;
;
if (m_comDocument)
{
comWorkSheet = this.getWorkSheet(_workSheetId);
comApplication = m_comDocument.application();
comWorkSheet.activate();
if (comWorkSheet && comApplication)
{
try
{
// Ошибка в Range генерит сообщение об ошибке, которое не подавляется Try...Catch
// comRange = comApplication.range(bookMark);
// Поэтому использую "макроподстановку" Evaluate
comRange = comApplication.evaluate(bookMark);
// В объекте comRange нет метода Error(), поэтому штатно прочитать ошибку не получается
// Конвертирую объект в строку и ищу в нем ключевое слово "ERROR"
strRange = comRange.toString();
if (strScan(strRange,'ERROR',1,strLen(strRange)) == 0)
{
existsRange = true;
}
}
catch (exception::Error)
{
existsRange = false;
}
}
}
return existsRange;
}