大放血!!! 200分相送!(200分)

  • 主题发起人 主题发起人 hqz
  • 开始时间 开始时间
H

hqz

Unregistered / Unconfirmed
GUEST, unregistred user!
我想实现这样的功能:下面是样表:
<%=term%>学年下学期考试时间表
考试日期:<%=date%> 时间:<%=time%> 教学楼:<%classroom%>
<table>
<tr>
<th>学院</th> <th>专业</th> <th>年级</th> <th>课号 </th> <th>课程名称</th> <th>考试时间</th> <th>教室 人数</th> <th>主考教师</th> <th>监考教师</th> <th> 任课教师</th> <th>备注</th>
</tr>
<tr>
<td>化学化工院</td> <td>化学工程与工艺</td> <td>2000</td> <td>01001011-01</td> <td>计算机在材料科学与</td> <td>工程中的应用</td> <td>2001.12.28 15:00-17:00</td> <td>10A-304 </td> <td>80</td> <td>张 华</td> <td>李 青</td> <td>张 华</td>
</tr>
<tr>
................
</tr>
</table>

在Word中打出这种样表,听人说利用批注建立与Delphi的联系(包括在批注中建立与数据库(ADO)的连接,设置变量).
但是我不知道怎么实现,请各位大虾帮忙!本人完分感谢!!!
 
word 不行啊,用Excel試一試
 
可以用delphi访问数据库,然后调用word生成word中的表格。
 
与批注建立关系?不懂,你可以用Excel来做,用Delphi控制Excel,在单元格中写入数据。
 
请看表头:
<%=term%>学年下学期考试时间表
考试日期:<%=date%> 时间:<%=time%> 教学楼:<%classroom%>
上面的一些变量如term,data,time,classroom怎么赋值,上面两行怎么打印?
 
将<%=date%>等定义为域(field)。这样就可以定位了。
最苯的办法就是通过document.fields[index]来定位。
你先在word种用vba试一下,同时看看word的模板文件(Templet)的实现方法。
 
请问上面兄弟是否有源代码?
 
随便写了一个,细节自己修改一下吧.
通过输入Edit的值可以修改相应Word中的文字.

pas文件:
-----------------------------------------------------
unit fmWordField;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Word2000, OleServer, StdCtrls;

type
TForm1 = class(TForm)
Edit1: TEdit;
Edit2: TEdit;
Edit3: TEdit;
Edit4: TEdit;
Button1: TButton;
Button2: TButton;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
WordDoc: TWordDocument;
WordApp: TWordApplication;
procedure Button1Click(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}
const
ExamYear = 1;
ExamDate = 2;
ExamTime = 3;
ExamHouse = 4;
Macro = 'MACROBUTTON EmptyMacro';

procedure TForm1.Button1Click(Sender: TObject);
var
Template,NewTemplate,DocType,wdVisible : OleVariant;
wdUnit,wdCount,wdExtend : OleVariant;
wfType, wfText, wfFormat : OleVariant;
begin
WordApp.Connect;
WordApp.Visible := True;
WordApp.DisplayAlerts := wdAlertsNone;

Template := EmptyParam;
NewTemplate := EmptyParam;
DocType := EmptyParam;
WdVisible := EmptyParam;
wdUnit := EmptyParam;
wdCount := EmptyParam;
wdExtend := EmptyParam;
wfType := EmptyParam;
wfText := EmptyParam;
wfFormat := EmptyParam;

WordDoc.ConnectTo(WordApp.Documents.Add(Template,NewTemplate,DocType,wdVisible)as _Document);

WordApp.Selection.TypeParagraph;
WordApp.Selection.TypeParagraph;

WordDoc.Fields.Add(WordApp.Selection.Range,wfType,wfText,wfFormat);
WordDoc.Fields.Item(ExamYear).Code.Text := Macro + ' [第几]';
WordDoc.Fields.Item(ExamYear).Select;
WordApp.Selection.MoveRight(wdUnit,wdCount,wdExtend);
WordApp.Selection.TypeText('学年下学期考试时间表');

