Имя: Пароль:
1C
1С v8
1C 8.2 и Excel
0 nAPACEHAK
 
30.04.14
16:13
При открытии Excel
Попытка
        Excel = Новый COMОбъект("Excel.Application");
        Excel.WorkBooks.Open(ПутьКФайлу);
        //Состояние("Обработка файла Microsoft Excel...");
        ExcelЛист = Excel.Sheets(Лист);
    Исключение
        Сообщить("Ошибка при запуске Microsoft Excel."

        + Символы.ПС + ОписаниеОшибки(), СтатусСообщения.Внимание);

получаю ошибку
Ошибка при запуске Microsoft Excel.
{Обработка.ЗагрузитьОтбытиеИзФайла.Форма.Форма.Форма(28)}: Ошибка при вызове конструктора (COMОбъект): Приложение было запущено, но оно не зарегистрировало фабрику классов: Приложение было запущено, но оно не зарегистрировало фабрику классов

Куда копать?
1 Wobland
 
30.04.14
16:14
ну не в гугл же, правда?
2 nAPACEHAK
 
30.04.14
16:16
ну туда я первым делом сунулся, но ничего не удалось дельного найти ((((

запуск 1С от администратора - тоже ошибка
3 rozer76
 
30.04.14
16:18
эксель (уста/переуста)новить
4 nAPACEHAK
 
30.04.14
16:20
а кроме (уста/переуста)новки есть варианты?
Excel 2013 стоит
5 Torquader
 
30.04.14
16:31
(4) Твой очень новый Excel почему-то не хочет общаться с тобой, так как не смог зарегистрировать интерфейс в таблице.
Если офис starter или что-то типа того, то он не умеет.
6 z80a
 
30.04.14
16:33
(0) Поставить libreoffice
7 nAPACEHAK
 
30.04.14
16:41
Странно... Офис ПРО стоит. Лицензия. Переустанавливать то как, если все ключи потеряны. А ломаный не прокатит :(
Может тут чего?
http://s019.radikal.ru/i627/1404/70/30d2caf1b505.jpg
8 nAPACEHAK
 
30.04.14
16:42
не. не то
9 MiniMuk
 
30.04.14
17:02
на 64битном сервере?
10 Torquader
 
30.04.14
17:34
Попробуйте ещё явно указать версию Excel.
Excel.Application.12 или какой у него номер.
11 nAPACEHAK
 
30.04.14
20:30
64 бит сервер
явно указать - не прокатило

лан. буду тогда через xml забирать
12 Torquader
 
30.04.14
20:45
А офис - 32 бита ?
Тогда можно попробовать через DCOM - забирать по сети (или с той же машины, но имитируя сеть).
13 MiniMuk
 
01.05.14
12:22
(11) про спец папочку для 64битного сервера слышал?
14 zulu_mix
 
01.05.14
13:04
ФайлExcel = ПолучитьCOMОбъект(ПутьКФайлу);
ExcelЛист = ФайлExcel.Sheets(Лист);
15 nAPACEHAK
 
02.05.14
21:25
нет. А что за спец папочка? расскажи?
16 nAPACEHAK
 
02.05.14
21:43
ФайлExcel = ПолучитьCOMОбъект(ПутьКФайлу);
ExcelЛист = ФайлExcel.Sheets(Лист);

вроде работает. зато теперь в другой строке ошибка.
работало так:
ActiveCell = Excel.ActiveCell.SpecialCells(xlLastCell);
Теперь получаю:
{Обработка.ЗагрузитьОтбытиеИзФайла.Форма.Форма.Форма(49)}: Поле объекта не обнаружено (ActiveCell)
    ActiveCell = Excel.ActiveCell.SpecialCells(xlLastCell);

После
ФайлExcel = ПолучитьCOMОбъект(ПутьКФайлу);
наверно надо немного по другому ячейки обрабатывать?

Но это уже наверно другая история....
17 Torquader
 
02.05.14
21:58
(16) Зачем тебе активная ячейка ?
Обращайся через Cell(Ряд,Строка) ?
Потом, нужно сначала получить книгу, потом найти в ней лист и только после этого читать этот лист.
18 DjSpike
 
02.05.14
22:00
Можно все сделать через Yoksel.
19 Чайник Рассела
 
02.05.14
22:01
а что с ADO уже не модно работать?
20 Torquader
 
02.05.14
22:05
Человек хочет через Excel и у него уже половина заработала - что вы ему мешаете ?
21 Чайник Рассела
 
02.05.14
22:05
(20) зачем идти порочным путем?
22 Torquader
 
02.05.14
22:08
(21) Знаешь, когда выяснится, что тип строки определяется цветом или размером шрифта, то ADO отправляется в далёкий лес.
А Yoksel на 64-битный сервер может и не встать.
23 nAPACEHAK
 
02.05.14
22:20
блин.. не умею тут ссылки на посты писать, типа (17) научите )))

вот для чего активная ячейка - определить последнее поле со значением для перебора далее  

xlLastCell = 11;
ActiveCell = Excel.ActiveCell.SpecialCells(xlLastCell);
RowCount = ActiveCell.Row;

по задумке - с экселя выдергиваем последнее непустое значение (исключая те, где были введены данные и потом стерты из ячейки)
это значение и есть число строк с которых надо забрать данные

далее уже Cell(Ряд,Строка) циклом по RowCount
Для Row=НачСтрока По RowCount Цикл

эта обработка выдрана с рабочей базы, но там 32
на 64 не работает. таже самая ошибка была в строке из начала поста

переделал по совету (14) - ПолучитьCOMОбъект(ПутьКФайлу);
стала появляться другая ошибка, строками ниже, которая про ActiveCell
24 nAPACEHAK
 
02.05.14
22:20
о! уже умею ссылки на пост писать )))))
25 Torquader
 
