起步软件技术论坛-X3

 找回密码
 立即注册
搜索
查看: 702|回复: 13

【结帖】使用文档库提供的接口操作Word文档,标签178个。速度特别慢!基本交互不可用,望

[复制链接]
发表于 2007-12-5 22:05:33 | 显示全部楼层 |阅读模式
TUnStructureDocUtils.AddWordFieldValue(FWordOleExtend, attName, attValue); 每次调用该方法的时候有明显的停等。
回复

使用道具 举报

发表于 2007-12-6 13:00:22 | 显示全部楼层
需求已提交。谢谢楼主的意见。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-12-6 18:34:35 | 显示全部楼层
希望尽快解决,解决后劳驾通知一下我们,我们这里项目测试急用! 谢过了
回复 支持 反对

使用道具 举报

发表于 2007-12-11 11:12:15 | 显示全部楼层
这个问题已经沟通过了,可以等到这周末(就是12月14号)再去看。如果有特殊情况,请告知我们
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-1-30 14:43:25 | 显示全部楼层
unit BQSLCSFunc;

interface

uses
  Business.System, Business.Forms, DocLib, DocOffice;

type
  TBQSLCSFunc = class(TForm)
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
  private
    {private declarations}
    FWordOleExtend: TWordOleExtend;
  public
    {public declarations}
  end;

implementation


procedure TBQSLCSFunc.Button1Click(Sender: TObject);
begin
  FWordOleExtend := TUnStructureDocUtils.CreateWordOleExtend('');
  TUnStructureDocUtils.OpenWordDoc(FWordOleExtend, 'C:\test.doc', True);
  TUnStructureDocUtils.ShowWordFieldCodes(FWordOleExtend, True);
end;

procedure TBQSLCSFunc.Button2Click(Sender: TObject);
var
  lcount: integer;
begin
  // Add Tag To Doc
  for lcount := 0 to 200 do
  TUnStructureDocUtils.AddWordField(FWordOleExtend, 'WQB'+SysUtils.intToStr(lcount), '');
end;

procedure TBQSLCSFunc.Button3Click(Sender: TObject);
var
  lcount: integer;
begin
  //Set tag Value
  for lcount := 0 to 200 do
  //这里效率特别差  你们看看吧 !!!
  TUnStructureDocUtils.AddWordFieldValue(FWordOleExtend,
    'WQB'+SysUtils.IntToStr(lcount), 'Value'+SysUtils.IntToStr(lcount));
end;
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-1-30 14:46:26 | 显示全部楼层
我这里网速太慢,只好把源代码贴上去了 ,这个问题我们以为已经开始处理了。我们一直在等。没有想到是这种情况,希望尽早给与解决。这里先谢过了 !
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-1-30 17:10:45 | 显示全部楼层
如果该方法不能使用的话,希望尽可能提供多种解决方案。 使我们更该程序的时候有的选择。
回复 支持 反对

使用道具 举报

发表于 2008-1-30 18:37:05 | 显示全部楼层
楼主,这个方法暂时不能再优化了,建议换一种方法处理吧。

procedure TMainForm.OpenWordClick(Sender: TObject);
var
  lPath: String;
  lFileName: String;
begin
  if OpenDialog1.Execute then
  begin
    lFileName := OpenDialog1.FileName;
    FWord := ComObj.CreateOleObject('Word.Application');
    FApp := DispatchHelper.Create(FWord);
    FApp.PropertyPut('Visible', [True]);

    FDocs := DispatchHelper.Create(FApp.PropertyGet('Documents',  []));
    FDocs.InvokeMethod('Open', [lFileName]);
    end;
end;

procedure TMainForm.CloseWordClick(Sender: TObject);
var
  lAw: DispatchHelper;
begin
  lAw := DispatchHelper.Create(FApp.PropertyGet('ActiveWindow', []));
  lAw.InvokeMethod('Close', []);
end;

procedure TMainForm.replaceClick(Sender: TObject);
var
  lSelection, lFind, lReplacement: DispatchHelper;
begin
  lSelection := DispatchHelper.Create(FApp.PropertyGet('Selection', []));
  lFind :=  DispatchHelper.Create(lSelection.PropertyGet('Find', []));
  lReplacement := DispatchHelper.Create(lFind.PropertyGet('Replacement', []));

  lFind.InvokeMethod('ClearFormatting', []);
  lReplacement.InvokeMethod('ClearFormatting', []);

  lFind.InvokeMethod('Execute', [edit1.Text, False, False, False, False, False, True, 1, False, edit2.Text,
    2, False, False, False, False]);
end;
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-1-31 11:02:04 | 显示全部楼层
这个例子我测试了,没有什么效果,希望提供一个插入200个标记内容的例子。换句话说,就是在我们目前的解决方案下,怎么使用你们的最新方案进行替换。对于lfind.invokemethod中的多多参数我没有理解。你不能指望我们对于VBA非常熟悉。如果新方案中将操作Word的方式全部交由VBA进行实现,那么我们仅仅希望提供能够解决我们现有需求的方案就可以了。还是希望提供一个完整的例子,无论从人力投入还是时间上,我们目前都来不及,因为是上线系统上进行方案变更,应当考虑我们的风险和困难,我们不可能有时间去了解VBA该怎么写!
回复 支持 反对

使用道具 举报

发表于 2008-1-31 11:07:16 | 显示全部楼层
8楼的例子是用Word的Replace功能,替换你文档中定义的标签。

你可以在模板文档中定义好各个字段标签,如: {Field_ID}
然后用8楼的例子,用代码方式根据数据集的内容替换这些标签就可以了。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Justep Inc.

GMT+8, 2025-7-6 21:21 , Processed in 0.041846 second(s), 16 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表