如何提高delphi+Word写入数据速度???

解决方案 »

  1.   

    如果格式不复杂,或者格式比较规范,可以先写入StringList中,然后复制到Word中,然后进行排版转换,这样速度可以提高很多。
      

  2.   

    比如: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;