怎样输出dbgrid的查询结果(100分)

  • 主题发起人 主题发起人 x7421
  • 开始时间 开始时间
X

x7421

Unregistered / Unconfirmed
GUEST, unregistred user!
我在dbgrid里显示出的查询,或是筛选的结果,我想直接输出打印这个结果怎么做呢?是用
文本,还是用excel还是其他的方法呢,请赐教。
 
都可以啊,你也可以直接打印,写代码咯
 
給一個輸入到Excel的過程,可以參考一下。
uses comobj,excel97,variants;
procedure TMainForm.DBGridToExcel(Multiselect: Boolean; FileNam: String; DBGrid: TDBGrid);
var
MSExcel, MSExcelWorkBook, MSExcelWorkSheet: Variant;
ColumnRange: Variant;
LinesCount, FieldsCount, i, j: Integer;
ExportText: Variant;
SaveCursor: TCursor;
ColumnWidth: Array of Integer;
function GetRangeAddr(const ColIndex, RowIndex: Integer): String;
var
i:integer;
begin
if ColIndex > 26 then
Result := Chr((ColIndex div 26) + 64);
i := ColIndex mod 26;
if i > 0 then Result := Result + Chr(i + 64);
Result := Result + IntToStr(RowIndex);
end;
begin
try
MSExcel := CreateOleObject('Excel.Application');
MSExcelWorkBook := MSExcel.WorkBooks.Add;
MSExcelWorkSheet := MSExcel.WorkSheets.Add;
except
ShowMessage('無法与Microsoft Excel連接!');
abort;
end;

try
with DBGrid do
begin
SaveCursor := Screen.Cursor;
Screen.Cursor := crHourGlass;
try
FieldsCount := DBGrid.Columns.Count;
with DataSource.DataSet do
begin
DisableControls;
try
LinesCount := 1;
First;
while not Eof do
begin
Inc(LinesCount);
Next;
end;
ExportText := VarArrayCreate([1, LinesCount, 1, FieldsCount], VarVariant);//創建二維變体類型數組
LinesCount := 1;
SetLength(ColumnWidth, FieldsCount);
for i := 0 to FieldsCount-1 do
begin
ExportText[LinesCount, i + 1] := Columns.Title.Caption;//將Columns列標題寫到數組第一行
ColumnWidth := Round(Columns.Width/64*10);//保存Columns列寬以便在Excel中設置列寬
end;
if not MultiSelect then //如果不支持多重選擇
begin
First;
while not Eof do
begin
Inc(LinesCount);
for i := 0 to FieldsCount-1 do
ExportText[LinesCount, i + 1] := DBGrid.Columns.Field.Value;
Next;
end;
end
else
begin //如果支持多重選擇
if DBGrid.SelectedRows.Count>0 then
with DBGrid.DataSource.DataSet do
for i := 0 to DBGrid.SelectedRows.Count-1 do
begin
GotoBookMark(Pointer(DBGrid.SelectedRows.Items));
Inc(LinesCount);
for j := 0 to FieldsCount-1 do
ExportText[LinesCount, j + 1] := DBGrid.Columns.Field.Value;
end;
end;
MSExcelWorkSheet.Range['A1:' + GetRangeAddr(FieldsCount, LinesCount)].value := Exporttext;
ColumnRange := MSExcelWorkSheet.Columns;
for i := 1 to FieldsCount do
ColumnRange.Columns.ColumnWidth := ColumnWidth[i-1];//設置列寬
MSExcelWorkSheet.Range['A1:' + GetRangeAddr(FieldsCount, LinesCount)].Borders.LineStyle := 1;//設置邊界線
finally
EnableControls;
end;
end;
MSExcelWorkSheet.SaveAs(Filenam);
finally
Screen.Cursor := SaveCursor;
end;
end;
Application.BringToFront;//激活應用程序
ShowMessage('所選資料已成功地存檔到'#13 + Filenam);
finally
try
MSExcel.Quit;
except
end;
end;
end;
 
直接打印就行了,能简单就不做复杂的。稳定。
如果用户要求界面美观,用图片去解决。
[:D]
 
可以使用dbgrideh控件,有打印功能!
 
弄个数据源 作个报表 打印
 
其实用一个动态报表就可以很好的实现,然后不预览直接打印就行了。
 
我怎么没有看见dbgrid有打印功能呀?在哪里呀?
 
有打印控件直接可用的
 
dbgrid是没有,不过你用dbgrideh就行了,到
delphi.mychangshu.com去下载一个exlib.2.1就行了.
 
http://delphi.mychangshu.com/dispdoc.asp?id=639
ehlib很好的中文控件了. 上面写错了.
 
把你的邮箱告诉我,我给你发个控件
 
多人接受答案了。
 
后退
顶部