dexcel - выделение цветом

Программы на Clarion, шаблоны, библиотеки и пр.

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

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Ответить
Аватара пользователя
SergioRaguzini
Старожил
Сообщения: 260
Зарегистрирован: 08 Декабрь 2009, 19:16
Откуда: Краснодарский край
Благодарил (а): 20 раз

dexcel - выделение цветом

Сообщение SergioRaguzini »

Привет Всем!
Подскажите, кто использует библиотеку Олега Руденко dexcel
Как закрасить цветом ячейку при экспорте очереди (до сих пор обходился без этого, сейчас читаю комментарии в dExcel.clw и не очень понимаю), например:
определил желаемый формат в List Box окна, наполнил нужными данными очередь Queue:XLS

XLS.SetTblFormat(?Browse:1, QuickWindow)
! XLS.Write:Header()
XLS.Write:Table(Queue:XLS)

далее формируется таблица, но как сделать так, чтобы при выполнении XLS.Write:Table(Queue:XLS) применить в опеределенной строке (или ячейке) выделение цветом?
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 5399
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 13 раз
Поблагодарили: 68 раз

dexcel - выделение цветом

Сообщение finsoftrz »

Привет. Я вывожу построчно, там можно назначать стиль для отдельных ячеек по условию.
C6/C12, ШВС, tps/btrieve.
Аватара пользователя
SergioRaguzini
Старожил
Сообщения: 260
Зарегистрирован: 08 Декабрь 2009, 19:16
Откуда: Краснодарский край
Благодарил (а): 20 раз

dexcel - выделение цветом

Сообщение SergioRaguzini »

finsoftrz писал(а): 28 Август 2025, 13:13 Привет. Я вывожу построчно, там можно назначать стиль для отдельных ячеек по условию.
а заголовок таблицы выводишь, в этом случае, с использованием XLS.SetTblFormat или тоже вручную?
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 5399
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 13 раз
Поблагодарили: 68 раз

dexcel - выделение цветом

Сообщение finsoftrz »

Я напрямую dexcel не использую. Либо через шаблон (вывод list как есть на экране), либо через класс надстройку, позволяющий дизайнить формы непосредственно в Excel.
Если через шаблон, то примерно так:

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

   if XLS.CreateFile(clip(Loc:DExcelFileNameL)) <> 0
     ...
     exit
   .
   lor:font = XLS.AddFont('Arial Cyr',12,faBold)
   lor:xf=XLS.AddXF(lor:font)
   !дополнительные стили
   Loc:XF1=XLS.AddXF(,,,,xfblBoxNormal)                                               !по левому краю 
   Loc:XF2=XLS.AddXF(,,,xfhaRight+xfvaBottom,xfblBoxNormal)                           !по правому краю 
   Loc:XFRed1=XLS.AddXF(,,,,xfblBoxNormal,flcRed+ptcAuto+ptsFull)                     !по левому краю
   Loc:XFRed2=XLS.AddXF(,,,xfhaRight+xfvaBottom,xfblBoxNormal,flcRed+ptcAuto+ptsFull) !по правому краю 
   Loc:XFYel1=XLS.AddXF(,,,,xfblBoxNormal,flcYellow+ptcAuto+ptsFull)                     !по левому краю
   Loc:XFYel2=XLS.AddXF(,,,xfhaRight+xfvaBottom,xfblBoxNormal,flcYellow+ptcAuto+ptsFull) !по правому краю 
   
  XLS.Write:STRING(QuickWindow{PROP:TEXT},1,1,lor:xf)  !вывод заголовков
  XLS.Write:STRING('Дата: ' & format(today(),@d6),1,2)
  XLS.SetPageSetup(,,-1,,1,999)
  XLS.SetTblFormat(?Browse:1)
  XLS.SetMargin(,,,2)
  XLS.SetFooter('&Л &Д   &В   ' & clip(FsAccess:ActiveUserName) &  '&П Стр. &С')

  !далее открываем окно прогресс и получаем все записи из постраничного browse
  loop   !это условно, реально цикл цепляется за accept
     ...  !получаем очередную строку
     do excelRow_r
  .
  
   if Loc:DExcelHandExec=0            !автоформирование
     if Loc:DExcelRun=1
        XLS.CloseFile(True)    !закрыть таблицу и открыть в Excel
     else
        XLS.CloseFile(False)
        FsMessagePr('Отчет сохранен в файле ' & clip(Loc:DExcelFileNameL) & ' !')
     end
  else      !ручной запуск
     XLS.CloseFile(False)
  end
