for Holly:我在做一个基于Windows平台的考试系统,因为要考Word97和Excel97,涉及到 Word97和Excel97的评分,所以要做一个评分程序,希望能读取到Word97文档中的任意指定 一段文字的字体,字型,字号,背景,以及制表处理中的表格的行列,行列中的内容等等。 不知您能否给予我一点指点?谢谢。 For dyw: 您老兄说的可能错不了,我也正是您这么想,但问题就是如何熟悉Word和Excel的 编程模型。请您多多指点。 For mastercat等:我不仅想到过VB,而且也用VB实现了,现在用delphi也基本实现,但考虑 到由于对多个考生同时评分,要讲效率和时间,所以我还是想用VC实现。再说我整个考试系统 都用VC实现,我也想用VC来做评分程序。 For Oldworm: 我自己也想到过老兄这种方法,也相信它一定可以实现,但有以下几点顾虑: 1. 用html方式会不会显得不太地道?是否会有个别地方不便考查?(我没试过,也没太多 小想,不知是否应该考虑) 2. 会不会影响执行时间和效率。 3. 学生的错误答案(比如多写空格和回车或空白)会不会增加评分的难度? 4. 标准答案将采用什么形式?--标准样本?如何使更换试题和标准答案方便快捷且安全性高, (难泄密)。 但不管如何,oldworm兄确实提供了一种行之有效的方法。我在此表示诚挚感谢。 欢迎大家继续展开讨论。期待大家的解答!谢谢大家。
这是我写的办公自动化考试的一段代码。希望能对你有所帮组。用vc写也一样。只是代码太雍长了。去过 msdn.microsoft.com ? 那里有你想要的一切。 1 用html的方式我个人认为不好, 2 执行时间和效率主要消耗不在vb或vc的程序中,主要在ole时。 3 这是个非常困难的问题。只能近似的完成。首先将过滤空白,回车,换行等非有效字符。再将两段文字进行模糊判断(分成若干段分别比较)。 4 无法回答。 Public Sub StartWord() Set w_App = CreateObject("Word.Application") With w_App .Visible = False Set w_Doc = .Documents.Add g_IsWordOpen = True End With End SubPublic Sub EndWord() If IsWordOpen() = True Then w_Doc.saved = True w_Doc.Close Set w_Doc = Nothing w_App.quit Set w_App = Nothing End If Unload FormSwitch End SubPublic Sub CheckWord1() On Error Resume Next Dim ob As Object Set w_Range = w_P2.range score = 0 Set ob = w_P1 Set ob = w_P2
With w_P1 If .Alignment = wdAlignParagraphcenter Then score = score + 1 With .range.Font If .Bold = True Then score = score + 1 If .colorIndex = wdColorBlue Then score = score + 1 If .Name = "黑体" Then score = score + 1 If .size = 16 Then score = score + 1 End With End With
With w_P2 If .firstlineindent = 24.1 Then score = score + 2 If .range.Font.size = 14 Then score = score + 1 End With
'C.将正文分成三栏,中间用分隔线分开。 w_Range.End = 50 w_Range.Start = 80 With w_Range.Sections(1).PageSetup.TextColumns If .count = 3 Then score = score + 2 If .LineBetween = True Then score = score + 2 End With
w_Range.End = w_P2.range.End w_Range.Start = w_P1.range.End scoreT = 0 For i = 1 To 5 w_Range.Find.Execute ("企业") With w_Range.Font If .Name = "黑体" Then scoreT = scoreT + 1 If .colorIndex = wdColorRed Then scoreT = scoreT + 1 If .Underline = wdUnderlineWavy Then scoreT = scoreT + 1 End With w_Range.Start = w_Range.End + 1 w_Range.End = w_P2.range.End Next i a = 8 - Abs(15 - scoreT) If a < 0 Then a = 0 score = score + a End SubPublic Function CutBlank(ByVal s As String) As String Dim l As Long Dim s1, s2, s3 As String CutBlank = "": s2 = Chr(13): s3 = Chr(10) l = Len(s) For i = 1 To l s1 = Mid(s, i, 1) If s1 <> " " And s1 <> s2 And s1 <> s3 Then CutBlank = CutBlank + s1 Next i End Function
to shaohua: 你的问题是无法在帖子里直接解决的,我虽然有文件格式的资料(以前的MSDN),但我自己没有写过,虽然有朋友写过,但属于商业机密,我只能讲讲大概的方法!你需要自己看资料,别人不可能直接给你最后的答案,而且据我所知,这个过程不是几天的功夫,是要上月的时间!还要看你的有关OLE的基础和英文基础!
WORD和EXCEL的文档主要都是复合文档的标准化存储格式,有各种文档流控制,如果你要读取各种文档内的属性,只能利用OLE的一些接口将数据流读取出来,然后根据文档的描述将各个流内部的数据属性一个一个读出,这个程序还是相当麻烦的!
我保证你的问题能得到解答!
我很想要您的代码,能否EMail给我?谢谢.我的EMail: [email protected]或[email protected]
多谢多谢.
for Holly: 我的思路和你正是一样,也同样觉得颇为麻烦,但不知您能否提供一点帮助?多谢多
谢!
for RedFire: 我想用宏也许不太可行,不过我还没太懂您的思路,不知您能否进一步指点,或讲
明您的思路?多谢多谢!
感谢和期盼大家的讨论。
如有需要,请E_Mail给我:[email protected]
怎么样,是不是够简单,要驱动word作一下Save As操作是很简单的,分析html结构也是很简单的,一个复杂的问题,分成两个简单的问题,是不是OK了。
什么时候代码写好了能不能给我共享一下,我会很感激的,先吹一下牛,我的Vc水平还是很高的,不过如果让我去写这个东西现在没有时间,但如果让我去看我还是愿意的。
能否说一下你的应用是什么,这也在相当的程度上决定了使用的方案!
Word97和Excel97的评分,所以要做一个评分程序,希望能读取到Word97文档中的任意指定
一段文字的字体,字型,字号,背景,以及制表处理中的表格的行列,行列中的内容等等。
不知您能否给予我一点指点?谢谢。
For dyw: 您老兄说的可能错不了,我也正是您这么想,但问题就是如何熟悉Word和Excel的
编程模型。请您多多指点。
For mastercat等:我不仅想到过VB,而且也用VB实现了,现在用delphi也基本实现,但考虑
到由于对多个考生同时评分,要讲效率和时间,所以我还是想用VC实现。再说我整个考试系统
都用VC实现,我也想用VC来做评分程序。
For Oldworm: 我自己也想到过老兄这种方法,也相信它一定可以实现,但有以下几点顾虑:
1. 用html方式会不会显得不太地道?是否会有个别地方不便考查?(我没试过,也没太多
小想,不知是否应该考虑)
2. 会不会影响执行时间和效率。
3. 学生的错误答案(比如多写空格和回车或空白)会不会增加评分的难度?
4. 标准答案将采用什么形式?--标准样本?如何使更换试题和标准答案方便快捷且安全性高,
(难泄密)。
但不管如何,oldworm兄确实提供了一种行之有效的方法。我在此表示诚挚感谢。
欢迎大家继续展开讨论。期待大家的解答!谢谢大家。
1 用html的方式我个人认为不好,
2 执行时间和效率主要消耗不在vb或vc的程序中,主要在ole时。
3 这是个非常困难的问题。只能近似的完成。首先将过滤空白,回车,换行等非有效字符。再将两段文字进行模糊判断(分成若干段分别比较)。
4 无法回答。
Public Sub StartWord()
Set w_App = CreateObject("Word.Application")
With w_App
.Visible = False
Set w_Doc = .Documents.Add
g_IsWordOpen = True
End With
End SubPublic Sub EndWord()
If IsWordOpen() = True Then
w_Doc.saved = True
w_Doc.Close
Set w_Doc = Nothing
w_App.quit
Set w_App = Nothing
End If
Unload FormSwitch
End SubPublic Sub CheckWord1()
On Error Resume Next
Dim ob As Object
Set w_Range = w_P2.range
score = 0
Set ob = w_P1
Set ob = w_P2
With w_P1
If .Alignment = wdAlignParagraphcenter Then score = score + 1
With .range.Font
If .Bold = True Then score = score + 1
If .colorIndex = wdColorBlue Then score = score + 1
If .Name = "黑体" Then score = score + 1
If .size = 16 Then score = score + 1
End With
End With
With w_P2
If .firstlineindent = 24.1 Then score = score + 2
If .range.Font.size = 14 Then score = score + 1
End With
'C.将正文分成三栏,中间用分隔线分开。
w_Range.End = 50
w_Range.Start = 80
With w_Range.Sections(1).PageSetup.TextColumns
If .count = 3 Then score = score + 2
If .LineBetween = True Then score = score + 2
End With
w_Range.End = w_P2.range.End
w_Range.Start = w_P1.range.End
scoreT = 0
For i = 1 To 5
w_Range.Find.Execute ("企业")
With w_Range.Font
If .Name = "黑体" Then scoreT = scoreT + 1
If .colorIndex = wdColorRed Then scoreT = scoreT + 1
If .Underline = wdUnderlineWavy Then scoreT = scoreT + 1
End With
w_Range.Start = w_Range.End + 1
w_Range.End = w_P2.range.End
Next i
a = 8 - Abs(15 - scoreT)
If a < 0 Then a = 0
score = score + a
End SubPublic Function CutBlank(ByVal s As String) As String
Dim l As Long
Dim s1, s2, s3 As String
CutBlank = "": s2 = Chr(13): s3 = Chr(10)
l = Len(s)
For i = 1 To l
s1 = Mid(s, i, 1)
If s1 <> " " And s1 <> s2 And s1 <> s3 Then CutBlank = CutBlank + s1
Next i
End Function
直接用他,如果不想用delphi,看他的vcl相关组件的包装类(我vc中的一部分空间就是从delphi 抄的)。
你的问题是无法在帖子里直接解决的,我虽然有文件格式的资料(以前的MSDN),但我自己没有写过,虽然有朋友写过,但属于商业机密,我只能讲讲大概的方法!你需要自己看资料,别人不可能直接给你最后的答案,而且据我所知,这个过程不是几天的功夫,是要上月的时间!还要看你的有关OLE的基础和英文基础!