Форум: "Начинающим";
Текущий архив: 2010.12.05;
Скачать: [xml.tar.bz2];
ВнизОтчет в Excel по шаблону Найти похожие ветки
← →
Nurjanov (2010-09-15 10:43) [0]Здравствуйте всем почитал
Excel ЧАВО III
http://delphikingdom.com/asp/viewitem.asp?catalogid=1274#25
Как скопировать форматы и формулы из строки в нижележащую область (AutoFill)?
Там дается пример заполнение 5 строк..
[Code]
// КОНЕЦ ШАБЛОНА
// Начало работы с шаблоном
// Добавим 4 строки для занесения данных (итого уже 5 строк для данных)
// Неудобство при использовании Cells в Range - обязательное
// дублирование Cells во втором параметре
ASheet.Range[
ASheet.Cells.Item[ASheet.Range["DataRange", EmptyParam].Row + 1, 1],
ASheet.Cells.Item[ASheet.Range["DataRange", EmptyParam].Row + 4, 1]
].EntireRow.Insert(xlShiftDown, EmptyParam);
[/Code]
А если заполнять вместо пять одну строку тогда как решить?
Сделал так но
[Code]
procedure TfrmCMPMain.Button9Click(Sender: TObject);
var
i,r :integer;
ASheet: _WorkSheet;
ArrData: Variant;
begin
XL := TExcelApplication.Create(nil);
try
XL.ConnectKind := ckNewInstance;
XL.Connect;
XL.Workbooks.add(EmptyParam,lcid);
ASheet:=XL.ActiveWorkbook.ActiveSheet as _Worksheet;
// НАЧАЛО ШАБЛОНА
// шапка
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 := "=10";
ASheet.Range["D3", EmptyParam].Formula := "=100";
// в случаях формул удобно использовать стил R1C1
ASheet.Range["E3", EmptyParam].FormulaR1C1 := "=sum(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;
EmptyParam, // CategoryLocal: OleVariant;
EmptyParam, // RefersToR1C1: OleVariant;
EmptyParam // RefersToR1C1Local: OleVariant
);
ASheet.Range["DataRange", EmptyParam].Borders[xlEdgeBottom].LineStyle :=
xlContinuous;
ASheet.Range["DataRange", EmptyParam].Borders[xlEdgeBottom].Weight := xlHairline;
// КОНЕЦ ШАБЛОНА
// Начало работы с шаблоном
// Добавим 4 строки для занесения данных (итого уже 5 строк для данных)
// Неудобство при использовании Cells в Range - обязательное
// дублирование Cells во втором параметре
ASheet.Range[
ASheet.Cells.Item[ASheet.Range["DataRange", EmptyParam].Row+1, 1],
ASheet.Cells.Item[ASheet.Range["DataRange", EmptyParam].Row+0, 1]
].EntireRow.Insert(xlShiftDown);
// теперь заполним область форматированием, захватив (ОБЯЗАТЕЛЬНО)
// и область-шаблон "DataRange"
ASheet.Range["DataRange", EmptyParam].AutoFill(
ASheet.Range[
// захватим область источника
ASheet.Cells.Item[ASheet.Range["DataRange", EmptyParam].Row, 1],
ASheet.Cells.Item[ASheet.Range["DataRange", EmptyParam].Row+1,
ASheet.Range["DataRange", EmptyParam].Columns.Count]
],
xlFillCopy
);
// заносим данные из массива (номер и имя) - 5 строк, 2 столбца
arrData := VarArrayCreate([1, 1, 1, 2], varVariant);
for i := 1 to 1 do begin
arrData[i, 1] := i;
arrData[i, 2] := Format("Имя %d", [i]);
end;
ASheet.Range[
ASheet.Cells.Item[ASheet.Range["DataRange", EmptyParam].Row, 1],
ASheet.Cells.Item[ASheet.Range["DataRange", EmptyParam].Row+1,1]
].Formula := arrData;
XL.Visible[lcid] := True;
finally
XL.UserControl := True;
XL.Interactive[lcid] := True;
XL.Disconnect;
FreeAndNil(XL);
end;
end;
[/Code]
Резултать две пустой строки выходит
Шапка
# Имя Кол-во Цена Сумма
1 10 100 1,002.00
2,004.00
Я эту код переделал для датасета..
У меня датасете разные количество записи..
если два то нормально а если в датасете один запись то в отчете выходить как резултать две пустих строк
Заранее благодаре
← →
Anatoly Podgoretsky © (2010-09-16 12:59) [1]А какой вопрос?
← →
12 © (2010-09-17 09:03) [2]
> Anatoly Podgoretsky © (16.09.10 12:59) [1]
ты, дядь Толь, реально что-то понял? :)
← →
Anatoly Podgoretsky © (2010-09-17 10:10) [3]Я понял что не задан вопрос.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2010.12.05;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.003 c