Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2002.10.21;
Скачать: [xml.tar.bz2];

Вниз

Как данные из dbgrid поместить в excel для распечатки?   Найти похожие ветки 

 
Wlad Gorohov   (2002-09-29 00:33) [0]

Низкий поклон мастерам, чайнику не поможете?
Данные в dbgrid попадают исходя из sql скрипта, как их отправить на страницу EXCEL для распечатки?
Почему не quickreport спросите, там проблема с принтером, выдаем данные в qrdbtext, при предварительном просмотре все правильно показывается на русском и нормального размера, но потом при распечатке принтер печатает очень мелко, там 1 или 2 размер шрифта, и отечественые буквы превращаются в иероглифы, может это поможете полечить, мне надо одно из двух.


 
aus   (2002-09-29 22:36) [1]

Сделай макрос в Excel, выбери данные и вставь в нужное место
Range("a1").CopyFromRecordset RS
где RS - твой набор данных.
Это самый быстрый способ.
Но способов еще полно, так же как и описаний их на этом форуме.
Поищи.


 
Wlad Gorohov   (2002-09-29 23:39) [2]

Еще вопрос по DBGRID давно мучает:
Как обратиться с ячейке DBGRID с координатами X Y?


 
aus   (2002-09-30 08:17) [3]

Если X - порядковый номер поля, а Y - номер записи, то учитывая, что курсор стоит на первой записи набора данных, используй
MoveBy(Y) и DBGrid1.SelectedField := DBGrid1.Fields[X]
Примерно так, хотя могут быть варианты.


 
Praco   (2002-09-30 08:57) [4]

В DBGridEh довольно просто сохранить в Excel или распечатать выделенный фрагмент или весь грид. Рекомендую.


 
Tatyana   (2002-09-30 09:47) [5]

Печать можно осуществить различными способами.
Например можно использовать компоненты следующих классов TExcelApplication; TExcelWorkbook;TExcelWorksheet и далее можешь связываться при помощи раннего или познего связывания, я рекомендую первое быстродействие увеличивается.


 
turusov   (2002-09-30 11:21) [6]

//Содержимое DataSource в Excel учитывая состояние Visible
Для увеличения скорости передачи передаю Массив из массивов. Проблема может быть при передаче дат ниже 01.01.1900 года
procedure TNsExcel2000.PutDataSource(cVisible: boolean; Owner: TComponent = Nil);
var
Row, Col: integer;
RowCount: integer;
PutOk, bStop: boolean;
Arr: TNsVarArray;
A: variant;
AOwner: TComponent;
BS: TBookmarkStr;
L: TStringList;
procedure GetVisibleField(List: TStrings);
var
k: integer;
begin
List.Clear;
if Assigned(AOwner) then
if AOwner is TDataSet then begin
for k:= 0 to (AOwner as TDataSet).Fields.Count-1 do
if cVisible then begin
if (AOwner as TDataSet).Fields[k].Visible then
List.Add((AOwner as TDataSet).Fields[k].FieldName);
end
else
List.Add((AOwner as TDataSet).Fields[k].FieldName);
end//if
else
if AOwner is TDBGrid then begin
for k:= 0 to (AOwner as TDBGrid).Columns.Count-1 do
if cVisible then begin
if (AOwner as TDBGrid).Columns[k].Visible then
List.Add((AOwner as TDBGrid).Columns[k].FieldName);
end
else
List.Add((AOwner as TDBGrid).Columns[k].FieldName);
end//if
end;
begin
try
if Connected AND (VarType(NsWorkbook) = varDispatch) AND
Assigned(FDataSource) then
if FDataSource.DataSet.Active then begin
if Assigned(Owner) then AOwner:= Owner
else AOwner:= FDataSource.DataSet;
RowCount:= 2;
try
L:= TStringList.Create;
GetVisibleField(L);
PutStrings(1,1,L);
Arr:= TNsVarArray.Create(BlockSize,L.Count);//FDataSource.DataSet.FieldCount);
A:= VarArrayCreate([1,Arr.ColumnCount], varVariant);
BS:= FDataSource.DataSet.Bookmark;
FDataSource.DataSet.DisableControls;
FDataSource.DataSet.First;
repeat
for Row:= 1 to Arr.LinesCount do begin
for Col:= 1 to Arr.ColumnCount do
A[Col]:= FDataSource.DataSet.FieldByName(L[Col-1]).Value;
Arr.AddVarArray(A);
FDataSource.DataSet.Next;
if FDataSource.DataSet.Eof then Break;
end;
RowCount:= PutRows(RowCount,Arr.ArrayDim2);
Arr.Clear;
if RowCount = 0 then Break;
if Assigned(FOnNsProgress) then begin
bStop:= False;
FOnNsProgress(RowCount-2,FDataSource.DataSet.RecordCount,bStop);
if bStop then Break;
end;
until (RowCount >= FDataSource.DataSet.RecordCount);
finally
FDataSource.DataSet.EnableControls;
FDataSource.DataSet.Bookmark:= BS;
L.Free; Arr.Free;
end;
end;//if
except
on E:Exception do begin
MessageBox(Forms.Application.Handle,PChar(nseDataSource), PChar(nseExcel),MB_OK OR MB_ICONHAND);
end;
end;
end;
unit NsVarArrayUnit; Урезаю
procedure TNsVarArray.AddVarArray(ArrayDim1: variant);
var k, k1: integer;
begin
if VarArrayDimCount(FArrDim2) = 2 then
if VarIsArray(ArrayDim1) then begin
if VarArrayDimCount(ArrayDim1) <> 1 then
raise Exception.Create(*
if (VarArrayHighBound(ArrayDim1,1)-VarArrayLowBound(ArrayDim1,1))+1 <> ColumnCount then
raise Exception.Create(*
try inc(FPos);
k1:= VarArrayLowBound(FArrDim2,2);
for k:= VarArrayLowBound(ArrayDim1,1) to VarArrayHighBound(ArrayDim1,1) do begin
FArrDim2[FPos,k1]:= ArrayDim1[k];
inc(k1);
end;
except
dec(FPos);
raise;
end;
end;
end;



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

Форум: "Базы";
Текущий архив: 2002.10.21;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.57 MB
Время: 0.035 c
1-68816
Ionv
2002-10-10 07:49
2002.10.21
Как вывести на эран число 16-ом виде?


1-68691
mike_yz
2002-10-10 19:25
2002.10.21
как проверить строку если это число, или нет?


4-69070
Same_Genetik
2002-09-06 15:55
2002.10.21
Как получить имя текущего пользователя в Win2000 ?


1-68721
Shapovalov K
2002-10-11 09:59
2002.10.21
Как сделать активным орпеделённый итем ComboBox а?


14-68985
Shrek
2002-09-28 20:12
2002.10.21
Visual Basic





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский