Столкнулся с тем, что клиенты хотят сами редактировать excel файл (шаблон), менять шрифт, текст, оформление, после чего наполнить его данными.
Если у кого то есть, готовые наработки или решения, буду очень признателен.
На данном этапе использую abxl - класс для работы с Excel через OLE
Хочу сделать универсальный инструмент независимо от от шаблона.
В данном примере использую создание накладной.
Прохожусь по листу Excel в указанных диапазонах считывая значение полей и записывая их в очередь
Spoiler
Код: Выделить всё
l_QueueRead QUEUE,PRE(LQR)
qRow LONG
qCol LONG
qText STRING(255)
END
Spoiler
Код: Выделить всё
row: 1|col: 3|data: МОЙ ОТЧЕТ
row: 2|col: 1|data: [invbrw_m:doc_id]
row: 3|col: 2|data: [FORMAT(invbrw_m:dateinv,@D10-)]
row: 4|col: 2|data: [FORMAT(invbrw_m:timeinv,@T4)]
row: 6|col: 1|data: №
row: 6|col: 2|data: Наименование
row: 6|col: 6|data: Кол-во
row: 6|col: 7|data: Цена
row: 6|col: 8|data: Сумма
row: 7|col: 1|data: [startRowList]
row: 8|col: 1|data: [prod_m:prod_id]
row: 8|col: 2|data: [prod_m:prod_name]
row: 8|col: 6|data: [invdetbrw_m:count]
row: 8|col: 7|data: [invdetbrw_m:price_sale]
row: 8|col: 8|data: [invdetbrw_m:sum]
row: 9|col: 1|data: [endRowList]
row: 10|col: 7|data: Всего
1. Создать файл в шаблоне (XLTX) или взять обычный XLS(X)
2. Как узнать незаполненную данными последнюю строку и колонку, у меня не получилось их получить, использовал
Код: Выделить всё
ActiveCell.SpecialCells(xlLastCell).Select
Код: Выделить всё
xlo.SendCommand('ActiveCell.SpecialCells(xlLastCell).Select')
xlo.SetCellFormula('=СТРОКА()',0,0)
l_rowLast = xlo.GetCellValue()
Использую строки в начале и в конце деталей
Код: Выделить всё
[startRowList]
[endRowList]
Spoiler
Код: Выделить всё
xlo.SendCommand('Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove')
! вернуться на одну строку выше, для копирования ее формата
xlo.SendCommand('Range("A8:H8").Select')
xlo.SendCommand('Selection.Copy')
xlo.SendCommand('Range("A9").Select')
xlo.SendCommand('Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _ SkipBlanks:=False, Transpose:=False')
xlo.SendCommand('Application.CutCopyMode = False')