如何提高delphi+Word写入数据速度???
答题人: xxmmmx(踢踏)如果格式不复杂,或者格式比较规范,可以先写入StringList中,然后复制到Word中,然后进行排版转换,这样速度可以提高很多。比如:sListMain为TStringList,记录的内容非常规范,记录的是各个字段的信息
-----------------------------------------
序号 字段名称 字段别名 字段类型 默认值 允许空 主键 输入
1 MeasureID 器具编号 Varchar(8) N Y 手工
2 Name 器具名称 Varchar(32) Y 手工
-----------------------------------------
然后在Word中转为表格 Doc:=WordApp.Documents.Add;
Doc.Range.Delete;
Doc.Range.InsertAfter(sListMain.Text);
//定义全文的字体为12,粗体
Ran:=Doc.Range;
Ran.Font.Size:=12;
Ran.Bold:=true; //文章标题的字体为16,粗体,中心对齐
Ran:=Doc.Paragraphs.Item(1).Range;
Ran.Font.Size:=16;
Ran.Bold:=true;
Ran.ParagraphFormat.Alignment:=wdAlignParagraphCenter; //各个表名的字体为14,粗体
for i:=0 to iTableMax-1 do
Doc.Paragraphs.Item(iRan[i,0]-1).Range.Font.Size:=14; sBarText(0,'正在排版内容,请稍候······');
ProgressBar1.Position:=60;
Application.ProcessMessages; //把一个范围内的数据转化为表格,表格识别符为制表符(#9)
for i:=iTableMax-1 downto 0 do
begin
Ran:=Doc.Range(Doc.Paragraphs.Item(iRan[i,0]).Range.Start,
Doc.Paragraphs.Item(iRan[i,1]).Range.End);
Ran.ConvertToTable(#9,iRan[i,1]-iRan[i,0],8);
end; ProgressBar1.Position:=75;
//各列的宽度
for i:=iTableMax downto 1 do
begin
Doc.Tables.Item(i).Columns.Item(1).Width:=35;
Doc.Tables.Item(i).Columns.Item(2).Width:=100;
Doc.Tables.Item(i).Columns.Item(3).Width:=100;
Doc.Tables.Item(i).Columns.Item(4).Width:=80;
Doc.Tables.Item(i).Columns.Item(5).Width:=50;
Doc.Tables.Item(i).Columns.Item(6).Width:=50;
Doc.Tables.Item(i).Columns.Item(7).Width:=35;
Doc.Tables.Item(i).Columns.Item(8).Width:=35;
end;
答题人: xxmmmx(踢踏)如果格式不复杂,或者格式比较规范,可以先写入StringList中,然后复制到Word中,然后进行排版转换,这样速度可以提高很多。比如:sListMain为TStringList,记录的内容非常规范,记录的是各个字段的信息
-----------------------------------------
序号 字段名称 字段别名 字段类型 默认值 允许空 主键 输入
1 MeasureID 器具编号 Varchar(8) N Y 手工
2 Name 器具名称 Varchar(32) Y 手工
-----------------------------------------
然后在Word中转为表格 Doc:=WordApp.Documents.Add;
Doc.Range.Delete;
Doc.Range.InsertAfter(sListMain.Text);
//定义全文的字体为12,粗体
Ran:=Doc.Range;
Ran.Font.Size:=12;
Ran.Bold:=true; //文章标题的字体为16,粗体,中心对齐
Ran:=Doc.Paragraphs.Item(1).Range;
Ran.Font.Size:=16;
Ran.Bold:=true;
Ran.ParagraphFormat.Alignment:=wdAlignParagraphCenter; //各个表名的字体为14,粗体
for i:=0 to iTableMax-1 do
Doc.Paragraphs.Item(iRan[i,0]-1).Range.Font.Size:=14; sBarText(0,'正在排版内容,请稍候······');
ProgressBar1.Position:=60;
Application.ProcessMessages; //把一个范围内的数据转化为表格,表格识别符为制表符(#9)
for i:=iTableMax-1 downto 0 do
begin
Ran:=Doc.Range(Doc.Paragraphs.Item(iRan[i,0]).Range.Start,
Doc.Paragraphs.Item(iRan[i,1]).Range.End);
Ran.ConvertToTable(#9,iRan[i,1]-iRan[i,0],8);
end; ProgressBar1.Position:=75;
//各列的宽度
for i:=iTableMax downto 1 do
begin
Doc.Tables.Item(i).Columns.Item(1).Width:=35;
Doc.Tables.Item(i).Columns.Item(2).Width:=100;
Doc.Tables.Item(i).Columns.Item(3).Width:=100;
Doc.Tables.Item(i).Columns.Item(4).Width:=80;
Doc.Tables.Item(i).Columns.Item(5).Width:=50;
Doc.Tables.Item(i).Columns.Item(6).Width:=50;
Doc.Tables.Item(i).Columns.Item(7).Width:=35;
Doc.Tables.Item(i).Columns.Item(8).Width:=35;
end;
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货