EasyExcel

Clarion, Clarion 7

Модератор: Дед Пахом

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Ответить
Anatoly
Бывалый
Сообщения: 91
Зарегистрирован: 11 Август 2005, 9:33
Откуда: Томск

EasyExcel

Сообщение Anatoly »

После вывода данных в Excel хотел бы туда сразу попадать.
Ставлю в конце кода Visible(True).
Иногда срабатывает - попадаю в Excel, а иногда не попадаю туда. Приходится
давить внизу кнопку чтобы в него попасть.
В чем дело?
Аватара пользователя
Admin
Администратор
Сообщения: 3980
Зарегистрирован: 05 Июль 2005, 15:59
Откуда: Хабаровск
Благодарил (а): 42 раза
Поблагодарили: 24 раза
Контактная информация:

Re: EasyExcel

Сообщение 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
Рай совершает ошибки ничуть не реже чем ад. Просто у него хорошая пресса
Аватара пользователя
StillZero
Ветеран
Сообщения: 458
Зарегистрирован: 06 Июль 2005, 2:17
Откуда: Хабаровск
Поблагодарили: 1 раз
Контактная информация:

Re: EasyExcel

Сообщение StillZero »

Я в конце кода обычно пишу .Kill :)
У нас, ни юзеры ни я не заморачиваются на этот момент, т.е. тоже переходим потом сами. Никогда не думал, что это может быть проблемой.

По делу:
причина понятна, я думаю, если твой код, что то вроде

.Visible(TRUE)
Message('фокус теперь переключается в приложение')

то после отработки .Visible фокус вернется в твое приложение, а не останется в Excel, т.е. для того, чтобы фокус был в Excel, надо, как минимум, после вывода в Excel не выполнять кода, приводящего к переключению фокуса.
На практике это, скорее всего, трудно осуществимо. Потому, если так хочется, думаю, надо принудительно переключать фокус на Excel. Т.е. API.
по аэродрому...
Anatoly
Бывалый
Сообщения: 91
Зарегистрирован: 11 Август 2005, 9:33
Откуда: Томск

Re: EasyExcel

Сообщение Anatoly »

Спасибо за ответы.
Заменил конец кода:
.Select(1,1)
.Visible(true)

поставил:
.Visible(true)
.Select(1,1)

Пока устойчиво попадаю в Excel.
kreator
✯ Ветеран ✯
Сообщения: 5076
Зарегистрирован: 28 Май 2009, 15:54
Откуда: Москва
Благодарил (а): 10 раз
Поблагодарили: 23 раза

EasyExcel

Сообщение kreator »

Есть не самая новая версия EasyExcel. Проблема в том, что метод OpenWorkbook открывает файл (ну и сам Excel) в свёрнутом виде. Как развернуть? Метод OpenWorkbook параметров насчёт открытия не имеет.
We are hard at work… for you. :)
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7636
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 23 раза
Поблагодарили: 65 раз

EasyExcel

Сообщение Игорь Столяров »

kreator писал(а): 26 Сентябрь 2024, 22:54EasyExcel
C этим прибамбасом никогда не работал, но была аналогичная проблема с отчётами Microsoft Excel через ActiveX.
Попробуйте перед запуском OpenWorkbook открывать пустое окно, что-то вроде:

Код: Выделить всё

ProgWindow    WINDOW(''),AT(,,1,1).
Make Clarion Great Again ! 😎
kreator
✯ Ветеран ✯
Сообщения: 5076
Зарегистрирован: 28 Май 2009, 15:54
Откуда: Москва
Благодарил (а): 10 раз
Поблагодарили: 23 раза

EasyExcel

Сообщение kreator »

Игорь Столяров писал(а): 26 Сентябрь 2024, 23:24
kreator писал(а): 26 Сентябрь 2024, 22:54EasyExcel
C этим прибамбасом никогда не работал, но была аналогичная проблема с отчётами Microsoft Excel через ActiveX.
Попробуйте перед запуском OpenWorkbook открывать пустое окно, что-то вроде:

Код: Выделить всё

ProgWindow    WINDOW(''),AT(,,1,1).
А какая-то научная основа есть под этим? :D
We are hard at work… for you. :)
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7636
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 23 раза
Поблагодарили: 65 раз

EasyExcel

Сообщение Игорь Столяров »

kreator писал(а): 28 Сентябрь 2024, 17:00 А какая-то научная основа есть под этим
Нет. Подобрано эмпирически, когда лет 15 назад, после обновления, Microsoft Excel перестал разворачиваться.
По научному - нужно конечно через WinApi получать заголовок процесса и посылать в него событие ...

Можно пойти иным путём - выгрузить отчёт в XLSX в режиме SILENT и закрыть подключение через OLE.
После этого через ShellExecute() тупо открыть XLSX файл в штатной программе Windows для этого расширения.
Make Clarion Great Again ! 😎
kreator
✯ Ветеран ✯
Сообщения: 5076
Зарегистрирован: 28 Май 2009, 15:54
Откуда: Москва
Благодарил (а): 10 раз
Поблагодарили: 23 раза

EasyExcel

Сообщение kreator »

Игорь Столяров писал(а): 28 Сентябрь 2024, 18:50 Можно пойти иным путём - выгрузить отчёт в XLSX в режиме SILENT и закрыть подключение через OLE.
После этого через ShellExecute() тупо открыть XLSX файл в штатной программе Windows для этого расширения.
Вот это точно не годится, потому что открывается не уже сделанный отчёт, а шаблон, с которым идёт работа через данную библиотеку. С окном попробую. Хотя не верю в такие костыли.
We are hard at work… for you. :)
kreator
✯ Ветеран ✯
Сообщения: 5076
Зарегистрирован: 28 Май 2009, 15:54
Откуда: Москва
Благодарил (а): 10 раз
Поблагодарили: 23 раза

EasyExcel

Сообщение kreator »

"Костыль" вроде заработал. :shock: Отдал на тестирование. С меня стакан.
We are hard at work… for you. :)
Ответить