Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
dimachus
Зарегистрирован: 07.10.2011 Сообщения: 108
|
Добавлено: Ср Мар 18, 2015 11:51 Заголовок сообщения: Открытие шаблона из X-языка при помощи VB |
|
|
Добрый день коллеги, не подскажите как открыть шаблон Excel из произвольного отчета используя следующий код:
Взято из примера документации, только там открывается новый Excel, а мне надо из шаблона:
Код: |
-- пример с Excel
execute xocx{
Excel.Application as Excel;
.Visible=True;
Excel.Workbooks As Wbs; -- создание на базе Property
.Add(-4167,&Wb);--получить объект как результат
};
local vb.wb==&Wb; -- передача в VBScript
vb{
if isobject(wb) then
msgbox TypeName(wb)
end if
if isobject(wb.Worksheets(1)) then
msgbox TypeName(wb.Worksheets(1))
end if
};
--вывод данных
alias _row = 0 as long;
scan select error,text from x$error where error < 0
execute{
let _row+=1;
Wb.Worksheets(1).Cells(:_row,1)1;
Wb.Worksheets(1).Cells(:_row,2)2;
};
|
Заранее спасибо! |
|
Вернуться к началу |
|
|
dimachus
Зарегистрирован: 07.10.2011 Сообщения: 108
|
Добавлено: Ср Мар 18, 2015 12:14 Заголовок сообщения: |
|
|
Как открыть шаблон разобрался.
Подскажите как теперь скопировать вкладку?
Код: |
execute xocxfree{*};
Local PathTemplate;
alias PathTemplate := @@xReport(open USER_MY_TEMP.XLT);
if PathTemplate[''] = '' then {
Error [\3Файл Шаблон отчета USER_MY_TEMP.XLT не найден!];
con;
};
Let sheet_ = 1;
Excel.Application as Excel;
Excel.Visible=True;
Excel.Workbooks.Open(PathTemplate[""]);
VB {
Dim Ex
Dim Sh
};
VB {
Set Ex = GetObject(,"Excel.Application")
Set Sh = Ex.ActiveSheet
};
vb{ Dim n1V };
vb{ Dim n2V };
_begin:; -- точка возвращения GO TO
--выгружаем данные из временной таблицы в шаблон
stable @x
select Name, Name_i, Name_o
from Card _hintbrowser
where Full_Name like '%Михаил%'
order by Name;
let n := 9; -- № строки в шаблоне для начала выгрузки
scan @x
execute {
Excel.ActiveWorkbook.sheets(sheet_).cells(n, 1) = @x:1[''];
Excel.ActiveWorkbook.sheets(sheet_).cells(n, 2) = @x:2[''];
Excel.ActiveWorkbook.sheets(sheet_).cells(n, 3) = @x:3[''];
let n := n + 1;
};
--копируем вкладку и создаём точно такую же (с такой же шапкой)
let sheet_ := sheet_ + 4;
vb {
Ex.ActiveWorkbook.sheets("Main").Select
Ex.ActiveWorkbook.sheets("Main").Copy
Ex.ActiveWorkbook.sheets("Main (2)").Select
Ex.ActiveWorkbook.sheets("Main (2)").Name = "Main (2)"
Ex.ActiveWorkbook.sheets("Main (2)").Select
Ex.ActiveWorkbook.sheets("Main (2)").Name = "Volgograd"
};
CON Открытие Excel ...;
con;
execute xOcxFree(*); -- Закрыть программу EXCEL
--set Excel = Nothing;
ALIAS :_Result=-1; free mif, *;
|
Выдаёт ошибку:
Error0: "Предполагается наличие инструкции"
Может кто сталкивался? |
|
Вернуться к началу |
|
|
Joenka
Зарегистрирован: 08.11.2013 Сообщения: 77 Откуда: Moscow
|
Добавлено: Ср Мар 18, 2015 14:14 Заголовок сообщения: |
|
|
Не совсем понятно что именно Вы хотите сделать?
У Вас в отчете неопределенное кол-во вкладок и вы хотите их выгрузить в Excel?
Просто логичнее когда "мухи отдельно, котлеты отдельно".
Сначала все данные выгрузите в Excel, потом МАКРОСОМ (так и проще писать и работает лучше) раскидайте данные как Вам надо.
А так у Вас получается, что вы используете шаблон, но он у вас еще не доделан, недоподготовлен, и вы его налету хотите допилить и заполнить данными.
Или я не понял самой задачи? Поясните. |
|
Вернуться к началу |
|
|
Joenka
Зарегистрирован: 08.11.2013 Сообщения: 77 Откуда: Moscow
|
Добавлено: Ср Мар 18, 2015 14:24 Заголовок сообщения: |
|
|
К тому же вот это явно с ошибками:
Ex.ActiveWorkbook.sheets("Main").Select
Ex.ActiveWorkbook.sheets("Main").Copy
Ex.ActiveWorkbook.sheets("Main (2)").Select
Ex.ActiveWorkbook.sheets("Main (2)").Name = "Main (2)"
Ex.ActiveWorkbook.sheets("Main (2)").Select
Ex.ActiveWorkbook.sheets("Main (2)").Name = "Volgograd"
Не забывайте, что в русской и аглицкой версии при копировании листы по разному будут называться и обращаться лучше по индексу!
Я бы хотя бы так написал:
Ex.ActiveWorkbook.Sheets(1).Select
Ex.ActiveWorkbook.Sheets.Add
Ex.ActiveWorkbook.Sheets(2).Name = "Volgograd" |
|
Вернуться к началу |
|
|
dimachus
Зарегистрирован: 07.10.2011 Сообщения: 108
|
Добавлено: Ср Мар 18, 2015 17:13 Заголовок сообщения: |
|
|
Спасибо за ответ!
Нет мне просто добавить нужно было вкладку с особенным форматированием. Вообщем сделал так:
Код: |
-- Определяем лист Excel
Excel.Application as Excel;
Excel.Visible = True;
-- Открываем шаблон
Excel.Workbooks.Open(PathTemplate[""]);
Excel.Application.Run("Macro5");
--===========================
-- Создаём вкладку как копию оригинальной ORIGIN и называем её так как нам надо
Excel.Application.Run("User_Add_Vkl");
Excel.ActiveWorkbook.sheets(1).Name = 'FirstCopy';
|
а в макрос User_Add_Vkl забил записанный макрос копирования вкладки)) |
|
Вернуться к началу |
|
|
|