我在Delphi下直接操作Excel,想画出表格,可我只能画出外框, 中间的线画不出.请高人指点
谢谢.
谢谢.
解决方案 »
- 完成第一个大型WEB程序 高兴 散分!!!!!!!!!!
- StringGrid能不能实现goColSelect功能?
- 为什么我自己为TremoteDataModule添加的属性和方法!在可户端不能使用!
- procedure SetMon(str:integer;str1:integer = str);申明不正确????
- 如何用delphi编机器启动时让程序自动加载运行
- 紧急求救,有关DBGrid的问题。
- 安装了VB6后,原先的DEPHI程序出现字符转换datetime格式时,出现语法错误
- 如何在删除listbox中item的同时删除数据库中的对应数据?
- 如何才能得到“她”?
- 请教各位高手一个问题,我用IBTable系列的组件时遇到的问题,已经折腾了一天了,快被逼得跳楼了,请那位高手指点指点,小弟先多谢了
- 在cb 中有个 lm.h 的头文件,用于局域网管理程序的编写,问 delphi 对应单元?
- 求:打印数据的代码!
unit dbgridtoexcel;interfaceuses OleServer, Excel97, DBGrids, dbtables, Dialogs, Sysutils, windows, graphics, FileCtrl, classes, common_p;var
// XLApp:Excel_TLB.APPLication_;
XLApp: TExcelApplication;
procedure CreateExcelRep(DBGrid: TDBGrid; Title: string);
procedure HandleData(Worksheet: _Worksheet; DBGrid: TDBGrid; Title: string);
procedure HandleData1(Worksheet: _Worksheet; DBGrid: TDBGrid; Title: string);
procedure savefile(tablename: string; DBGrid: TDBGrid; title: string);
function textformat(str: string; count: integer): string;
implementationprocedure savefile(tablename: string; DBGrid: TDBGrid; title: string);
var
myfile: TStringList;
i: integer;
s: string;
myquery: TQuery;
begin
myquery := TQuery.Create(nil);
myquery.DatabaseName := 'apms99';
myquery.SQL.Clear;
myquery.SQL.Text := 'select * from ' + tablename;
try
myquery.Open;
except
end;
myfile := TStringList.Create;
s := '';
for i := 0 to myquery.FieldCount - 1 do
s := s + textformat(DBGrid.Columns.Items[i].Title.Caption, myquery.Fields[i].DisplayWidth);
myfile.Add(s);
while not myquery.EOF do
begin
s := '';
for i := 0 to myquery.FieldCount - 1 do
s := s + textformat(myquery.Fields[i].asstring, myquery.Fields[i].DisplayWidth);
myfile.Add(s);
myquery.Next;
end;
if not DirectoryExists('repfile') then
CreateDir('repfile');
myfile.SaveToFile('repfile\' + title + '_' + datetostr(now) + '.txt');
myfile.Free;
myquery.free;
end;function textformat(str: string; count: integer): string;
var
mystr: string;
begin
mystr := copy(' ', 1, count - length(str));
mystr := mystr + str;
result := mystr;end;procedure CreateExcelRep(DBGrid: TDBGrid; Title: string);
var
WorkBks: WorkBooks;
Workbk: _Workbook;
WorkSheets: Sheets;
Worksheet: _WorkSheet;
begin
try
XLApp := TExcelApplication.Create(nil);
except
savefile('t_temp1', DBGrid, Title);
exit;
end;
XLApp.Visible[0] := True;
WorkBks := XLApp.Workbooks as WorkBooks;
WorkBks.Add(XLWBatWorkSheet, 0);
Workbk := WorkBks.Item[1];
WorkSheets := Workbk.Worksheets;
Worksheet := Worksheets.Get_Item(1) as _WorkSheet;
WorkSheet.Name := Title;
if not llff then
HandleData1(Worksheet, DBGrid, Title)
else
handledata(worksheet, dbgrid, title);
xlapp.Free;
end;procedure HandleData1(Worksheet: _Worksheet; DBGrid: TDBGrid; Title: string);
var
i, j: integer;
ARange: Range;
MyQuery: TQuery;
begin
WorKSheet.Cells.Item[1, 4] := Title; for i := 1 to DBGrid.Columns.Count do
WorkSheet.Cells.Item[3, i + 1] := DBGrid.Columns.Items[i - 1].Title.caption;
Myquery := TQuery.Create(nil);
MyQuery.DatabaseName := 'apms99';
Myquery.SQL.Text := 'select * from t_temp1';
try
MyQuery.Open;
except
end;
for i := 0 to Myquery.RecordCount - 1 do
begin
for j := 0 to myquery.FieldCount - 1 do
WorkSheet.Cells.Item[4 + i, j + 2] := Myquery.Fields[j].value;
Myquery.Next;
end;
ARange := WorkSheet.Range[WorkSheet.Cells.Item[3, 2], WorkSheet.Cells.Item[3, myquery.FieldCount + 1]];
ARange.Columns.Interior.ColorIndex := 24;
ARange := WorkSheet.Range[WorkSheet.Cells.Item[3, 2], WorkSheet.Cells.Item[3 + Myquery.RecordCount, myquery.FieldCount + 1]];
ARange.Borders.LineStyle := xlContinuous;end;procedure HandleData(Worksheet: _Worksheet; DBGrid: TDBGrid; Title: string);
var
i, j, k, d, l, p: integer;
ARange: Range;
MyQuery: TQuery;
begin
WorKSheet.Cells.Item[1, 11] := Title;
// Worksheet.SetBackgroundPicture('C:\Program Files\Microsoft Office\Office\Bitmaps\Styles\Stone.bmp');
//arange:=worksheet.Range[worksheet.cells.item[3,4],worksheet.cells.item[3,7]];
//ARange.Columns.Dependents;
for i := 1 to 2 do
WorkSheet.Cells.Item[3, i + 1] := DBGrid.Columns.Items[i - 1].Title.caption;
if k < 10 then
for k := 3 to DBGrid.Columns.Count - 1 do
WorkSheet.Cells.Item[3, 3 * k - 4] := DBGrid.Columns.Items[k].Title.caption
else
for k := 3 to DBGrid.Columns.Count - 2 do
WorkSheet.Cells.Item[3, 3 * k - 4] := DBGrid.Columns.Items[k].Title.caption;
WorkSheet.Cells.Item[3, DBGrid.Columns.Count + 12] := DBGrid.Columns.Items[DBGrid.Columns.Count - 1].Title.caption;
Myquery := TQuery.Create(nil);
MyQuery.DatabaseName := 'apms99';
Myquery.SQL.Text := 'select * from t_temp1';
try
MyQuery.Open;
except
end;
for i := 1 to 6 do
WorkSheet.Cells.Item[4, i * 3 + 1] := '×Ü´ÎÊý';
for i := 1 to 6 do
WorkSheet.Cells.Item[4, i * 3 + 2] := '×Üʱ³¤(·Ö)';
for i := 1 to 6 do
WorkSheet.Cells.Item[4, i * 3 + 3] := '×Ü»°·Ñ(Ôª)';
d := 0;
for l := 0 to myquery.recordcount div 3 - 1 do
begin
// for i:=0 to 2 do
// begin for j := 0 to 1 do
begin
WorkSheet.Cells.Item[5 + d, j + 2] := Myquery.Fields[j].value;
end; d := d + 1;
//l:=l+2;
Myquery.Next;
myquery.next;
myquery.next;
//end;
end;
{for l:=0 to myquery.recordcount div 3-1 do
begin
for i:=0 to 2 do
begin
// p:=1;
for j:=0 to 2 do
begin
WorkSheet.Cells.Item[5+l,j+2]:=Myquery.Fields[j].value;
//P:=p+1;
Myquery.Next;
end;
end;end;}
{Myquery:=TQuery.Create(nil);
MyQuery.DatabaseName:='apms99';
Myquery.SQL.Text:='select * from t_temp1';
try
MyQuery.Open;
except
end; }
Myquery.first;
for l := 0 to myquery.recordcount div 3 - 1 do
begin
for i := 0 to 2 do
begin
p := 1;
for j := 3 to myquery.FieldCount - 1 do
begin
WorkSheet.Cells.Item[5 + l, 3 * p + 1 + i] := Myquery.Fields[j].value;
P := p + 1;
end; Myquery.Next;
end;
end; ARange := WorkSheet.Range[WorkSheet.Cells.Item[3, 2], WorkSheet.Cells.Item[3, myquery.FieldCount + 12]];
ARange.Columns.Interior.ColorIndex := 24;
ARange := WorkSheet.Range[WorkSheet.Cells.Item[3, 2], WorkSheet.Cells.Item[3 + Myquery.RecordCount div 3 + 1, myquery.FieldCount + 12]];
ARange.Borders.LineStyle := xlContinuous;end;end.
是什么?我在Delphi下创建一个Excel文件并打印出来,
打印结果没有表格线,我想用程序生成表格线一个格子的画太慢了.有没有快点的办法?