Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2010.12.05;
Скачать: CL | DM;

Вниз

Отчет в 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;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.009 c
15-1282667193
Правильный$Вася
2010-08-24 20:26
2010.12.05
у кого-нибудь открывается?


4-1242124565
Zalum
2009-05-12 14:36
2010.12.05
передать и принять несколько параметров


3-1248407312
_drug_
2009-07-24 07:48
2010.12.05
применение full join


15-1283175395
bss
2010-08-30 17:36
2010.12.05
Планировщик задач windows (XP)


15-1282555120
Игорь Шевченко
2010-08-23 13:18
2010.12.05
Это интересно - журнал по Delphi