【问题标题】:Extract tables from Word (.docx) to Excel将表格从 Word (.docx) 提取到 Excel
【发布时间】:2021-03-05 09:17:03
【问题描述】:

我正在尝试提取 Word 文件中存在的表格并将它们复制/粘贴到 Excel 文件中。我尝试使用“while...Wend”编写 VBA 宏来执行此操作,但程序在 While WordDoc.Table(i) <> 0 中显示错误我不知道为什么,我不是经验丰富的 VBA 编码器。如果您有解决方案,请帮助我!

Sub copieTableauWordVersExcel()
'nécéssite d'activer la référence Microsoft Word xx.x Object Library

Dim WordApp As Word.Application
Dim WordDoc As Word.Document
Dim Fichier As String
Dim i As Integer

'le document Word est supposé fermé avant le lancement de la macro
Fichier = "C:\Users\429093\Desktop\ME.docx" 'adapter le chemin
Set WordApp = CreateObject("Word.Application") 'creation session Word

WordApp.Visible = False 'pour que word reste masqué pendant l'opération
Set WordDoc = WordApp.Documents.Open(Fichier) 'ouverture du fichier Word

i = 1

While WordDoc.Table(i) <> 0
   WordDoc.Tables(i).Range.Copy 'copie du tableau Word
   'dans Word chaque tableau est indexé
   'ici l'index est à 2 car le premier index correspond au cadre autour du titre du
   'document Word
   i = i + 1
Wend

Range("A1").Select
ActiveSheet.Paste 'collage des données dans Excel
WordDoc.Close False 'ferme le document Word sans sauvegarde
WordApp.Quit 'ferme l'application Word

End Sub

【问题讨论】:

  • 如果问题不清楚,请问我
  • 对于初学者来说,它应该是.Tables(i)。但是表的集合返回一个表,而不是一个数字,所以你不应该将它与零进行比较。
  • @KostasK。好的,但我的意思是0,当没有更多的表要复制时它会停止......在这种情况下我该怎么办?
  • 尝试 For 循环:For i = 0 To WordDoc.Tables.Count - 1 [...] Next i
  • 解决方案是否需要使用VBA?使用 R 可以很容易地完成它,其中有一个名为“docxtractr”的包。如果感兴趣,我会添加更多。

标签: excel vba ms-word


【解决方案1】:

您的代码有两个问题。首先,您没有获取文档中的所有表格,两个您只需将结果粘贴到 Excel 文档中的一个单元格中。这意味着即使您有一个适当的循环来执行和复制所有表,它们也会被粘贴到工作表中的另一个之上。

试试这样的...

For i = 1 to WordDoc.Tables.Count
    WordDoc.Tables(i).Range.Copy
    Range("A" & i).Select
    ActiveSheet.Paste
Next

【讨论】:

  • 您好,首先我要感谢大家的帮助。所以,我尝试根据您的建议修改我的代码,最后我得到了以下代码:(我使用循环 if 复制我所有的表格都在另一个之下)但它不能很好地工作(我的目标是将我在word文件中的所有表格复制到我的excel文件中)
  • Sub FF() Dim WordApp As Word.Application Dim WordDoc As Word.Document Dim Fichier As String Dim i As Integer Dim j As Integer Fichier = "ME\ME1.docx" Set WordApp = CreateObject( "Word.Application") WordApp.Visible = False Set WordDoc = WordApp.Documents.Open(Fichier) j = 1 If Cells(j, 1).Value = 0 Then For i = 1 To WordDoc.Tables.Count WordDoc.Tables (i).Range.Copy Cells(j, 1).Select ActiveSheet.Paste Next Else: j = j + 1 End If WordDoc.Close False WordApp.Quit End Sub
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-08-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-02-08
  • 2011-04-03
  • 1970-01-01
相关资源
最近更新 更多