02.05.14
22:22
Вместо ActiveCell бери просто лист, из которого читаешь, или UsedRange.Rows.Count - тоже даёт число рядов, только в последнем офисе - изменённые (то есть формат и обрамление) тоже считаются непустыми (чтоб им пусто было).
26 nAPACEHAK
 
02.05.14
22:23
(20) да у меня одна обработка полностью работает через эксель. эту стал писать по аналогии, но на 64 - поймал ошибку
взял рабочую - и та же самая ошибка

надо данные забрать с другой программы, а она умеет только в pdf, html, xls и xml выгружать.
думаю первые 2 варианта точно не прокатят )))
27 Torquader
 
02.05.14
22:25
(26) Ты лист получил ?
Просто - ActiveCell действует, если пользователь интерактивно что-то выделил - у тебя сервер - и он точно не может ничего выделить.
28 nAPACEHAK
 
02.05.14
22:26
(25) вот про эти "непустые" и идет речь
ActiveCell = Excel.ActiveCell.SpecialCells(11);
их хорошо обрабатывает. пустые измененные (формат, обрамление, введены и удалены данные итд) - считаются пустыми
29 nAPACEHAK
 
02.05.14
22:28
(27) ммм...эээ... а как же обработка которая уже не по разу данные забирала? открыл эксель, считал, закрыл. никто ж ничо не выделял. или я чот не догоняю? %)
30 Torquader
 
02.05.14
22:29
(29) Всё зависит от версии Excel - если она делает документ активным (то есть окно в Foreground), то появляется активная ячейка, если окно в неизвестном состоянии, то ячейка может и не появиться.
31 nAPACEHAK
 
02.05.14
22:43
(30) Если речь про версию Excel то работает на офис 2010 и не работает на офис 2013 обе 32-разрядные
ОС в 1м случае Win7 x86 во 2м Win8 x64
32 Torquader
 
02.05.14
22:44
(31) На 13-том чего-то вообще криво работало.
Но, открой справочник объектов Excel и посмотри, что там поменялось - в некоторых версиях там всё по-русски написано.
33 nAPACEHAK
 
04.05.14
13:21
блин....

xlLastCell = 11;
Excel = ПолучитьCOMОбъект(ПутьКФайлу);
ExcelЛист = Excel.Sheets(Лист);
ActiveCell = ExcelЛист.Cells.SpecialCells(xlLastCell);
Программист всегда исправляет последнюю ошибку.