Форум: "Базы";
Текущий архив: 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.47 MB
Время: 0.008 c