Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.10.2010, 00:30   #1
loki22208
Пользователь
 
Регистрация: 01.05.2010
Сообщений: 18
По умолчанию Отчет в excel, проблема с фильтром

Доброго всем времени суток.
Пишу прогу, где помимо всего прочего есть функция вывода отчета в excel. В принципе все работает нормально, но при применении фильтра к таблице в excele начинают дублириваться строки. По идее можно избежать этого с помощью дополнительных условий, но уверен что есть более рациональный выход из положения. Вопрос только один какой?
Заранее благодарен откликнувшимся.

Код HTML:
var XLApp, Sheet, Colum:variant;
    index,i:integer;
begin

XLApp:=CreateOleObject('Excel.Application');
XLApp.visible:=true;
XLApp.Workbooks.Add;
XLApp.Workbooks[1].Worksheets[1].Name:='Отчет';
Colum:=XLApp.Workbooks[1].Worksheets['Отчет'].Columns;
Colum.Columns[1].ColumnWidth:=20;
Colum.Columns[2].ColumnWidth:=20;
Colum.Columns[3].ColumnWidth:=15;
Colum.Columns[4].ColumnWidth:=10;
Colum.Columns[5].ColumnWidth:=40;
Colum.Columns[6].ColumnWidth:=20;

Colum:=XLApp.Workbooks[1].Worksheets['Отчет'].Rows;
Colum.Rows[2].Font.Bold:=true;
Colum.Rows[1].Font.Bold:=true;
Colum.Rows[1].Font.Color:=clBlue;
Colum.Rows[1].Font.Size:=14;

Sheet:=XLApp.Workbooks[1].Worksheets['Отчет'];
Sheet.Cells[1,2]:='Студенты имеющие задолжности по экзаменам';
Sheet.Cells[2,1]:='Номер зачетки';
Sheet.Cells[2,2]:='ФИО';
Sheet.Cells[2,3]:='Семестр';
Sheet.Cells[2,4]:='Оценка';
Sheet.Cells[2,5]:='Предмет';
Sheet.Cells[2,6]:='Преподователь';

index:=3;
for i:=1 to  DataModule5.ADOQuery7.RecordCount do begin
DataModule5.ADOQuery7.RecNo:=i;
Sheet.Cells[index,1]:=DataModule5.ADOQuery7.Fields.Fields[1].AsString;
Sheet.Cells[index,2]:=DataModule5.ADOQuery7.Fields.Fields[2].AsString;
Sheet.Cells[index,3]:=DataModule5.ADOQuery7.Fields.Fields[3].AsString;
Sheet.Cells[index,4]:=DataModule5.ADOQuery7.Fields.Fields[4].AsString;
Sheet.Cells[index,5]:=DataModule5.ADOQuery7.Fields.Fields[5].AsString;
Sheet.Cells[index,6]:=DataModule5.ADOQuery7.Fields.Fields[6].AsString;
index:=index+1;
end;
end;
loki22208 вне форума Ответить с цитированием
Старый 05.10.2010, 11:48   #2
soleil@mmc
SQL-коддинг
Участник клуба
 
Регистрация: 16.01.2009
Сообщений: 1,192
По умолчанию

и что здесь тогда работает нормально если строки дулируются?
и где твой фильтр? или что ты под ним понимаешь?

и зачем делать вот это?
Код:
DataModule5.ADOQuery7.RecNo:=i;
soleil@mmc вне форума Ответить с цитированием
Старый 05.10.2010, 14:56   #3
loki22208
Пользователь
 
Регистрация: 01.05.2010
Сообщений: 18
По умолчанию

