Имя: Пароль:
1C
1С v8
Интеграция с Excel
,
0 Lohmatiy
 
31.07.14
14:43
Коллеги, добрый день!

Мучаюсь со старой как мир проблемой. Называется она "интеграция с Excel".

Что, собственно, хочу сделать. У меня есть два файла Excel, из которых мне нужно подтянуть данные. Я делаю, вкратце, следующее:

Excel = Новый COMОбъект("Excel.Application");
Excel.AskToUpdateLinks    = Ложь;
Excel.DisplayAlerts    = Ложь;
Excel.Visible        = Ложь;

РабочаяКнига = Excel.Workbooks.Open(ПутьКФайлу);
// обработали ее всячески

РабочаяКнига.Close();
РабочаяКнига = Неопределено;

РабочаяКнига = Excel.Workbooks.Open(ПутьКФайлу2);
// опять же обрабатываем

РабочаяКнига.Close();
РабочаяКнига = Неопределено;

Excel.Quit();
Excel = Неопределено;

Что происходит на деле. Сначала открывается эксель. Соответственно, в диспетчере задач видно, что завелся один процесс, потом после закрытия рабочей книги процесс остается. При открытии второй книги появляется новый процесс. Система в этот момент еще жива. Зато при попытке закрыть вторую книгу она намертво виснет до тех пор, пока я не убью оба этих процесса. Что же мне делать, если очень хочется открывать обе книги?
1 fmrlex
 
31.07.14
14:55
Будь мужиком, делай как Маня. Открой файл экселя архиватором, достань xml'ки и работай напрямую.
2 andreymongol82
 
31.07.14
15:00
ADODB наше все!
3 fmrlex
 
31.07.14
15:01
(2) Да ну нафиг.
(0) На http://habrahabr.ru/post/140352/
Сломи Маню.
4 _fvadim
 
31.07.14
15:03
отключи предупреждения или сделай РабочаяКнига.saved = истина
возможно эксель там вопросы задаёт - проверить чо он хочет можно, если не прятать его в самом начале Excel.Visible        = истина;
5 andreymongol82
 
31.07.14
15:05
(3) А вдрух у него там у Excel старый-старый. 97 например)))
6 Lohmatiy
 
31.07.14
15:07
(1) долго, там большие объемы
(2) нет)))
(4) предупреждения, как раз, отключены. Через Saved сейчас попробую.
(5) нет, XL 2013 на одной машине и 2010 на другой.
7 Garykom
 
гуру
31.07.14
15:07
(0) ну сделай ты Excel.Visible = Истина;
и будет тебе счастье...

ЗЫ хотя положено ссылки (переменные) еще очистить после закрытия excel'я ))
8 Garykom
 
гуру
31.07.14
15:08
(7) глянул код в (0) эта не делай так закрывай ексель и открывай заново после каждого файла...
9 _fvadim
 
31.07.14
15:10
(8) это ещё зачем? оно и с одним экселем прекрасно работает.
10 Repey
 
31.07.14
15:11
А как при работе с десятым екселем можно использовать метод "SaveAs" ?
11 _fvadim
 
31.07.14
15:11
(9) +
писал программульку для печати 100500 экселек (не на 1с). каждый раз эксель открывать/закрывать - лишний тормоз.
12 Lohmatiy
 
31.07.14
15:16
(11) Saved помогло, супер! Спасибо!
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший