Страница 1 из 1
					
				EasyExcel
				Добавлено: 09 Июнь 2008, 7:19
				 Anatoly
				После вывода данных в Excel хотел бы туда сразу попадать.
Ставлю в конце кода Visible(True).
Иногда срабатывает - попадаю в Excel,  а иногда не попадаю туда. Приходится
давить внизу кнопку чтобы в него попасть. 
В чем дело?
			 
			
					
				Re: EasyExcel
				Добавлено: 09 Июнь 2008, 10:44
				 Admin
				У меня примерно такой код везде. И окончание везде одинаковое.
Вроде всегда в Excel прыгает.
Код: Выделить всё
  ! инициализация
  EE.Init(TRUE, FALSE, GLO:ExcelStartNew)
  EE.ScreenUpdating(FALSE)
  EE.AddWorkbook
  ! выводим заголовок
  EE.Write(1,2, 'Прайслист по Хабаровским подразделениям')
  !EE.Write(2,2, 'По виду остатка: ' & CLIP(RT:RestDescription))
  EE.Write(3,2, 'На дату: ' & FORMAT(TODAY(), @D6.b))
  ! заголовок при печати
  ! делим страницу
  EE.SelectRange(RowPos,RowPos,RowPos,RowPos)
  !--------------------------------------------------------
  ! вывод заголовков
  EE.Write(RowPos,ColPos,  '№№')
  EE.Write(RowPos,ColPos+1,'Наименование товара')
  EE.Write(RowPos,ColPos+2,'Цена')
  !--------------------------------------------------------
  ! выводим очередь
  EE.WriteQueue(RowPos+1,ColPos,ReportData,2)
  !--------------------------------------------------------
  ! форматируем столбцы
  EE.SelectRange(RowPos,ColPos+2,RowPos+Rows,ColPos+2)
  EE.SetFormat(CellFormat:Numeric,2,1)      
  !--------------------------------------------------------
  ! рисуем рамку
  EE.SelectRange(RowPos,ColPos,RowPos+Rows,ColPos+(Cols-1))
  EE.DrawTable(BoxMode:Table, LineStyle:Continuous, BorderWeight:Thin)
  ! объединяем ячейки заголовка
  EE.SelectRange(1,1,1,Cols)
  EE.MergeCells(CellAlign:Center,CellAlign:Center)
  ! установка шрифта всей таблице
  EE.SelectRange(1,1,RowPos+Rows,ColPos+(Cols-1))
  EE.SetFont('Arial', 8)
  EE.AutoFit(XlFit:Horiz)
  ! форматируем заголовок
  EE.SelectRange(1,1)
  EE.SetFont('Arial',12,,FONT:Bold)
  ! форматирование заголовка таблицы
  EE.SelectRange(RowPos,ColPos,RowPos,ColPos+(Cols-1))
  EE.DrawTable(BoxMode:Table, LineStyle:Continuous, BorderWeight:Thin)
  EE.SetHorizAlign(CellAlign:Center)
  EE.SetFont(,,,FONT:Bold)
  EE.SetColour(COLOR:Silver)
  !EE.SetTextWrap(TRUE)
  EE.SetVertAlign(CellAlign:Center)
  EE.AutoFit(XlFit:Vert)
  EE.SetPageZoom(100)
  EE.SelectRange(RowPos,ColPos,RowPos,ColPos)
  EE.ScreenUpdating(TRUE)
  EE.Kill
 
			
					
				Re: EasyExcel
				Добавлено: 09 Июнь 2008, 10:46
				 StillZero
				Я в конце кода обычно пишу .Kill 

У нас, ни юзеры ни я не заморачиваются на этот момент, т.е. тоже переходим потом сами. Никогда не думал, что это может быть проблемой.
По делу:
причина понятна, я думаю, если твой код, что то вроде
.Visible(TRUE)
Message('фокус теперь переключается в приложение')
то после отработки .Visible фокус вернется в твое приложение, а не останется в Excel, т.е. для того, чтобы фокус был в Excel, надо, как минимум, после вывода в Excel не выполнять кода, приводящего к переключению фокуса.
На практике это, скорее всего, трудно осуществимо. Потому, если так хочется, думаю, надо принудительно переключать фокус на Excel. Т.е. API.
 
			
					
				Re: EasyExcel
				Добавлено: 09 Июнь 2008, 11:24
				 Anatoly
				Спасибо за ответы.
