![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
Всем форумчанам привет, люди добрые помогите мне разобраться в коде
Код:
procedure TForm9.btn4Click(Sender: TObject);
var
ExcelApp, sheet, XLA, exRng: variant;
index, i: integer;
const
xlContinuous = 1;
xlThin = 2;
begin
j := FloatToStr(dbsmlst1.SumCollection.Items[0].SumValue);
k := StrToInt(j);
l := FloatToStr(dbsmlst1.SumCollection.Items[1].SumValue);
n := StrToInt(l);
b := FloatToStr(dbsmlst1.SumCollection.Items[2].SumValue);
c := StrToInt(b);
XLA := CreateOleObject('Excel.Application');
XLA.workbooks.open(ExtractFilePath(ParamStr(0)) + 'test1.xls');
XLA.Visible := true;
XLA.WorkBooks[1].WorkSheets[1].Name := 'Сводный отчет';
ExcelApp := XLA.workbooks[1].worksheets['Сводный отчет'].columns;
ExcelApp.columns[1].ColumnWidth := 5;
ExcelApp.columns[2].ColumnWidth := 35.71;
ExcelApp.columns[3].ColumnWidth := 10;
ExcelApp.columns[4].ColumnWidth := 8.14;
ExcelApp.columns[5].ColumnWidth := 16.86;
ExcelApp.columns[6].ColumnWidth := 5;
ExcelApp.columns[7].ColumnWidth := 51.14;
ExcelApp.columns[8].ColumnWidth := 6.29;
ExcelApp.columns[9].ColumnWidth := 6.71;
ExcelApp.columns[10].ColumnWidth := 11.71;
ExcelApp.columns[11].ColumnWidth := 10.86;
ExcelApp.columns[12].ColumnWidth := 10;
ExcelApp.columns[13].ColumnWidth := 7.86;
ExcelApp := XLA.workbooks[1].worksheets['Сводный отчет'].Rows;
ExcelApp.Rows[9].font.bold := true;
ExcelApp.Rows[9].font.size := 10;
ExcelApp.Rows[9].font.color := clBlue;
ExcelApp.Rows[9].wraptext := true;
sheet := XLA.workbooks[1].worksheets['Сводный отчет'];
Sheet.cells[9, 1] := '№ п\п';
Sheet.cells[9, 2] := 'ФИО застрахованного';
Sheet.cells[9, 3] := 'Дата рождения';
Sheet.cells[9, 4] := 'Подразделение';
Sheet.cells[9, 5] := 'Полис №';
Sheet.cells[9, 6] := 'Код усл.';
Sheet.cells[9, 7] := 'Наименование усл.';
Sheet.cells[9, 8] := 'Кол-во';
Sheet.cells[9, 9] := 'Цена';
Sheet.cells[9, 10] := 'Дата оказания';
Sheet.cells[9, 11] :='Код исполнителя';
Sheet.cells[9, 12] :='Шифр забол-я';
Sheet.cells[9, 13] :='Итого';
index := 10;
with ds1.DataSet do
begin
First;
for i := 0 to RecordCount -1 do
begin
sheet.cells[4, 1] := 'добровольного медицинского страхования за период c ' + Fields.Fields[31].AsString + ' по ' + Fields.Fields[32].AsString;
sheet.cells[index, 1] :=i+1;
sheet.cells[index, 2] := Fields.Fields[3].AsString + ' ' + Fields.Fields[4].AsString + ' ' + Fields.Fields[5].AsString;;
sheet.cells[index, 3] := Fields.Fields[7].AsString;
sheet.cells[index, 4] := Fields.Fields[14].AsString;
sheet.cells[index, 5] := Fields.Fields[11].AsString;
sheet.cells[index, 6] := Fields.Fields[25].AsString;
sheet.cells[index, 7] := Fields.Fields[36].AsString;
sheet.cells[index, 8] := Fields.Fields[26].AsString;
sheet.cells[index, 9] := Fields.Fields[27].AsString;
sheet.cells[index, 10] := Fields.Fields[28].AsString;
sheet.cells[index, 11] := Fields.Fields[41].AsString;
sheet.cells[index, 12] := Fields.Fields[47].AsString;
sheet.cells[index, 13] := Fields.Fields[33].AsString;
sheet.cells[index, 14] := index;
Inc(index);
Next;
end
end;
exRng := Sheet.Range[Sheet.Cells[9, 1], Sheet.Cells[index, 13]];
exRng.Borders.LineStyle := xlContinuous;
exRng.Borders.Weight := xlThin;
exRng.Rows.AutoFit;
XLA.WorkBooks[1].Sheets[1].Cells[10 + k, 13].value := n;
XLA.WorkBooks[1].Sheets[1].Cells[10 + k, 8].value := c;
// XLA.Visible := true;
end;сам код рабочий только мне нужно еще при экспорте в excel сделать проверку повторяющейся информации в ячейках и обьеденить ячейки, которые повторяются, а так же сделать суммирование поля "итого" повторяющихся ячеек и вывести в конце этих ячеек. Сколько пытаюсь сделать не получается. Заранее благодарен всем кто откликнется...)) |
|
#2
|
|||
|
|||
|
Лень код писать.
Собственно, тебе нужы переменные, в которых у тебя будут расположены: 1. Счетчик записей 2. Значения ключевых полей (по которым определяется "повторение" записей). 3. Переменную для суммирования ИТОГО Перед циклом счетчик = 0, все переменных ключ. значений - пустая строка. Перед вставкой очередной записи: 1. Проверяем по ключевым полям. Если повторяется - увеличиваем счетчик и итог и НЕ вставляем 2. Если не совпадает, то: 2.1. Проверяем счетчик. Если > 1, то вставляем итоговую запись 2.2. Вставляем новую запись 2.3. Сбрасываем счетчик и итог и обновляем переменные ключевых полей |
|
#3
|
|||
|
|||
|
А можно код хотя бы примерный, я уже 3 месяца ни как не могу слепить его..
|
|
#4
|
|||
|
|||
|
ну, могу накидать пример, разбираться с твоим кодом лень, да и условие повторяемости непонятно.
Примерно так: Код:
var
KayValue1, KeyValue2 : String;
Cnt : Integer;
Total : Double;
begin
DataSet.First;
KeyValue1 := '';
KeyValue2 := '';
Cnt := 0;
Total := 0.0;
While Not DataSet.Eof Do
Begin
If (DataSet.FieldByName('Key1').AsString <> KeyValue1) Or (DataSet.FieldByName('Key2').AsString <> KeyValue2)
Then
Begin
If Cnt > 1 Then InsertTotalRow(); // Вставляем итоговую строку
Cnt := 1;
Total := DataSet.FieldByName('Value').AsFloat;
KeyValue1 := DataSet.FieldByName('KeyValue1').AsString;
KeyValue2 := DataSet.FieldByName('KeyValue2').AsString;
InsertRow(); // Вставляем текущую строку
End
Else
Begin
Inc(Cnt);
Total := Total + DataSet.FieldByName('Value').AsFloat;
End
DataSet.Next;
End;
end;Что-то типа так. InsertRow и InsertTotalRow - собственно вставка строки по данным. |
|
#5
|
|||
|
|||
|
Сделал вот так
Код:
index := 10;
KeyValue1 := '';
KeyValue2 := '';
Cnt := 0;
cnt2 := 0;
cnt3:=0;
with ds1.DataSet do
begin
sheet.cells[4, 1] := 'добровольного медицинского страхования за период c ' + ds1.DataSet.FieldByName('period_c').AsString + ' по ' + ds1.DataSet.FieldByName('period_po').AsString;
First;
while not ds1.DataSet.Eof do
begin
if (ds1.DataSet.FieldByName('Фамилия').AsString + ' ' + ds1.DataSet.FieldByName('Имя').AsString + ' ' + ds1.DataSet.FieldByName('Отчество').AsString <> KeyValue1) then
begin
Inc(cnt);
keyvalue1 := ds1.DataSet.FieldByName('Фамилия').AsString + ' ' + ds1.DataSet.FieldByName('Имя').AsString + ' ' + ds1.DataSet.FieldByName('Отчество').AsString;
keyvalue2 := ds1.DataSet.FieldByName('kod').AsString;
sheet.cells[index, 1] := cnt;
sheet.cells[index, 2] := ds1.DataSet.FieldByName('Фамилия').AsString + ' ' + ds1.DataSet.FieldByName('Имя').AsString + ' ' + ds1.DataSet.FieldByName('Отчество').AsString;
sheet.cells[index, 3] := Fields.Fields[7].AsString;
sheet.cells[index, 4] := Fields.Fields[14].AsString;
sheet.cells[index, 5] := Fields.Fields[11].AsString;
sheet.cells[index, 6] := Fields.Fields[25].AsString;
sheet.cells[index, 7] := Fields.Fields[36].AsString;
sheet.cells[index, 8] := Fields.Fields[26].AsString;
sheet.cells[index, 9] := Fields.Fields[27].AsString;
sheet.cells[index, 10] := Fields.Fields[28].AsString;
sheet.cells[index, 11] := Fields.Fields[41].AsString;
sheet.cells[index, 12] := Fields.Fields[47].AsString;
sheet.cells[index, 13] := Fields.Fields[33].AsString;
end;
if (ds1.DataSet.FieldByName('Kod').AsString <> KeyValue2) then
begin
sheet.cells[index, 6] := Fields.Fields[25].AsString;
sheet.cells[index, 7] := Fields.Fields[36].AsString;
sheet.cells[index, 8] := Fields.Fields[26].AsString;
sheet.cells[index, 9] := Fields.Fields[27].AsString;
sheet.cells[index, 10] := Fields.Fields[28].AsString;
sheet.cells[index, 11] := Fields.Fields[41].AsString;
sheet.cells[index, 12] := Fields.Fields[47].AsString;
sheet.cells[index, 13] := Fields.Fields[33].AsString;
end;
inc(index);
ds1.DataSet.Next;
end;вот что получилось http://cm.mf-image.ru/d/eyJ0IjoiMjAxNy0wMi0xNlQxMTo1MzowMi42NzMyOTIwWiIsIn RtIjoxNSwiYmQiOjEsImZkIjo0MTU4Nzg2LCJyZiI6bnVsbCwi c2wiOjAsImZuIjpudWxsLCJyIjoiaHR0cDovL215LWZpbGVzLn J1L3p2dnN4MyIsImwiOm51bGx9.ADF4DB57A9E37F9A7032143 91F6599D7./%D0%91%D0%B5%D0%B7%D1%8B%D0%BC%D1%8F%D0%BD%D0%BD%D 1%8B%D0%B9.JPG к этому результату необходимо чтобы в конце услуг каждого пациента была строка с итогом по полям (кол-во, цена, итого). Может кто знает как это реализовать...заранее благодарен за помощь всем кто откликнулся.. Должно выглядеть примерно так http://v8.mf-image.ru/d/eyJ0IjoiMjAxNy0wMi0xNlQxMjoxMjowNy4yNzcxNzQwWiIsIn RtIjoxNSwiYmQiOjEsImZkIjo0MTU4ODcxLCJyZiI6bnVsbCwi c2wiOjAsImZuIjpudWxsLCJyIjoiaHR0cDovL215LWZpbGVzLn J1LzQ3dTZ6ciIsImwiOm51bGx9.A2199BDC8BD26384748E01A 970F26CFC./%D0%91%D0%B5%D0%B7%D1%8B%D0%BC%D1%8F%D0%BD%D0%BD%D 1%8B%D0%B9.JPG Последний раз редактировалось sdmitriy84, 16.02.2017 в 15:12. |