Рутинку с ручной установкой стилей копипастну, как есть. Если выделение цветом не требуется, то без этого все проще и автоматически. Это так называемый режим ручного форматирования строки, используется редко.

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

excelRow_r  routine  !вывод ячеек в эксель с подсветкой
   XLS.Write:STRING(Loc:Flag,1,XLS.RowCurrent,Loc:XF1) 
   XLS.Write:STRING(format(DZakH:Date,@d6),2,XLS.RowCurrent,Loc:XF2) 
   XLS.Write:STRING(format(DZakH:DateEnd,@d6),3,XLS.RowCurrent,Loc:XF2) 
   XLS.Write:NUMBER(Loc:DaysEnd,4,XLS.RowCurrent,Loc:XF2) 
   XLS.Write:STRING(Loc:SrocBefore,5,XLS.RowCurrent,Loc:XF1) 
   
   Loc:XF=Loc:XF1
   if (today()-DZakH:DateIns)>4 and Loc:Date1=0  !после регистрации прошло более 4 дней и техническая обработка не сделана   
      Loc:XF=Loc:XFYel1       
   .   
   if (DZakH:DateEnd-DZakH:DateIns)<Loc:DaysPlan  !дизайнер заложил срок меньше, чем дней на производство по плану
      Loc:XF=Loc:XFRed1
   .          
   XLS.Write:STRING(DZakH:Num,6,XLS.RowCurrent,Loc:XF)        
   
   XLS.Write:NUMBER(Loc:Sum,7,XLS.RowCurrent,Loc:XF2) 
   XLS.Write:NUMBER(DZakH:DaysBuild,8,XLS.RowCurrent,Loc:XF2) 
   
   if Loc:DaysIns>Loc:DaysZakReg  
      Loc:XF=Loc:XFRed2
   else    
      Loc:XF=Loc:XF2 
   .    
   XLS.Write:STRING(format(DZakH:DateIns,@d6),9,XLS.RowCurrent,Loc:XF) 
   XLS.Write:NUMBER(Loc:DaysZakReg,10,XLS.RowCurrent,Loc:XF) 
       
   if Loc:DaysDif1>Loc:DaysPlan1  
      Loc:XF=Loc:XFRed2
   else    
      Loc:XF=Loc:XF2 
   .          
   XLS.Write:STRING(format(Loc:DateStart1,@d6),11,XLS.RowCurrent,Loc:XF) 
   XLS.Write:STRING(format(Loc:Date1,@d6),12,XLS.RowCurrent,Loc:XF) 
   XLS.Write:NUMBER(Loc:DaysPlan1,13,XLS.RowCurrent,Loc:XF)       
      
   if Loc:DaysDif2>Loc:DaysPlan2
      Loc:XF=Loc:XFRed2
   else    
      Loc:XF=Loc:XF2 
   .          
   XLS.Write:STRING(format(Loc:Date2,@d6),14,XLS.RowCurrent,Loc:XF) 
   XLS.Write:NUMBER(Loc:DaysPlan2,15,XLS.RowCurrent,Loc:XF)            
   
   XLS.Write:NUMBER(Loc:DaysProizv,16,XLS.RowCurrent,Loc:XF2) 
   XLS.Write:STRING(Loc:ReportTexnol,17,XLS.RowCurrent,Loc:XF1) 
   XLS.Write:STRING(Loc:ReportManager,18,XLS.RowCurrent,Loc:XF1) 
   
   XLS.RowCurrent+=1 
C6/C12, ШВС, tps/btrieve.
Ответить