以编程方式读取Microsoft Word文档

5
我要求学生将他们的Microsoft Word作业提交到ColdFusion 10服务器。我希望编写一个错误检查器,检查常见错误,如页眉中没有页码、标题页上没有学校名称或学生姓名等。我指定了许多APA规则。例如:短语“Running head:”必须出现在第1页的页眉部分,而不是论文的其余部分。我为每个规则指定了一个点数值。
理想情况下,当学生提交作业时,该错误检查器应立即运行并告诉他们。这可能需要使用
parser.parseFromString(str, "text/xml");

但是,如果我能编写一个程序来检查错误并运行,那么这将有助于自动化我的分级。换句话说,可以使用Microsoft Access或Visual Studio。

但我不想这样做,因为我需要在服务器上安装Visual Studio,我认为这是不可行的。

最后一个选择是从服务器下载所有论文并本地运行程序,这比手动评分要好一步。


1
这里的问题是什么? - Aaron Kurtzhals
5
菲利普-别担心!像我这样的许多人来这里寻求帮助;然而,无论你走到哪里,总有一些人生活在批判中!忽略那些喧闹者。;) 这就是为什么允许你将评论标记为“冒犯/不建设性”(只需将鼠标悬停在评论左侧,您就会找到图标)。 - Alberto Ponte
1
这怎么能叫“懒惰”呢?我会称之为高效。 - Ian
1
我严重质疑关闭这个问题的人的语言理解能力,以及他们是否适合担任自己所任命的工作。这个问题非常清楚,这一点可以从它已经被回答的事实中得到证明。在关闭投票之前,它已经被回答了。投票重新开放。 - Adam Cameron
2
POI 在 Excel 中非常好用,但 Word 套件则不够成熟。根据您所描述的情况,您可能最好使用 VBA(如果在您的情况下可行)。 - Leigh
显示剩余7条评论
3个回答

2

我知道你已经找到了答案,但是我想提供一种从Word文档中提取数据的方法,那就是使用Apache POI。我知道你可以像这样获取页面的页眉:

fis = createObject("java","java.io.FileInputStream").init(ExpandPath('./mydoc.docx'));
document = createObject("java","org.apache.poi.xwpf.usermodel.XWPFDocument").init(fis);
fis.close();

policy = document.getHeaderFooterPolicy();
firstHeader = policy.getFirstPageHeader().getText();
defaultHeader = policy.getDefaultHeader().getText();

我知道这只是您请求的标题部分,根据文档,还有一种方法可以获取奇偶页面标头。 APACHE POI

有趣。有潜力。@abbottmv - Phillip Senn

2

我几年前使用VBA完成了这个任务,可以参考这篇文章。以下是解析文档每个段落的代码片段:

Public Sub ParseLines()
    Dim singleLine As Paragraph
    Dim lineText As String

    For Each singleLine In ActiveDocument.Paragraphs
        lineText = singleLine.Range.Text

        '// parse the text here...

    Next singleLine
End Sub

VBA是Visual Basic for Applications的简称,对吧?我想这个是在微软Access中使用的,而我也装有Access。 - Phillip Senn
是的,你说得对。你可以在包括Access在内的Microsoft Office产品中运行VBA。如果需要,你也可以使用PHP,请参考http://www.blogs.zeenor.com/it/read-ms-word-docx-ms-word-2007-file-document-using-php.html。 - Alberto Ponte
此外,如果您正在寻找某人为您撰写内容,那么有很多人可以通过Elance.com等网站为您提供服务。 - Alberto Ponte
1
文档中提到:“使用PageSetup对象的DifferentFirstPageHeaderFooter属性来指定不同的第一页。” 这正是我要找的,因为“使用不同的第一页”是很多学生忘记设置的事情之一。 VBA可能是最好的方法,因为它将文档视为一个对象。 - Phillip Senn
太好了,菲利普!祝你好运! - Alberto Ponte

1

谢谢 James。我总是忘记首先在 riaforge 上检查。我对 this.xmlPara 进行了 cfdump,并且它似乎有点不完整。例如,我需要知道他们正在使用的字体。你认为有获取这样的信息的可能吗?比如我没有看到关于页眉和页脚的信息。 - Phillip Senn
我已经有一段时间没有处理它了,但我认为问题在于docx没有一个干净的样式表机制。在制作转换器时,我只关注了某些事情,因为docx做了许多不干净地转换成HTML的事情。 - James A Mohler
我正在重新访问这个问题(新学期)。看起来Ray在他的博客文章中提到了:http://www.raymondcamden.com/index.cfm/2012/8/16/getAllTheTexts--simple-Apache-Tika-wrapper 但是我不知道如何安装Tika等相关的内容。 - Phillip Senn

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接