Как скопировать форматы и формулы из строки в нижележащую область (AutoFill)?
Это как раз самый удобный метод копирования форматов и формул для расширения области данных при использовании шаблонов. Подразумевается, что между НАЧАЛО/КОНЕЦ находятся подготовленные ячейки шаблона (форматирование, именованная область DataRange для данных).
Delphi:
// НАЧАЛО ШАБЛОНА
// шапка
ASheet.Range['A1', EmptyParam].Formula := 'Шапка'; // таблица
ASheet.Range['A2', EmptyParam].Formula := '#'; ASheet.Range['B2', EmptyParam].Formula := 'Имя'; ASheet.Range['C2', EmptyParam].Formula := 'Кол-во'; ASheet.Range['D2', EmptyParam].Formula := 'Цена'; ASheet.Range['E2', EmptyParam].Formula := 'Сумма'; ASheet.Range['A2:E2', EmptyParam].BorderAround( xlContinuous, xlHairline, xlColorIndexAutomatic, EmptyParam ); // сделаем вид, что у нас уже готова строка шаблона данных
// и зададим форматы и формулы
ASheet.Range['A3', EmptyParam].Font.Bold := True; ASheet.Range['C3', EmptyParam].Formula := '=round(rand()*10+1,0)'; ASheet.Range['D3', EmptyParam].Formula := '=round(rand()*100,2)';
// в случаях формул удобно использовать стил R1C1
ASheet.Range['E3', EmptyParam].FormulaR1C1 := '=round(RC[-1]*RC[-2],2)'; ASheet.Range['E3', EmptyParam].NumberFormat := '#,##0.00';
// пустая строка для того, чтоб сумма считалась автоматом
ASheet.Range['A4', EmptyParam].EntireRow.Hidden := True;
// добавим итоговую сумму (с пустой строкой)
ASheet.Range['E5', EmptyParam].FormulaR1C1 := '=sum(R[-1]C:R[-2]C)'; ASheet.Range['E5', EmptyParam].Font.Bold := True; ASheet.Range['A5:E5', EmptyParam].Borders[xlEdgeTop].LineStyle := xlContinuous; ASheet.Range['A5:E5', EmptyParam].Borders[xlEdgeTop].Weight := xlMedium;
// области данных присвоим имя
(ASheet.Parent as ExcelWorkbook).Names.Add( 'DataRange', // Name,
ASheet.Range['A3:E3', EmptyParam], // RefersTo: OleVariant;
True, // Visible: OleVariant;
EmptyParam, // MacroType: OleVariant;
EmptyParam, // ShortcutKey: OleVariant;
EmptyParam, // Category: OleVariant;
EmptyParam, // NameLocal: OleVariant;
EmptyParam, // RefersToLocal: OleVariant;