WordApp.Selection.TypeParagraph;
WordApp.Selection.TypeText('考试日期:');
WordApp.Selection.MoveRight(wdUnit,wdCount,wdExtend);
WordDoc.Fields.Add(WordApp.Selection.Range,wfType,wfText,wfFormat);
WordDoc.Fields.Item(ExamDate).Code.Text := Macro + ' [日期]';

WordDoc.Fields.Item(ExamDate).Select;
WordApp.Selection.MoveRight(wdUnit,wdCount,wdExtend);
WordApp.Selection.TypeText(' ');
WordApp.Selection.TypeText('时间:');
WordApp.Selection.MoveRight(wdUnit,wdCount,wdExtend);
WordDoc.Fields.Add(WordApp.Selection.Range,wfType,wfText,wfFormat);
WordDoc.Fields.Item(ExamTime).Code.Text := Macro + ' [时间]';

WordDoc.Fields.Item(ExamTime).Select;
WordApp.Selection.MoveRight(wdUnit,wdCount,wdExtend);
WordApp.Selection.TypeText(' ');
WordApp.Selection.TypeText('教学楼:');
WordApp.Selection.MoveRight(wdUnit,wdCount,wdExtend);
WordDoc.Fields.Add(WordApp.Selection.Range,wfType,wfText,wfFormat);
WordDoc.Fields.Item(ExamHouse).Code.Text := Macro + ' [教学楼]';

end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
try
WordApp.Quit;
WordApp.Disconnect ;
WordApp.Free;
except
end;
end;

// 动态修改学年,考试时间等
procedure TForm1.Button2Click(Sender: TObject);
begin
WordDoc.Fields.Item(ExamYear).Code.Text := Macro + ' ['+ edit1.text + ']';
WordDoc.Fields.Item(ExamDate).Code.Text := Macro + ' ['+ edit2.text + ']';
WordDoc.Fields.Item(ExamTime).Code.Text := Macro + ' ['+ edit3.text + ']';
WordDoc.Fields.Item(ExamHouse).Code.Text := Macro + ' ['+ edit4.text + ']';
end;

end.
 
非常感谢上面兄弟,因为今天较忙,我明天再好好的欣赏您的程序!!!
 
bluerain,你好!我保证你已拿到100分!
现在还有一个问题:
Word中加了批注后可以给它赋值吗?怎么做?
 
批注(comments)的赋值和域(fields)的赋值是一样的.
例如你加入了一个批注:
Selection.Comments.Add
Selection.TypeText Text:="cde" //批注的内容是"cde"
要编辑这个批注,只要用
thisdocument.Comments(1).Range.Text = "123" // 就把批注内容"cde"改成"123"了.

上面的代码是VBA的,你改成相应的Delphi代码就可以了.自己试一下.
 
怪!
WordDocument1.Comments(1).Range.Text = "123" 在Delphi中编译出错!
错误原因是:[Error] :Missing operator or semicolon
可我看不出错在哪?
在Word中此句:thisdocument.Comments(1).Range.Text = "123" 却没错!
 
在Delphi中应该这么用
var
comm : comment;
begin
...
comm := WordDoc.Comments.Item(1);
comm.Range.Text := '123'
...
end;
 
bluerain先生,实在对不起,刚才把"奖品"给错了一位,我正在给斑竹联系,看有没有办法纠正?
如果不行的话,我再提个问题,你近来我就把分数给你(200分)
 
慢慢来吧.有什么消息通知一声.
 
bluerain,你好!
最近我想学"DDL动态连接库"方面的编程,看了一本书,这本书讲得挺深奥.
我想请你谈谈怎么做,并给一个示例程序.
你到这个问题:'bluerain,请进!'(Delphi-IDE/使用技巧)里面去.
顺便我把上次应该给你的"奖品"给你!(我不想麻烦斑竹了)
 
后退
顶部