从MS Word中提取数据

6
我正在寻找一种从Word文件中提取/抓取数据到数据库的方法。由于历史和惯性,我们公司记录与客户的会议纪要大多以MS Word文件的形式呈现。
我希望能够将这些会议纪要中的行动项提取到数据库中,以便我们可以从Web界面访问它们,将其转化为任务并在完成后更新它们。
哪种方式最好:
1. 在Word内部使用VBA宏创建CSV文件,然后上传到数据库? 2. 在Word中使用具有DB连接的VBA宏(如何从VBA连接到MySQL)? 3. 使用win32com的Python脚本,然后上传到数据库?
对我来说,最后一个方案很有吸引力,因为Web界面是使用Django构建的,但我从未使用过win32com或尝试过用python脚本编写Word。
编辑:我已经开始使用VBA提取文本,因为它使处理Word对象模型变得更容易。不过,我遇到了一个问题-所有文本都在表格中,当我从所需单元格中提取字符串时,每个字符串的末尾都会出现奇怪的小方框字符。我的代码看起来像:
sFile = "D:\temp\output.txt"
fnum = FreeFile
Open sFile For Output As #fnum

num_rows = Application.ActiveDocument.Tables(2).Rows.Count

For n = 1 To num_rows
    Descr = Application.ActiveDocument.Tables(2).Cell(n, 2).Range.Text
    Assign = Application.ActiveDocument.Tables(2).Cell(n, 3).Range.Text
    Target = Application.ActiveDocument.Tables(2).Cell(n, 4).Range.Text
    If Target = "" Then
        ExportText = ""
    Else
        ExportText = Descr & Chr(44) & Assign & Chr(44) & _
            Target & Chr(13) & Chr(10)
        Print #fnum, ExportText
    End If
Next n

Close #fnum

小的控制字符框是怎么回事?是从Word传来的某种字符代码吗?
6个回答

4
Word在表格中的每个文本单元格末尾都会放置一个标记。它的作用就像段落中的段落结束标记一样,用于存储整个段落的格式。只需使用Left()函数将其剥离即可,例如:
 Left(Target, Len(Target)-1))

顺便提一下,可以使用

的替代方法是
 num_rows = Application.ActiveDocument.Tables(2).Rows.Count
 For n = 1 To num_rows
      Descr = Application.ActiveDocument.Tables(2).Cell(n, 2).Range.Text

试试这个:

 For Each row in Application.ActiveDocument.Tables(2).Rows
      Descr = row.Cells(2).Range.Text

谢谢Joel!我已经想出可以使用Left()函数来去除单元格末尾标记,但那种方法似乎不够优雅。还有,感谢你提供的其他提示。我不是专业程序员,也绝对不是VBA大师。 - Technical Bard

1
你可以使用OpenOffice。它可以打开Word文件,也可以运行Python宏。

1

好的,我从未编写过Word脚本,但是使用win32com进行简单操作相当容易。类似这样:

from win32com.client import Dispatch
word = Dispatch('Word.Application')
doc = word.Open('d:\\stuff\\myfile.doc')
doc.SaveAs(FileName='d:\\stuff\\text\\myfile.txt', FileFormat=?)  # not sure what to use for ?

这还没有经过测试,但我认为类似这样的代码只是打开文件并将其保存为纯文本(如果您能找到正确的文件格式) - 然后您可以将文本读入Python中,并从那里进行操作。直接获取文件内容的方法可能也存在,但我不知道它在哪里; 查找文档可能很困难,但如果您有VBA文档或经验,应该能够轻松掌握。

看看以前的这篇文章:http://mail.python.org/pipermail/python-list/2002-October/168785.html 向下滚动到COMTools.py; 那里有一些很好的例子。

您还可以运行makepy.py(pythonwin发行版的一部分),以生成可用COM函数的Python“签名”,然后将其作为一种文档查看。


0

我建议看看右边的相关问题 --> 最上面那个似乎有一些很好的想法,可以采用Python路线。


“在Python中从MS Word文件中提取文本”的问题涉及在Linux环境下工作。像antiword这样的工具在Windows下除了cygwin之外并不可用,而此帖子的作者愿意使用Word的COM脚本编程。 - John Fouhy
如果你没有什么好的话要说…… 那个问题中一些得票较高的答案根本不是针对Linux的。我猜你错过了那些答案。 - Dave Neeley

0

将文件保存为xml格式,然后使用Python或其他工具从Word中提取数据并存入数据库,这个方案怎么样?


0

可以通过编程将Word文档保存为HTML,并将其中包含的表格导入Access。这只需要很少的努力。


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