Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
4-1242206475
Head
2009-05-13 13:21
2010.12.05
Захват видео потока с устройств


2-1284440308
Hadroran
2010-09-14 08:58
2010.12.05
Показ записей по необходимости


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


4-1241763398
OlegNik
2009-05-08 10:16
2010.12.05
Отловить событие мыши.


15-1282901996
Дмитрий Тимохов
2010-08-27 13:39
2010.12.05
Просветите про темы в Windows





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский