Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.01 c
14-25081
hatchy
2002-12-21 16:02
2003.01.09
Помогите сделать одну штуку......


4-25156
rybochkin
2002-11-20 20:41
2003.01.09
Чужое окно


7-25115
ugin
2002-10-30 15:20
2003.01.09
Работа с LPT


14-25044
Карелин Артем
2002-12-18 15:09
2003.01.09
Средства разработки для Palm.


14-25056
AL2002
2002-12-20 16:57
2003.01.09
Что делает файл Alevir.exe?




   Наверх