Список форумов BOSSForum.RU - Форум. БОСС-Кадровик
Независимый форум, посвященный системе БОСС-Кадровик
и всему, что с ней связано
 FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 

Открытие шаблона из X-языка при помощи VB

 
Начать новую тему   Ответить на тему    Список форумов BOSSForum.RU - Форум. БОСС-Кадровик -> X-язык
Предыдущая тема :: Следующая тема  
Автор Сообщение
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)Bomb1;
Wb.Worksheets(1).Cells(:_row,2)Bomb2;
};



Заранее спасибо!
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
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 забил записанный макрос копирования вкладки))
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Показать сообщения:   
Начать новую тему   Ответить на тему    Список форумов BOSSForum.RU - Форум. БОСС-Кадровик -> X-язык Часовой пояс: GMT + 4
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах


Pоwerеd by рhpВB © 2001, 2005 рhpВB Grouр
Русская поддержка phрВB
Rambler's Top100 Рейтинг@Mail.ru Список форумов BOSSForum.RU