通过word实现自动组卷,谁有这方面的经验?请赐教!(分数有限 感激不断)(10分)

  • 主题发起人 主题发起人 lqpg
  • 开始时间 开始时间
偶有一套通用题库管理系统,也是通过WORD组卷的,有兴趣的话可以与我联系,QQ:57151728,EMAIL:HTXY99@YAHOO.COM。不过偶最近手紧,需要¥,系统不会免费的。
 
感谢大家的热心帮助!
但小弟刚入此道,还有几个问题向大家请教
1、组卷过程中的排版问题
如:
A、怎样控制折行(为了试卷排列更科学、更紧凑 还可能控制行距、列距);
B、怎样控制表格(行列数、长度、粗细、颜色);
C、怎样控制图文混排等
 
大家给点意见嘛 我很着急啊
 
在大富翁的帖子里有很多有关的内容,自己耐心的查阅和实践,你所关心的都已实现,别人系统的提供给你,可能性不大,还是靠自己吧。
 
谢谢大家的积极参与 但兄弟在VBA控制方面还很菜
希望那位兄弟 给点入门级DEMO
谢谢各位
 
希望一起探讨

我想通过流的追加来一起完成这个工作

不过结果肯定是要手动改动一次
 
再次对参加本次讨论的兄弟姐妹表示感谢!
我有几点想法
1、通过控制VBA来控制WORD编辑(应该比较麻烦 很多函数 要去观察VBA来完成);
2、通过WORD模版来填充试卷,呵呵~  建议填充完以后 手工改动一下;
3、不用WORD来做,通过某个报表控件来编辑(如:frreport);
4、干脆就别做组卷系统了,就做一个考试系统,把试题管理和考试、判分结合,绕过组卷得了,淘汰现有的纸张考试模式,把试题全作成标准化试题,这样不就行了;
 
谁有控制VBA的好办法
最好有DEMO
我在这个地方一直没有弄懂 请大家江湖救急!
 
这是以前做的一个组卷小程序,是从题库中随机抽取题,并生成试卷。希望对你有所帮助。

procedure TWebModule1.GetWordDoc(SortID, TestNum: Integer);
var
TestArray: Array[1..100] of Integer;
AnswerArray: Array[1..100] of String;
i, j, rndNum, iRecCount: Integer;
blQuit: Boolean;
Nothing, FileName: OleVariant;
FPath: string;
begin
SetLength(FPath, 255);
GetModuleFileName(hInstance, Pchar(FPath), 255);
FileName := Copy(FPath, 1, Pos('ToOffice', FPath) -1) + 'TestDoc.Doc';
with qrTest do
try
if Active then Close;
Parameters.ParamByName('SortID').Value := SortID;
Open;
iRecCount := RecordCount;

//判断题数是否超出范围
if TestNum > iRecCount then TestNum := iRecCount;
try
WordDoc.Connect;
WordApp.ConnectTo(WordDoc.Application);
WordApp.Visible := False;

//生成题头
WordApp.Selection.ParagraphFormat.Alignment := wdAlignParagraphCenter;
WordApp.Selection.Font.Name := '黑体';
WordApp.Selection.Font.Bold := 12;
WordApp.Selection.Font.Size :=18;
WordApp.Selection.TypeText('培训考试试卷' + #13);
WordApp.Selection.Font.Size :=14;
WordApp.Selection.TypeText('姓名: 考试日期:' +
FormatDateTime('yyyy-MM-dd', Date) + ' 分数:' + #13);
//随机抽题
WordApp.Selection.ParagraphFormat.Alignment := wdAlignParagraphLeft;
for i := 1 to TestNum do
begin
//生成一个随机数
rndNum := RandomRange(1, iRecCount);
blQuit := False;
//排除重复值
while not blQuit do
begin
for j := 1 to 100 do
if rndNum = TestArray[j] then
begin
rndNum := RandomRange(1, iRecCount);
blQuit := False;
Break;
end
else
blQuit := true;
end;

TestArray := rndNum;
if Locate('ID', rndNum, [loCaseInsensitive]) then
begin
WordApp.Selection.Font.Bold := 0;
WordApp.Selection.Font.Name := '黑体';
WordApp.Selection.Font.Size := 12;
WordApp.Selection.TypeText(IntToStr(i) + '.' +
FieldByName('Question').AsString + #13);
WordApp.Selection.Font.Name := '宋体';
WordApp.Selection.Font.Size := 11;
WordApp.Selection.TypeText(FieldByName('Options').AsString + #13);
AnswerArray := FieldByName('Answer').AsString;
end;
end;
//da.Close;
//生成答案
Nothing := 0;
WordApp.Selection.InsertBreak(Nothing);
WordApp.Selection.Font.Name := '黑体';
WordApp.Selection.ParagraphFormat.Alignment := wdAlignParagraphCenter;
WordApp.Selection.Font.Bold := 12;
WordApp.Selection.Font.Size :=18;
WordApp.Selection.TypeText('参考答案' + #13 + #13);
WordApp.Selection.ParagraphFormat.Alignment := wdAlignParagraphLeft;
WordApp.Selection.Font.Size :=12;
for i := 1 to TestNum do
begin
WordApp.Selection.Font.Bold := 16;
WordApp.Selection.Font.Size := 12;
if i <= 9 then
WordApp.Selection.TypeText(' ' + IntToStr(i) + '.' + UpperCase(AnswerArray) + ' ')
else
WordApp.Selection.TypeText(IntToStr(i) + '.' + UpperCase(AnswerArray) + ' ');
if i mod 5 = 0 then
WordApp.Selection.TypeText(#13 + #13);
end;
//生成答题卡
WordApp.Selection.InsertBreak(Nothing);
WordApp.Selection.Font.Bold := 16;
WordApp.Selection.Font.Size :=16;
WordApp.Selection.ParagraphFormat.Alignment := wdAlignParagraphCenter;
WordApp.Selection.TypeText('培训考试标准答题卡' + #13 + #13);
WordApp.Selection.ParagraphFormat.Alignment := wdAlignParagraphLeft;
WordApp.Selection.Font.Size :=10;
for i := 1 to 50 do
begin
if i <= 9 then
WordApp.Selection.TypeText(' ' + IntToStr(i) + '._____ ')
else
WordApp.Selection.TypeText(IntToStr(i) + '._____ ');
if i mod 5 = 0 then
WordApp.Selection.TypeText(#13 + #13);
end;
//将WordDoc文档对象的内容保存为DOC文档
WordDoc.SaveAs(FileName);
except
on E: Exception do
FErr := '创建Word文档错误,错误信息如下: ' + #13 + E.Message;
end;
finally
WordDoc.Disconnect;
WordDoc.Close;
WordApp.Quit;
WordApp.Disconnect;
end;
end;
 
感谢大家的积极参与,尤其是sundart的耐心指导
我希望这个话题能够继续
我也将仔细参考sundart的指教,我将我的源程序在网站上公布
(到时候 我会在这里公布 希望大家继续关注这个问题 感谢大家)
 
后退
顶部