|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
05.10.2010, 00:30 | #1 |
Пользователь
Регистрация: 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; |
05.10.2010, 11:48 | #2 |
SQL-коддинг
Участник клуба
Регистрация: 16.01.2009
Сообщений: 1,192
|
и что здесь тогда работает нормально если строки дулируются?
и где твой фильтр? или что ты под ним понимаешь? и зачем делать вот это? Код:
|
05.10.2010, 14:56 | #3 |
Пользователь
Регистрация: 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; |
05.10.2010, 14:58 | #4 |
Пользователь
Регистрация: 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; |
05.10.2010, 14:59 | #5 |
Пользователь
Регистрация: 01.05.2010
Сообщений: 18
|
|
05.10.2010, 15:01 | #6 |
Пользователь
Регистрация: 01.05.2010
Сообщений: 18
|
Все равно интересно почему с первым кодом работала некоректно.
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Проблема с фильтром | 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 |