Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.01.09;
Скачать: CL | DM;

Вниз

Перекинуть фильтрованные данные из табла в excel   Найти похожие ветки 

 
IrviS ©   (2002-12-14 19:30) [0]

Необходим переброс данных из фильтрованных таблиц в ексель. с учетом выбранных столбцов юзером.

В СтрингГриде есть колонка с чекбоксами, где при помощи них юзер выбирает необходимые поля таблицы. В гриде перечислены поля всех таблиц (3 - шт).




procedure TMain.MicrosoftExel1Click(Sender: TObject);
var nc, mc: Integer;
exl: OLEVariant;
x,WorkBook,Sheet : Variant;
begin
exl := CreateOleObject("Excel.Application");
WorkBook := exl.Application.WorkBooks.Add;
exl.Workbooks[1].WorkSheets[1].Name:="Otchet";
Sheet := WorkBook.WorkSheets[1];
x:=exl.Workbooks[1].WorkSheets["otchet"].Columns;
x:=exl.Workbooks[1].WorkSheets["Otchet"].Rows;
x.Rows[1].Font.Name:="Verdana";
x.Rows[1].Font.Size:=10;
Sheet.Cells[1,1]:="Theke: Результат";
Sheet.Cells[1,1].Borders[xlEdgeBottom].Weight:=2;
Sheet.Cells[1,2].Borders[xlEdgeBottom].Weight:=2;
Sheet.Cells[1,3].Borders[xlEdgeBottom].Weight:=2;

Sheet.Cells[4,1].Borders[xlEdgeLeft].Weight:=3;

for mc:=0 to StringGrid2.RowCount do begin

if StringGrid2.Cells[1,mc]="+" then begin

Sheet.Cells[4,mc+1].Borders[xlEdgeTop].Weight:=3;
Sheet.Cells[4,mc+1].Borders[xlEdgeBottom].Weight:=3;
Sheet.Cells[4,mc+1]:=StringGrid2.Cells[0,mc];

for nc:=1 to taGemain.RecordCount do begin
Sheet.Cells[nc+4,mc+1]:=taGemain.Fields[mc+1].AsString;
taGemain.Next;end;

end;

end;

exl.Visible := true;

end;


 
IrviS ©   (2002-12-14 19:59) [1]

лучше объясню
1. Есть 3-и шт таблицы (в которых всякой хр..ени)
2. Есть грид у которого в левом столбце перечислены все поля тех таблиц
3. Следующий столбец с чекбоксами
4. За ним столбец с пустыми строками для заполнения пареметров фильтра
5. С помощью чекбоксов будут отображаться колонки в отчете ексела.


 
IrviS ©   (2002-12-15 09:45) [2]

Попробывал сделать так. Вроде работает.
Но все же хочу чтоб кто - нибудь проверил бы.
Думаю что мозги мои от не досыпа совсем таво.

ConfigFile:=TIniFile.Create("settings\list.ini");
for mc:=0 to StringGrid2.RowCount do begin

if StringGrid2.Cells[1,mc]="+" then begin
xc:=xc+1;
Sheet.Cells[4,xc].Borders[xlEdgeTop].Weight:=3;
Sheet.Cells[4,xc].Borders[xlEdgeBottom].Weight:=3;
Sheet.Cells[4,xc]:=StringGrid2.Cells[0,mc];


if ConfigFile.ReadString("List",StringGrid2.Cells[0,mc],"")<>"" then begin
namefield:=ConfigFile.ReadString("List",StringGrid2.Cells[0,mc],"");
try
taGemain.First;
for nc:=1 to taGemain.RecordCount do begin
Sheet.Cells[nc+4,xc]:=taGemain.FieldByName(namefield).AsString;
taGemain.Next; end;
except
try
taFunktion.First;
Sheet.Cells[nc+4,xc]:=taFunktion.FieldByName(namefield).AsString;
except
end;
end;
end;
end;



 
Карелин Артем ©   (2002-12-16 11:16) [3]

1! Sheet.Cells[nc+4,xc]:= будет работать медленно. Делай через буфер или вариантный массив. Подробнее смотри на delphikingdom.com "По волнам интеграции".
2! Некоторые авторы жаловались на неустойчивость работы старых (9Х) виндов при большом количестве вызовов OLE. Не наблюдал...
3! Не забудь про пакеты обновлений для офиса. В 9Х отсутствие обновлений ведет к нехватке ресурсов. Нужно для 97 и 2000 офисов.
4! Освобождай ексель.
5! Если уж делаешь вставку значений через cells, то установка ScreenUpdating в False добавит скорости. Только потом обратно в True установи. :)



Страницы: 1 вся ветка

Текущий архив: 2003.01.09;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.015 c
3-24782
Брат
2002-12-11 11:23
2003.01.09
Хранимая процедура - замена значений null


1-24839
viper
2002-12-27 13:45
2003.01.09
Ошибка при запуске программы


1-24950
solo
2002-12-26 00:23
2003.01.09
Хитрый TListItem.Checked


14-25075
[NIKEL]
2002-12-18 17:13
2003.01.09
*.tpu (База данных)


14-25057
^Sanya
2002-12-19 22:01
2003.01.09
Помогите плиз...