EasyExcel
Модератор: Дед Пахом
Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
EasyExcel
После вывода данных в Excel хотел бы туда сразу попадать.
Ставлю в конце кода Visible(True).
Иногда срабатывает - попадаю в Excel, а иногда не попадаю туда. Приходится
давить внизу кнопку чтобы в него попасть.
В чем дело?
Ставлю в конце кода Visible(True).
Иногда срабатывает - попадаю в Excel, а иногда не попадаю туда. Приходится
давить внизу кнопку чтобы в него попасть.
В чем дело?
- Admin
- Администратор
- Сообщения: 3980
- Зарегистрирован: 05 Июль 2005, 15:59
- Откуда: Хабаровск
- Благодарил (а): 42 раза
- Поблагодарили: 24 раза
- Контактная информация:
Re: EasyExcel
У меня примерно такой код везде. И окончание везде одинаковое.
Вроде всегда в Excel прыгает.
Вроде всегда в 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
Рай совершает ошибки ничуть не реже чем ад. Просто у него хорошая пресса
- StillZero
- Ветеран
- Сообщения: 458
- Зарегистрирован: 06 Июль 2005, 2:17
- Откуда: Хабаровск
- Поблагодарили: 1 раз
- Контактная информация:
Re: EasyExcel
Я в конце кода обычно пишу .Kill
У нас, ни юзеры ни я не заморачиваются на этот момент, т.е. тоже переходим потом сами. Никогда не думал, что это может быть проблемой.
По делу:
причина понятна, я думаю, если твой код, что то вроде
.Visible(TRUE)
Message('фокус теперь переключается в приложение')
то после отработки .Visible фокус вернется в твое приложение, а не останется в Excel, т.е. для того, чтобы фокус был в Excel, надо, как минимум, после вывода в Excel не выполнять кода, приводящего к переключению фокуса.
На практике это, скорее всего, трудно осуществимо. Потому, если так хочется, думаю, надо принудительно переключать фокус на Excel. Т.е. API.
У нас, ни юзеры ни я не заморачиваются на этот момент, т.е. тоже переходим потом сами. Никогда не думал, что это может быть проблемой.
По делу:
причина понятна, я думаю, если твой код, что то вроде
.Visible(TRUE)
Message('фокус теперь переключается в приложение')
то после отработки .Visible фокус вернется в твое приложение, а не останется в Excel, т.е. для того, чтобы фокус был в Excel, надо, как минимум, после вывода в Excel не выполнять кода, приводящего к переключению фокуса.
На практике это, скорее всего, трудно осуществимо. Потому, если так хочется, думаю, надо принудительно переключать фокус на Excel. Т.е. API.
по аэродрому...
Re: EasyExcel
Спасибо за ответы.
Заменил конец кода:
.Select(1,1)
.Visible(true)
поставил:
.Visible(true)
.Select(1,1)
Пока устойчиво попадаю в Excel.
Заменил конец кода:
.Select(1,1)
.Visible(true)
поставил:
.Visible(true)
.Select(1,1)
Пока устойчиво попадаю в Excel.
-
- ✯ Ветеран ✯
- Сообщения: 5076
- Зарегистрирован: 28 Май 2009, 15:54
- Откуда: Москва
- Благодарил (а): 10 раз
- Поблагодарили: 23 раза
EasyExcel
Есть не самая новая версия EasyExcel. Проблема в том, что метод OpenWorkbook открывает файл (ну и сам Excel) в свёрнутом виде. Как развернуть? Метод OpenWorkbook параметров насчёт открытия не имеет.
We are hard at work… for you.
- Игорь Столяров
- Ветеран движения
- Сообщения: 7636
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 23 раза
- Поблагодарили: 65 раз
EasyExcel
C этим прибамбасом никогда не работал, но была аналогичная проблема с отчётами Microsoft Excel через ActiveX.
Попробуйте перед запуском OpenWorkbook открывать пустое окно, что-то вроде:
Код: Выделить всё
ProgWindow WINDOW(''),AT(,,1,1).
Make Clarion Great Again !
-
- ✯ Ветеран ✯
- Сообщения: 5076
- Зарегистрирован: 28 Май 2009, 15:54
- Откуда: Москва
- Благодарил (а): 10 раз
- Поблагодарили: 23 раза
EasyExcel
А какая-то научная основа есть под этим?Игорь Столяров писал(а): ↑26 Сентябрь 2024, 23:24C этим прибамбасом никогда не работал, но была аналогичная проблема с отчётами Microsoft Excel через ActiveX.
Попробуйте перед запуском OpenWorkbook открывать пустое окно, что-то вроде:
Код: Выделить всё
ProgWindow WINDOW(''),AT(,,1,1).
We are hard at work… for you.
- Игорь Столяров
- Ветеран движения
- Сообщения: 7636
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 23 раза
- Поблагодарили: 65 раз
EasyExcel
Нет. Подобрано эмпирически, когда лет 15 назад, после обновления, Microsoft Excel перестал разворачиваться.
По научному - нужно конечно через WinApi получать заголовок процесса и посылать в него событие ...
Можно пойти иным путём - выгрузить отчёт в XLSX в режиме SILENT и закрыть подключение через OLE.
После этого через ShellExecute() тупо открыть XLSX файл в штатной программе Windows для этого расширения.
Make Clarion Great Again !
-
- ✯ Ветеран ✯
- Сообщения: 5076
- Зарегистрирован: 28 Май 2009, 15:54
- Откуда: Москва
- Благодарил (а): 10 раз
- Поблагодарили: 23 раза
EasyExcel
Вот это точно не годится, потому что открывается не уже сделанный отчёт, а шаблон, с которым идёт работа через данную библиотеку. С окном попробую. Хотя не верю в такие костыли.Игорь Столяров писал(а): ↑28 Сентябрь 2024, 18:50 Можно пойти иным путём - выгрузить отчёт в XLSX в режиме SILENT и закрыть подключение через OLE.
После этого через ShellExecute() тупо открыть XLSX файл в штатной программе Windows для этого расширения.
We are hard at work… for you.