Эт фильтр:
Код HTML:
procedure TForm23.Edit1Change(Sender: TObject);
begin
if combobox1.Text='По фамилии' then begin
if Length(Edit1.Text)>0 then
DataModule5.ADOQuery7.Filtered:=true else DataModule5.ADOQuery7.Filtered:=false;
DataModule5.ADOQuery7.Filter:='ФИО>'''+Edit1.Text+'''';
end else if combobox1.Text='По семестру' then begin
if Length(Edit1.Text)>0 then
DataModule5.ADOQuery7.Filtered:=true else DataModule5.ADOQuery7.Filtered:=false;
DataModule5.ADOQuery7.Filter:='Семестр>'''+Edit1.Text+'''';
end else if combobox1.Text='По предмету' then begin
if Length(Edit1.Text)>0 then
DataModule5.ADOQuery7.Filtered:=true else DataModule5.ADOQuery7.Filtered:=false;
DataModule5.ADOQuery7.Filter:='Название_предмета>'''+Edit1.Text+'''';
end else if combobox1.Text='По преподователю' then begin
if Length(Edit1.Text)>0 then
DataModule5.ADOQuery7.Filtered:=true else DataModule5.ADOQuery7.Filtered:=false;
DataModule5.ADOQuery7.Filter:='Преподователь>'''+Edit1.Text+'''';
end;
loki22208 вне форума Ответить с цитированием
Старый 05.10.2010, 14:58   #4
loki22208
Пользователь
 
Регистрация: 01.05.2010
Сообщений: 18
По умолчанию

На самом деле проблему уже решил вот так:
Код HTML:
for i:=1 to  DataModule5.ADOQuery7.RecordCount do begin
DataModule5.ADOQuery7.RecNo:=i;

if (Sheet.Cells.item[index-1,1].value=DataModule5.ADOQuery7.Fields.Fields[1].AsVariant) and
(Sheet.Cells.item[index-1,2].value=DataModule5.ADOQuery7.Fields.Fields[2].AsVariant) and
(Sheet.Cells.item[index-1,3].value=DataModule5.ADOQuery7.Fields.Fields[3].AsVariant) and
(Sheet.Cells.item[index-1,4].value=DataModule5.ADOQuery7.Fields.Fields[4].AsVariant) and
(Sheet.Cells.item[index-1,5].value=DataModule5.ADOQuery7.Fields.Fields[5].AsVariant) and
(Sheet.Cells.item[index-1,6].value=DataModule5.ADOQuery7.Fields.Fields[6].AsVariant) then f:=0 else f:=1;

if f=1 then begin
Sheet.Cells[index,1]:=DataModule5.ADOQuery7.Fields.Fields[1].AsString;
Sheet.Cells[index,2]:=DataModule5.ADOQuery7.Fields.Fields[2].AsString;
Sheet.Cells[index,3]:=DataModule5.ADOQuery7.Fields.Fields[3].AsString;
Sheet.Cells[index,4]:=DataModule5.ADOQuery7.Fields.Fields[4].AsString;
Sheet.Cells[index,5]:=DataModule5.ADOQuery7.Fields.Fields[5].AsString;
Sheet.Cells[index,6]:=DataModule5.ADOQuery7.Fields.Fields[6].AsString;
index:=index+1; end;
loki22208 вне форума Ответить с цитированием
Старый 05.10.2010, 14:59   #5
loki22208
Пользователь
 
Регистрация: 01.05.2010
Сообщений: 18
По умолчанию

Цитата:
Сообщение от soleil@mmc Посмотреть сообщение
и зачем делать вот это?
Код:
DataModule5.ADOQuery7.RecNo:=i;
Это чтоб в таблице строки менялись.
loki22208 вне форума Ответить с цитированием
Старый 05.10.2010, 15:01   #6
loki22208
Пользователь
 
Регистрация: 01.05.2010
Сообщений: 18
По умолчанию

Все равно интересно почему с первым кодом работала некоректно.
loki22208 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема с фильтром nervniy БД в Delphi 4 19.08.2010 06:36
Проблема с фильтром в ADOTable son_of_koshi Помощь студентам 2 04.08.2010 14:21
Отчет в Excel Explosion БД в Delphi 5 12.06.2010 19:21
Отчет в Excel !!! Дмитрий Гриб Общие вопросы Delphi 5 27.08.2009 20:18
Работаем с фильтром... nikolai_P Microsoft Office Excel 7 13.03.2009 14:04