Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Экспорт в Excel с итогами / 3 сообщений из 3, страница 1 из 1
26.10.2019, 12:35
    #39881861
ularsoft
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Экспорт в Excel с итогами
Здравствуйте!
Ребята, подскажите, экспорт делаю в excel.
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
procedure TfmMain.tPrintExecute(Sender: TObject);
begin
  d := Trunc(Now);
with dm do
begin
  qPrint.Close;
  qPrint.SQL.Clear;
  qPrint.SQL.Add('Select cDate, cOper, cName, cSum, cCurs, cDiscount, TotalSum, FIO, Dok from CashDok where cDate between :d1 and :d2');
  qPrint.SQL.Add('order by cName, cOper, cDate');
  qPrint.ParamByName('d1').AsDateTime := d;
  qPrint.ParamByName('d2').AsDateTime := d + 1;
  qPrint.Open;

 // Создаем массив элементов, полученных в результате запроса
 XArr:=VarArrayCreate([1,qPrint.FieldCount],varVariant);
 XL:=CreateOLEObject('Excel.Application'); {Создание OLE объекта}
 XL.WorkBooks.add;
 XL.visible:=true;

 j := 4;

 XL.Range['A1','I1'].MergeCells:=True; {Объединение ячеек}
 XL.Range['A1','A1'].Value :='Реестр по обмену валют за '+
  DateTimeToStr(Now);
 XL.Range['A1','A1'].Font.Bold:=True;
 XL.Range['A1','A1'].Font.Color:=clRed;
 XL.Range['A3','A3'].Value :='Дата и время совершения операции';
 XL.Range['A3','A3'].Font.Bold:=True;
 XL.Range['B3','B3'].Value :='Вид операции';
 XL.Range['B3','B3'].Font.Bold:=True;
 XL.Range['C3','C3'].Value :='Вид валюты';
 XL.Range['C3','C3'].Font.Bold:=True;
 XL.Range['D3','D3'].Value :='Сумма валюты';
 XL.Range['D3','D3'].Font.Bold:=True;
 XL.Range['E3','E3'].Value :='Курс обмена';
 XL.Range['E3','E3'].Font.Bold:=True;
 XL.Range['F3','F3'].Value :='Скидка';
 XL.Range['F3','F3'].Font.Bold:=True;
 XL.Range['G3','G3'].Value :='Всего';
 XL.Range['G3','G3'].Font.Bold:=True;
 XL.Range['H3','H3'].Value :='ФИО клиента';
 XL.Range['H3','H3'].Font.Bold:=True;
 XL.Range['I3','I3'].Value :='Документ';
 XL.Range['I3','I3'].Font.Bold:=True;

 qPrint.First;
 while not qPrint.Eof do
  begin
   i:=1;
   while i<=qPrint.FieldCount do
    begin
     XArr[i] := qPrint.Fields[i-1].Value; //Массив столбцов
     i := i+1;
    end;
   XL.Range['A'+IntToStr(j),
   CHR(64+qPrint.FieldCount)+IntToStr(j)].Value := XArr;
   qPrint.Next;
   j:=j+1;
  end;

 //стиль линии границы
 //XL.Range['A3',CHR(64+qPrint.FieldCount)+IntToStr(j-1)].Borders.LineStyle:=xlThin;
 //ширина линии
 //XL.Range['A3',CHR(64+qPrint.FieldCount)+IntToStr(j-1)].Borders.Weight:=xlHairline;
 //обводим табличку
 //XL.Range['A3',CHR(64+qPrint.FieldCount)+IntToStr(j-1)].BorderAround(xlThin,xlThin,xlAutomatic,xlAutomatic);

 XL.Range['A1',CHR(64+qPrint.FieldCount)+IntToStr(j)].select;
 XL.Selection.Font.Name:='Arial cur';
 XL.Selection.Font.Size:=10;
 XL.Selection.Columns.AutoFit;
 XL.Range['A1','A1'].select;

end;
end;




Как вытащить итоги по валютам? Спасибо.
...
Рейтинг: 0 / 0
26.10.2019, 16:28
    #39881888
Anton_1234
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Экспорт в Excel с итогами
ularsoft,
можно формулу вставить в Excel
как я предполагаю просуммировать нужно колонку G (7-я колонка, т.е. C7)
что-то типа вставить в код
Код: pascal
1.
2.
3.
RowNach:=... // верхний ряд колонки, найдешь его
RowKon:=... // нижний ряд колонки, найдешь его
XL.Cells[1, j+3].Formula:='=SUM(R'+IntToStr(RowNach)+'C7:R'+IntToStr(RowKon)+'C7)';



как-то так,
книга одна похоже, поэтому пока сойдет, вообще если несколько книг, то надо указывать с какой книгой работать, находить их индексы в массиве Workbooks (индексы при закрытии-открытии книг меняются)

зы. буквенные координаты не люблю использовать когда с Excel работаю, с числовыми координатами легче
...
Рейтинг: 0 / 0
26.10.2019, 16:39
    #39881890
Anton_1234
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Экспорт в Excel с итогами
добавка:
1 из программы формулы всегда вставляются в английском написании, даже если Excel русифицированный
2 я в абсолютных ссылках формулу написал, если в относительных надо - разберешься сам
3 если формулу в Excel посмотреть, то в некоторых поля разделяются точкой с запятой, например
=ЕСЛИ(1>0;a;b), в Delphi разделитель запятая =IF(1>0,a,b), вроде бы так, пробуй
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Экспорт в Excel с итогами / 3 сообщений из 3, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]