Форум: "Базы";
Текущий архив: 2003.01.09;
Скачать: [xml.tar.bz2];
ВнизПерекинуть фильтрованные данные из табла в 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;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.012 c