Показать сообщение отдельно
Старый 08.09.2005, 14:23   #3  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,657 / 1158 (42) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Ну, я сделал примерно так. Метод в ComExcelDocument_RU

PHP код:
// Существует ли указанный Range в листе Excel
// Возвращает true или false
// Имеет смысл при использовании именованных ячеек
// 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;