Я напрямую 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