Страница 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