|
Табличный документ из 1С на новый лист существующей книги Excel | ☑ | ||
---|---|---|---|---|
0
AleksandrUs75
26.05.14
✎
11:11
|
Есть внешняя обработка по созданию некой табличной части, в модуле формы которой имеется код:
ИмяФайла = Объект.Каталог + "\" + Объект.ИмяФайла + ".xlsx"; ТабДок.Записать(ИмяФайла,ТипФайлаТабличногоДокумента.XLSX); В результате которого создается новая книга Excel. Но, есть уже готовая книга с соответствующими листами. Вопрос, как изменить код, чтобы открывалась именно эта книга, добавлялся лист (с определенным именем, если такого еще нет) и уже в него выгружался табличный документ? |
|||
1
kobzon
26.05.14
✎
11:46
|
В результате этого ничего не создается!
|
|||
2
Crush
26.05.14
✎
11:53
|
(0) Создать файл через 1С, и дальше работать экселевскими шестеренками.
1. Открыть созданный файл; 2. Открыть имеющийся файл; 3. Выбрать всё. Скопировать. 4. Добавить лист. Вставить.:) Сначала сделай вручную с записью макроса. Потом примени этот макрос в 1С. |
|||
3
Crush
26.05.14
✎
11:59
|
+ (2) ну и погуглить немного
http://www.planetaexcel.ru/techniques/3/49/ |
|||
4
Яйца 1С
26.05.14
✎
12:01
|
+ права на папку
|
|||
5
AleksandrUs75
26.05.14
✎
13:01
|
(2) (3) Посредством Excel, это понятно, но заказчик не желает производить ни каких дополнительных манипуляций, хотят чтоб из 1С, сразу...
Поэтому и вопрос, может-ли 1С "сама" добавить лист в существующую книгу Excel? |
|||
6
Crush
26.05.14
✎
13:20
|
1С умеет выполнять в экселе работу пользователя. Ищи 1С + Эксель
|
|||
7
AleksandrUs75
26.05.14
✎
13:30
|
(6) Значит все таки может! Спасибо, пошел искать :)
|
|||
8
kobzon
26.05.14
✎
13:31
|
(7) Тут глянь может поможет: http://exp-1c.narod.ru/articles/articl01.htm
|
|||
9
AleksandrUs75
26.05.14
✎
13:39
|
(8) Уже смотрю, спасибо.
|
|||
10
AleksandrUs75
28.05.14
✎
10:45
|
Проблема не решилась :(
Изначально база лежит на сервере - Режим: Серверный (сжатие усиленное) Выгрузил ее (для экспериментов) - Режим: Файловый (без сжатия) Сделал ВнешнююОбработку Все работает, открывается Excel, создается лист, выгружаются данные (да, действительно тот еще геморрой). Был безумно счастлив, но не долго… Подключаю обработку к рабочей базе (на сервере) и… На строке: <CODE>ExcelПриложение = Новый COMОбъект("Excel.Application");</CODE> Получаю: Ошибка при запуске Microsoft Excel. {ВнешняяОбработка.ОтчетПоБанку.МодульОбъекта(70)}: Ошибка при вызове конструктора (COMОбъект): -2147221005(0x800401F3): Недопустимая строка с указанием класса : -2147221005(0x800401F3): Недопустимая строка с указанием класса Попробовал так: <CODE>ExcelПриложение = ПолучитьCOMОбъект("D:\1.xlsx");</CODE> Получил: Ошибка при запуске Microsoft Excel. {ВнешняяОбработка.ОтчетПоБанку.МодульОбъекта(72)}: Ошибка при вызове метода контекста (ПолучитьCOMОбъект): Ошибка получения объекта COM: -2147221014(0x800401EA): Не удается открыть файл при помощи специального имени Помогите, че за ерунда? |
|||
11
Irbis
28.05.14
✎
10:47
|
КнигаТемп=Excel.WorkBooks.Open(КаталогВременныхФайлов()+"TempAPP.xls");
ЛистТемп=КнигаТемп.WorkSheets(1); //Лист=Книга.WorkSheets.Add(); ЛистТемп.Copy(Книга.WorkSheets(1)); Книга.WorkSheets(1).Name="ОПТАН-Челябинск, Чел.-Южный"; КнигаТемп.Close(); УдалитьФайлы(КаталогВременныхФайлов()+"TempAPP.xls"); |
|||
12
f_vadim
28.05.14
✎
10:48
|
(10) а код где исполняется? а excel на сервере есть?
|
|||
13
AleksandrUs75
28.05.14
✎
10:51
|
(12) код в модуле объекта внешней обработки
Excel на сервере??? а кто его знает... |
|||
14
1cVandal
28.05.14
✎
10:52
|
Excel = Новый COMОбъект("Excel.Application");
Книга = Excel.Workbooks.Add(); Excel.DisplayAlerts = False; Книга.SaveAs(ФайлДанных); // если удастся найти способ копировать лист из временного файла в текущую открытую книгу, то от этого нагроможденая записей и открытий файла можно будет избавиться Excel.Workbooks(тФайл.Имя).Close(); Книга = Excel.Workbooks.Open(ФайлДанных); Excel.DisplayAlerts = True; ВремФайл = ПолучитьИмяВременногоФайла(РасширениеФайлаExcel); // для сброса в него mxl-ки с бухгалтерской отчетностью вФайл = Новый Файл(ВремФайл); ПечатнаяФорма.Записать(ВремФайл, ?(РасширениеФайлаExcel = "xlsx", ТипФайлаТабличногоДокумента.XLSX, ТипФайлаТабличногоДокумента.XLS)); Excel.Workbooks.Open(ВремФайл); InBook = Excel.Workbooks.Item(вФайл.Имя); OutBook = Excel.Workbooks.Item(тФайл.Имя); InSheet = InBook.Sheets("TDSheet"); // потому что сформированный из mxl-ки лист Excel получает по умолчанию имя "TDSheet" InSheet.Copy(OutBook.Worksheets(1)); Лист = OutBook.Worksheets("TDSheet"); Лист.Name = НазваниеЛиста.Значение; Excel.Workbooks(вФайл.Имя).Close(); СтеретьФайл(ВремФайл); |
|||
15
1cVandal
28.05.14
✎
10:53
|
грубо говоря есть файл эксель А, ты сохранняешь свою инфу в файл Б, затем копируешь из Б в А в новый лист
|
|||
16
f_vadim
28.05.14
✎
10:53
|
(13) хммм... ок. толстый клиент?
&НаСервере &НаКлиенте - о чём нибудь говорит? |
|||
17
1cVandal
28.05.14
✎
10:55
|
не зареган у тебя эксель на сервере
|
|||
18
f_vadim
28.05.14
✎
10:56
|
без установленного екселя не взлетит. ваш КО |
|||
19
AleksandrUs75
28.05.14
✎
10:57
|
т.е. на сервере, где лежит база, обязательно должен быть Excel, и по другому ни как?
|
|||
20
f_vadim
28.05.14
✎
10:59
|
(19) excel должен быть там, где исполняется код.
|
|||
21
Irbis
28.05.14
✎
10:59
|
(19) Эксель должен быть там где выполняется код по созданию объекта Эксель, а на сервере это или нет дело второстепенное
|
|||
22
AleksandrUs75
28.05.14
✎
11:02
|
попробую перенести код на клиента, посмотрим че выйдет...
|
|||
23
AleksandrUs75
28.05.14
✎
14:12
|
Перенес, все ОК!
Всем спасибо! |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |