首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从word文档生成有组织的excel电子表格

从word文档生成有组织的excel电子表格
EN

Stack Overflow用户
提问于 2017-02-06 16:55:02
回答 2查看 251关注 0票数 2

我有微软的文件,我们想要转移到excel。每个句子都需要分开,然后粘贴到excel中的下一个合适的单元格中。这些句子也需要作为标题、要求或信息进行分析。我将重现典型的单词格式。

代码语言:javascript
复制
2.3.4     Lightening Transient Response 
          The device shall meet spec 24532. Voltage must resemble figure.
          Figure 1.

这意味着

代码语言:javascript
复制
<numbering>      <Heading>
                 <Requirements/information>

在excel中,这几乎就是我想要查看的文档,除了第二个要求句应该排在前面的需求句的后面。

代码语言:javascript
复制
2.3.4   | Lightening Transient Response     | Heading
        | The device shall meet spec 24532. | Requirement
        |Voltage must resemble figure       | Requirement
        |figure  1                          | Informational

我在python中使用openxl和docx模块尝试了这个项目。我有代码可以进入单词,得到句子,然后代码可以分析句子,我正在从段落中检索运行。我有问题,因为不是所有的句子回来是因为文字文件是如何格式化的。我通常只会把标题拿回来。标题号不存储在运行中。标题下的需求存储在表中。我编写了一些代码来进入表格,从单元格中提取文本,因此这是获得需求的一种方法,但是代码片段会产生问题(连续三次给我相同的句子)。

我在寻找其他可能的方法来做这件事。我在想一个格式转换。已经提到了XML,然后也可以使用pdf和pythons模块。

如有任何意见或建议,将不胜感激。

-Chris

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-02-06 18:24:04

XML将变得更难,而不是更容易。你比你想象的要近。我建议分别解决每个问题,直到你解决为止。

表中的句子三次出现问题是因为合并了单元格。python在表上的工作方式是由x行和y列组成的底层表布局。如果并排合并两个单元格,则这两个单元格的结果相同。您可以检测到这是比较这两个单元格是否相等。大致类似于“如果this_cell == last_cell跳过这个单元格”。

没有办法解决航向问题。标题数字只存在于正在运行的Word实例中;它们是在显示(或打印)时生成的。要获得这些数据,您需要使用相同的规则来生成自己的数字。因此,您需要跟踪您所通过的标题的数量等,并形成您自己的点分隔编号。

票数 0
EN

Stack Overflow用户

发布于 2017-02-28 22:19:04

你为什么要用Python来做这个?只需使用VBA,因为您正在使用Excel和Word。

像这样的事情应该能让你离你想去的地方很近。可能需要调整一下..。

代码语言:javascript
复制
Sub Demo()
Dim wdApp As Word.Application
Set wdApp = Word.Application
Dim wdDoc As Word.Document
Set wdDoc = wdApp.ActiveDocument
wdDoc.Range.Copy

ActiveSheet.Paste Destination:=ActiveSheet.Range("A1")
With ActiveSheet
.Paste Destination:=Range("A" & .Cells.SpecialCells(xlCellTypeLastCell).Row + 1)
End With

Set myRange = Range("A1:A100")
For i = 1 To myRange.Rows.Count

    If InStr(myRange.Cells(i, "A").Value, "Voltage") > 0 Then
        myRange.Cells(i, "A").Offset(1, 0).Select
        ActiveCell.EntireRow.Insert
        ActiveCell.Offset(-1, 0).Select
        If InStr(myRange.Cells(i, "A").Value, "Voltage") > 0 Then
            position1 = InStr(1, ActiveCell.Value, "Voltage")
            myRange.Cells(i + 1, "A").Value = Mid(ActiveCell.Value, position1, 99)
            ActiveCell.Value = Left(ActiveCell.Value, position1 - 2)
            i = i + 2
        End If
    End If

Next i


End Sub

所以,从Word文档中复制文本,它应该是开放的和活动的,这样就可以了。还有其他方法可以做到这一点。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42073149

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档