|
Работа с разными экземпляроми Excel |
☑ |
0
MiniMuk
25.04.13
✎
06:35
|
Добрый день.
Есть проблема собрать листы экселя в один файл. Есть такой код
//Получаем экземпляр экселя ссумирующего файла
Эксель = Новый COMObject("Excel.Application");
//получаем в этом экземпляре книгу или создаем новую
Эксель.Workbooks.Open(ИмяФайла); //или Эксель.Workbooks.Add(); однофигственно
//теперь в цикле дергаем макет из базы
какойтотамцикл тратата
ФайлШаблон = МакетЕксель.Получить();
ФайлШаблон.Windows(ФайлШаблон.Name).Visible = 1;
ЛистШаблона = ФайлШаблон.Sheets(1);
//чепятам макет
ЗаполнитьМакет( ЛистШаблона, блаблабла);
//копирую лист макета в файл
ЛистШаблона.Copy(ФайлЭксель.Sheets(1));
конецкакогототамцикла
внимание вопрос если не открыт эксель то все нормально отрабатывает
если открыт файл экселя то ошибка копирования. Как поправить
Локализуем ошибочку
Причина как я понимаю разные (какимтошишом отделеные) экземпляры экселя
У меня моделируется так.
Щелкаем запуск экселя 2 раза получеем книга1, книга2 пытаемся копировать лист эксель вдругую книгу не видет другой книги. Теперь в экземпляре Книга2 делаем создать новый файла. Теперь копирование листов возможно между книга2 и книга3
|
|
1
MiniMuk
25.04.13
✎
06:36
|
да, уточняю МакетЕксель = Документы.БлаблаБла.ПолучитьМакет("Блаблабла");
|
|
2
Мимохожий Однако
25.04.13
✎
06:38
|
Я бы сделал макрос на экселе по сборке в один файл листы с разных файлов.
|
|
3
MiniMuk
25.04.13
✎
06:43
|
(2) Может вы ненароком накидаете выполнение маросов из 1с?
Смотри локализацию, я по сути средсвами экселя это сделать не могу, не то что из 1с. Я думаю если я ручками сделать не могу, то макросы мало помогут, они только механически повторяют что ручками сделано.
Тут надо как я понимаювсе увязать в один сom объект
|
|
4
Cube
25.04.13
✎
06:43
|
Может проблема в том, что у тебя разные COM объекты?
Попробуй что-то вроде:
Попытка
MSWord = ПолучитьCOMОбъект(, "Word.Application"); //Если Word уже открыт, то подключаемся к нему.
Исключение
Попытка
MSWord = Новый COMОбъект("Word.Application"); //Открываем Word.
Исключение
Сообщить("Ошибка формирования печатной формы. Скорее всего на Вашем компьютере не установлен Microsoft Word.", СтатусСообщения.Внимание);
Сообщить(ОписаниеОшибки(), СтатусСообщения.Внимание);
Возврат;
КонецПопытки;
КонецПопытки;
|
|
5
MiniMuk
25.04.13
✎
06:48
|
(4) Чтото вроде. Только я делаю не COMОбъект(
а получить ПолучитьМакет(.. который вовращает ком объект
|
|
6
Cube
25.04.13
✎
06:51
|
(5) Срока из (0):
Эксель = Новый COMObject("Excel.Application");
Или я что-то не правильно понял или в (0) ошибка?
|
|
7
Мимохожий Однако
25.04.13
✎
06:57
|
(3)Запускай запись макроса. Сохрани. Потом подправь.
А потом полученный макрос запускай из 1С.
|
|
8
MiniMuk
25.04.13
✎
07:00
|
(6) Хм, спасибо огромное. Одного всеравно не пойму посути
ФайлШаблон = МакетЕксель.Получить();
Получается тоже берет уже открытй сом объект.
/ушел радоваться
|
|
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший