| Предыдущая тема :: Следующая тема   | 
	
	
	
		| Автор | 
		Сообщение | 
	
	
		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 забил записанный макрос копирования вкладки)) | 
			 
		  | 
	
	
		| Вернуться к началу | 
		 | 
	
	
		  | 
	
	
	
	
	
		 |