Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 从MS-Word中提取数据_Python_Vba_Ms Word_Pywin32 - Fatal编程技术网

Python 从MS-Word中提取数据

Python 从MS-Word中提取数据,python,vba,ms-word,pywin32,Python,Vba,Ms Word,Pywin32,我正在寻找一种从Word文件中提取/刮取数据到数据库的方法。我们的公司程序在MS Word文件中记录了与客户的会议记录,主要是由于历史和惯性 我希望能够将这些会议记录中的行动项目拉入数据库,以便我们可以从web界面访问它们,将它们转换为任务,并在完成时更新它们 以下哪种方法是最好的: VBA宏从Word内部创建CSV,然后上传到DB Word中连接到DB的VBA宏(如何从VBA连接到MySQL?) Python脚本通过Win32 COM然后上传到DB 最后一个对我很有吸引力,因为web界面是用D

我正在寻找一种从Word文件中提取/刮取数据到数据库的方法。我们的公司程序在MS Word文件中记录了与客户的会议记录,主要是由于历史和惯性

我希望能够将这些会议记录中的行动项目拉入数据库,以便我们可以从web界面访问它们,将它们转换为任务,并在完成时更新它们

以下哪种方法是最好的:

  • VBA宏从Word内部创建CSV,然后上传到DB
  • Word中连接到DB的VBA宏(如何从VBA连接到MySQL?)
  • Python脚本通过Win32 COM然后上传到DB
  • 最后一个对我很有吸引力,因为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中是否出现了某种字符代码?

    我想说,看看右边的相关问题-->
    对于python路线,似乎有一些不错的想法。

    嗯,我从来没有编写过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文档或经验,您应该能够将它们带到各个领域

    看看这篇文章:向下滚动到COMTools.py;这里有一些很好的例子


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

    将文件另存为xml怎么样。然后使用python或其他方法,将数据从word中提取出来并放入数据库

    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
    

    你可以使用OpenOffice。它可以打开word文件,也可以运行python宏。

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

    问题“用python从MS word文件中提取文本”是关于在linux环境中工作的。像antiword这样的工具在Windows下除了cygwin之外是不可用的,而这张海报愿意做Word的COM脚本。如果你没有什么好说的。。。对于这个问题,一些投票率较高的答案根本不是linux特有的。我想你错过了。谢谢你,乔尔!我想我可以用Left()去掉细胞末端的标记,但这对我来说并不优雅。另外,谢谢你的另一个指针。我不是专业的程序员,也绝对不是VBA大师。