Маленькие хитрости при работе с Excel
Как при работе с Excel через OLE обойти предупреждения
Excel требует подтверждений пользователя, например, при удалении листа из рабочей книги. При этом процесс обработки останавливается. Как сделать чтобы он не задавал таких вопросов?
Эксель = СоздатьОбъект(“Excel.Application”);
.....
Эксель.DisplayAlerts = 0;
..... а здесь делаешь что-нибудь
Эксель.DisplayAlerts = 1;
Формат числа при выгрузке в Excel
При выгрузке данных в Excel числа типа 9237642437 отображаются 9,23764Е+11. Есть такая фича у Excel: если перед числом (или другим значением) поставить апостроф (’), эксель это понимает как то, что ему подсовывают текст, а апостроф отображаться не будет, т.е. напиши так:
’9237642437
Для того, чтобы открыть файл *.mxl в Excel
Необходимо внести в реестр следующую информацию:
REGEDIT
[HKEY_CURRENT_USER\Software\Microsoft\Office\10.0\Excel\Converters]
“Moxel”=“1С:Предприятие (*.mxl),...\\bin\\mxl2xl.dll, *.mxl”
где:
<...> это путь к каталогу 1С-Предприятия
<10.0> это номер версии Экселя – XP. Для 2000 это будет 9.0, 97 – 8.0, 95 – 7.0
Как определить, когда закончились данные на листе при загрузке данных из Excel
SpecialCells(11) – “последняя” ячейка
Например, если нужен номер строки последней ячейки, то
LastRow=ExcelApp.Cells(1,1).SpecialCells(11).Row;
Обработка ошибочных значений
При обработке через OLE ячеек, содержащих ошибочные значения (#ДЕЛ/0!; #ЗНАЧ!; #ЧИСЛО! и т.п.) 1С зависает при обращении к свойству Value – не помогает даже конструкция Попытка –Исключение. Обойти эту неприятность можно очень просто – проверять перед обращением к Value свойство Text:
СписокОшибокЁкселя=СоздатьОбъект(“СписокЗначений”);
СписокОшибокЁкселя.ДобавитьЗначение(”#ПУСТО!”);
СписокОшибокЁкселя.ДобавитьЗначение(”#ДЕЛ/0!”);
СписокОшибокЁкселя.ДобавитьЗначение(”#ЗНАЧ!”);
СписокОшибокЁкселя.ДобавитьЗначение(”#ССЫЛКА!”);
СписокОшибокЁкселя.ДобавитьЗначение(”#ИМЯ?”);
СписокОшибокЁкселя.ДобавитьЗначение(”#ЧИСЛО!”);
СписокОшибокЁкселя.ДобавитьЗначение(”#Н/Д”);
//Для англ. версии
СписокОшибокЁкселя.ДобавитьЗначение(”#NULL!”);
СписокОшибокЁкселя.ДобавитьЗначение(”#DIV/0!”);
СписокОшибокЁкселя.ДобавитьЗначение(”#VALUE!”);
СписокОшибокЁкселя.ДобавитьЗначение(”#REF!”);
СписокОшибокЁкселя.ДобавитьЗначение(”#NAME?”);
СписокОшибокЁкселя.ДобавитьЗначение(”#NUM!”);
СписокОшибокЁкселя.ДобавитьЗначение(”#N/A”);
//...
ТекстЯчейки=Ячейка.Text;
Если СписокОшибокЁкселя.НайтиЗначение(ТекстЯчейки)=0 Тогда
Сообщить(Ячейка.Value);
Иначе
Сообщить(ТекстЯчейки);
КонецЕсли;
| опубликовано: 19 Март 2009, 17:24