Главная страница
    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
15-1282854584
Юрий
2010-08-27 00:29
2010.12.05
С днем рождения ! 27 августа 2010 пятница


6-1230233588
vad_shesh
2008-12-25 22:33
2010.12.05
Как определить, открыт ли эксель-файл в ЛС


2-1284122829
Fr
2010-09-10 16:47
2010.12.05
Drag & внутри TDrawGrid


15-1282879219
Дмитрий С
2010-08-27 07:20
2010.12.05
Оплата через assist или подобное.


15-1283074778
Кто б сомневался
2010-08-29 13:39
2010.12.05
Bad кластера





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский