Excel ЧаВо

Как скопировать форматы и формулы из строки в нижележащую область (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;



Содержание раздела