Заменил конец кода:
.Select(1,1)
.Visible(true)
поставил:
 .Visible(true)
 .Select(1,1)
Пока устойчиво попадаю в Excel.
			 
			
					
				EasyExcel
				Добавлено: 26 Сентябрь 2024, 22:54
				 kreator
				Есть не самая новая версия EasyExcel. Проблема в том, что метод OpenWorkbook открывает файл (ну и сам Excel) в свёрнутом виде. Как развернуть? Метод OpenWorkbook параметров насчёт открытия не имеет.
			 
			
					
				EasyExcel
				Добавлено: 26 Сентябрь 2024, 23:24
				 Игорь Столяров
				kreator писал(а): 26 Сентябрь 2024, 22:54EasyExcel
 
C этим прибамбасом никогда не работал, но была аналогичная проблема с отчётами Microsoft Excel через ActiveX.
Попробуйте перед запуском OpenWorkbook открывать пустое окно, что-то вроде:
 
			
					
				EasyExcel
				Добавлено: 28 Сентябрь 2024, 17:00
				 kreator
				Игорь Столяров писал(а): 26 Сентябрь 2024, 23:24
kreator писал(а): 26 Сентябрь 2024, 22:54EasyExcel
 
C этим прибамбасом никогда не работал, но была аналогичная проблема с отчётами Microsoft Excel через ActiveX.
Попробуйте перед запуском OpenWorkbook открывать пустое окно, что-то вроде:
 
А какая-то научная основа есть под этим?  

 
			
					
				EasyExcel
				Добавлено: 28 Сентябрь 2024, 18:50
				 Игорь Столяров
				kreator писал(а): 28 Сентябрь 2024, 17:00
А какая-то научная основа есть под этим
 
Нет. Подобрано эмпирически, когда лет 15 назад, после обновления, Microsoft Excel перестал разворачиваться.
По научному - нужно конечно через WinApi получать заголовок процесса и посылать в него событие ...
Можно пойти иным путём - выгрузить отчёт в XLSX в режиме SILENT и закрыть подключение через OLE.
После этого через ShellExecute() тупо открыть XLSX файл в штатной программе Windows для этого расширения.
 
			
					
				EasyExcel
				Добавлено: 29 Сентябрь 2024, 15:16
				 kreator
				Игорь Столяров писал(а): 28 Сентябрь 2024, 18:50
Можно пойти иным путём - выгрузить отчёт в XLSX в режиме SILENT и закрыть подключение через OLE.
После этого через ShellExecute() тупо открыть XLSX файл в штатной программе Windows для этого расширения.
 
Вот это точно не годится, потому что открывается не уже сделанный отчёт, а шаблон, с которым идёт работа через данную библиотеку. С окном попробую. Хотя не верю в такие костыли.
 
			
					
				EasyExcel
				Добавлено: 01 Октябрь 2024, 22:57
				 kreator
				"Костыль" вроде заработал.  

 Отдал на тестирование. С меня стакан.
 
			
					
				EasyExcel
				Добавлено: 12 Октябрь 2024, 16:28
				 kreator
				Почему-то не работает при подключении через rdp. Нет мысли в чём разница. Видимо будем собирать статистику.
			 
			
					
				EasyExcel
				Добавлено: 12 Октябрь 2024, 18:55
				 Игорь Столяров
				kreator писал(а): 12 Октябрь 2024, 16:28
Почему-то не работает при подключении через rdp
 
Т.е. всё не просто. 

Всегда есть классический вариант с получением заголовка приложения и отправки ему события.
Будет ли приложение его обрабатывать и разворачиваться в полноэкранный режим - надо пробовать.
 
			
					
				EasyExcel
				Добавлено: 21 Октябрь 2024, 10:28
				 George
				Игорь Столяров писал(а): 28 Сентябрь 2024, 18:50
kreator писал(а): 
А какая-то научная основа есть под этим
 
...
По научному - нужно конечно через WinApi получать заголовок процесса и посылать в него событие ...
...
 
В подобной же ситуации помогла вот такая комбинация WinApi:
FindWindow
SetForegroundWindow