数据库记录替换Word书签!!急~~~~~~~~~~~(50分)

  • 主题发起人 主题发起人 月魔
  • 开始时间 开始时间

月魔

Unregistered / Unconfirmed
GUEST, unregistred user!
在Word模板中插入书签,书签和数据库中的字段名相同!
然后从数据库中提取记录。替换掉书签。
但是下面的代码只能替换一条记录后,就不会再追加新记录。

各位大侠帮我看看。(代码是东拼西凑的,自己感觉很垃圾)

先谢谢了!

procedure TForm1.Button1Click(Sender: TObject);
var
template, newTemplate, ItemIndex, FileName, ConfirmConversions,
ReadOnly, AddToRecentFiles, PasswordDocument, PasswordTemplate,
Revert, WritePasswordDocument, WritePasswordTemplate, Format: OLEVariant;
begin
try
WordApp.Connect;
except
Abort;
end;
WordApp.Visible := True;
WordApp.Caption := '###';
Template := EmptyParam;
NewTemplate := False;
ItemIndex := 1;
FileName := 'f:/a.dot';
ConfirmConversions := False;
ReadOnly := false;
AddToRecentFiles := False;
PasswordDocument := '';
PasswordTemplate := '';
Revert := True;
WritePasswordDocument := '';
WritePasswordTemplate := '';
Format := wdOpenFormatDocument;
WordApp.Documents.Open(FileName, ConfirmConversions,
ReadOnly, AddToRecentFiles, PasswordDocument, PasswordTemplate,
Revert, WritePasswordDocument, WritePasswordTemplate, Format, EmptyParam, EmptyParam);
WordDoc.ConnectTo(WordApp.Documents.Item(ItemIndex));
WordApp.Documents.Add(Template, NewTemplate, EmptyParam, EmptyParam);
WordApp.Options.CheckSpellingAsYouType := false;
WordApp.Options.CheckGrammarAsYouType := false;
for i := 0 to DBGrid1.Columns.Count - 1 do
begin
if WordDoc.BookMarks.Exists(DBGrid1.Columns.Items.Title.Caption) then
begin
Template := DBGrid1.Columns.Items.Title.Caption;
WordDoc.BookMarks.Item(Template).Select;
if DBGrid1.Columns.Items.Title.Caption <> null then
begin
WordApp.Selection.InsertAfter(Trim(DBGrid1.Columns.Item.Field.AsString));
end;
end;
end;
end;
如感觉分少,请告知加分方法!再+
 
"objWordDoc.Bookmarks("ISSUE_DATE").Range.Text = va_ISSUE_DATE_text"
别用InsertAfter,改用range.text。
 
不行,还是只能添加一条记录!
我不知道是不是这样用,但是楼上写的方法在D7里不能用!

我改了一下:
WordDoc.Bookmarks.Item(Template).Range.Text := Trim(DBGrid1.Columns.Items.Field.AsString);

但是这样还是只能替换一条~~
 
你的Bookmarks不能叫一个名字
比如叫B1,B2...
Bookmarks("B1"),Bookmarks("B2")这样是不会出错的
 
还是只能添加一条!
BookMarks("B1") 是Word中的书签?还是Delphi中用的?
如果可以的话,能不能贴一下代码?
 
WordDoc.BookMarks.Item(Template).Select;
请先证明每次调用这里,Template是不一样的值
 
我知道了,你只有一行的bookmark当然只替换一行
 
此处内容收回
 
应该是不一样的!
我在Word里插入三个书签,每个书签都被替换过!但是每次都是在同一地方替换!

把所有的记录都添加在定义了书签的地方!

用什么方法可以添加模板中的内容????
上面的代码,我改了几处:
procedure TForm1.Button1Click(Sender: TObject);
var
template, newTemplate, ItemIndex, FileName, ConfirmConversions,
ReadOnly, AddToRecentFiles, PasswordDocument, PasswordTemplate,
Revert, WritePasswordDocument, WritePasswordTemplate, Format: OLEVariant;
i: integer;
begin
try
WordApp.Connect;
except
Abort;
end;
WordApp.Visible := True;
WordApp.Caption := '###';
Template := EmptyParam;
NewTemplate := False;
ItemIndex := 1;
FileName := 'f:/a.dot';
ConfirmConversions := False;
ReadOnly := false;
AddToRecentFiles := False;
PasswordDocument := '';
PasswordTemplate := '';
Revert := True;
WritePasswordDocument := '';
WritePasswordTemplate := '';
Format := wdOpenFormatDocument;
WordApp.Documents.Open(FileName, ConfirmConversions,
ReadOnly, AddToRecentFiles, PasswordDocument, PasswordTemplate,
Revert, WritePasswordDocument, WritePasswordTemplate, Format, EmptyParam, EmptyParam);
WordDoc.ConnectTo(WordApp.Documents.Item(ItemIndex));
// WordApp.Documents.Add(Template, NewTemplate, EmptyParam, EmptyParam);
WordApp.Options.CheckSpellingAsYouType := false;
WordApp.Options.CheckGrammarAsYouType := false;
dbgrid1.DataSource.DataSet.First;
while not dbgrid1.DataSource.DataSet.Eof do
begin
for i := 0 to DBGrid1.Columns.Count - 1 do
begin
if WordDoc.BookMarks.Exists(DBGrid1.Columns.Items.Title.Caption) then
begin
Template := DBGrid1.Columns.Items.Title.Caption;
WordDoc.BookMarks.Item(Template).Select;
// if DBGrid1.Columns.Items.Title.Caption <> null then
// begin
// WordApp.Selection.InsertAfter(Trim(DBGrid1.Columns.Item.Field.AsString));
WordDoc.Bookmarks.Item(Template).Range.Text := Trim(DBGrid1.Columns.Items.Field.AsString);
// end;
end;
dbgrid1.DataSource.DataSet.Next;
end;
end;

end;
 
晕!
你用的不是Delphi??????
 
拜托各位大侠帮我看看吧~~~~~
真的急用了~~~
 
怎么没有人回呀~~~~
分少可以加的
 
我不是给你答案了吗?
你有几个书签,就会替换几个。
所以我用的是利用table来定位,并且替换内容!
 
此处内容收回
 
楼上的兄台,抱歉,我对ASP不是很熟!
所以你给的答案,对我用处不大!
不过还是谢谢你!

谁有改好的Delphi代码,帮忙贴出来,谢谢!
 
如果使用书签,可以先找到书签所在行,然后在这行的下面输出一个空行,在空行的与标签对应的列上输出相应记录。可参考如下vba代码
For j = 1 To 5
ActiveDocument.Bookmarks.Item("b1").Select
Selection.EndKey Unit:=wdLine
Selection.TypeParagraph
Selection.TypeText Text:=Space(100)
For i = 1 To 3
t = "b" & i
If ActiveDocument.Bookmarks.Exists(t) Then
ActiveDocument.Bookmarks.Item(t).Select
Selection.MoveDown Unit:=wdLine, Count:=1
Selection.InsertAfter ("text")
End If
Next
Next
 
拜托,难道没Pascal代码吗???????????????????????????????????????????????????

 
此处内容收回
 
请问!你是为了得分,还是共同进步????
我没有2000千分,200分也没有!
就这么多分,要么就结贴时散分!如果你不要,我可以给其他人!

如果我可以改的话,早就入了,何必这么急,还要等到现在都没有结果!
 
请问!你是为了得分,还是共同进步????
我没有2000千分,200分也没有!
就这么多分,要么就结贴时散分!如果你不要,我可以给其他人!

如果我可以改的话,早就入了,何必这么急,还要等到现在都没有结果!
 
后退
顶部