Mam dokument programu Word z wielu tabel. Czy ktoś wie, jak napisać makro do eksportu takich tabel do różnych arkuszy Excel?Makro eksportować tabele MS Word na arkuszach Excel
Odpowiedz
odpowiedzi pochodzą z: http://www.mrexcel.com/forum/showthread.php?t=36875
Oto kod, który odczytuje tabelę z programu Word w aktywnym arkuszu programu Excel. Monituje o dokument słowny, a także numer tabeli, jeśli program Word zawiera więcej niż jedną tabelę.
Sub ImportWordTable()
Dim wdDoc As Object
Dim wdFileName As Variant
Dim TableNo As Integer 'table number in Word
Dim iRow As Long 'row index in Excel
Dim iCol As Integer 'column index in Excel
wdFileName = Application.GetOpenFilename("Word files (*.doc),*.doc", , _
"Browse for file containing table to be imported")
If wdFileName = False Then Exit Sub '(user cancelled import file browser)
Set wdDoc = GetObject(wdFileName) 'open Word file
With wdDoc
TableNo = wdDoc.tables.Count
If TableNo = 0 Then
MsgBox "This document contains no tables", _
vbExclamation, "Import Word Table"
ElseIf TableNo > 1 Then
TableNo = InputBox("This Word document contains " & TableNo & " tables." & vbCrLf & _
"Enter table number of table to import", "Import Word Table", "1")
End If
With .tables(TableNo)
'copy cell contents from Word table cells to Excel cells
For iRow = 1 To .Rows.Count
For iCol = 1 To .Columns.Count
Cells(iRow, iCol) = WorksheetFunction.Clean(.cell(iRow, iCol).Range.Text)
Next iCol
Next iRow
End With
End With
Set wdDoc = Nothing
End Sub
To makro należy wprowadzić do programu Excel (nie słowa) i umieścić w module standardowym makro zamiast do modułów kod zdarzenia arkusza lub skoroszytu. Aby to zrobić, przejdź do VBA (klawiatura Alt-TMV), włóż moduł makr (Alt-IM) i wklej kod do okienka kodu. Uruchom makro z interfejsu programu Excel, tak jak każdy inny (Alt-TMM).
Jeśli dokument zawiera wiele tabel, jak byłoby w przypadku, jeśli strona 100+ stół jest właściwie osobny stolik na każdej stronie, to kod może być łatwo modyfikowany, aby przeczytać wszystkie tabele. Ale na razie mam nadzieję, że jest to jedna ciągła tabela i nie będzie wymagać żadnych modyfikacji.
Zachowaj doskonałe wyniki.
Damon
VBAexpert Excel Consulting (Moje inne życie: http://damonostrander.com)
Ta część kodu jest ten, który pętle przez każdy stół i kopiuje go do programu Excel. Być może możesz utworzyć obiekt arkusza roboczego, który dynamicznie aktualizuje arkusz roboczy, do którego się odwołujesz, używając numeru stołu jako licznika.
With .tables(TableNo)
'copy cell contents from Word table cells to Excel cells
For iRow = 1 To .Rows.Count
For iCol = 1 To .Columns.Count
Cells(iRow, iCol) = WorksheetFunction.Clean(.cell(iRow, iCol).Range.Text)
Next iCol
Next iRow
End With
End With
Nie mogę tego uruchomić. Podwójne "Koniec z" jest nieprawidłowe. – Wikis
Uwielbiam to miejsce, to jest absolutnie genialny, Damon (nawet jeśli zajęło mi ponad rok, aby znaleźć ...). Oto mój ostatni kod z dodatkiem pętli wszystkich tabel (począwszy od wybranej tabeli):
Option Explicit
Sub ImportWordTable()
Dim wdDoc As Object
Dim wdFileName As Variant
Dim tableNo As Integer 'table number in Word
Dim iRow As Long 'row index in Excel
Dim iCol As Integer 'column index in Excel
Dim resultRow As Long
Dim tableStart As Integer
Dim tableTot As Integer
On Error Resume Next
ActiveSheet.Range("A:AZ").ClearContents
wdFileName = Application.GetOpenFilename("Word files (*.doc),*.doc", , _
"Browse for file containing table to be imported")
If wdFileName = False Then Exit Sub '(user cancelled import file browser)
Set wdDoc = GetObject(wdFileName) 'open Word file
With wdDoc
tableNo = wdDoc.tables.Count
tableTot = wdDoc.tables.Count
If tableNo = 0 Then
MsgBox "This document contains no tables", _
vbExclamation, "Import Word Table"
ElseIf tableNo > 1 Then
tableNo = InputBox("This Word document contains " & tableNo & " tables." & vbCrLf & _
"Enter the table to start from", "Import Word Table", "1")
End If
resultRow = 4
For tableStart = 1 To tableTot
With .tables(tableStart)
'copy cell contents from Word table cells to Excel cells
For iRow = 1 To .Rows.Count
For iCol = 1 To .Columns.Count
Cells(resultRow, iCol) = WorksheetFunction.Clean(.cell(iRow, iCol).Range.Text)
Next iCol
resultRow = resultRow + 1
Next iRow
End With
resultRow = resultRow + 1
Next tableStart
End With
End Sub
Następny trick: wypracowanie sposobu wyodrębniania tabelę w tabeli ze Słowem ... i naprawdę chcę do?
TC
Wielkie dzięki. Musiałem zmienić Dla tableStart = 1 Aby tableTot na Dla tableStart = tableNo To tableTot, więc zaczyna się tam, gdzie kazałeś. Wprowadzono również modyfikację, aby każda tabela była przechowywana w oddzielnym skoroszycie programu Excel. – javydreamercsw
Dziękuję Damon i @Tim
zmodyfikowałem go otworzyć pliki docx, przeniósł arkusza jasną linię po sprawdzeniu na ucieczkę przez użytkownika.
Oto ostateczny kod:
Option Explicit
Sub ImportWordTable()
Dim wdDoc As Object
Dim wdFileName As Variant
Dim tableNo As Integer 'table number in Word
Dim iRow As Long 'row index in Excel
Dim iCol As Integer 'column index in Excel
Dim resultRow As Long
Dim tableStart As Integer
Dim tableTot As Integer
On Error Resume Next
wdFileName = Application.GetOpenFilename("Word files (*.docx),*.docx", , _
"Browse for file containing table to be imported")
If wdFileName = False Then Exit Sub '(user cancelled import file browser)
ActiveSheet.Range("A:AZ").ClearContents
Set wdDoc = GetObject(wdFileName) 'open Word file
With wdDoc
tableNo = wdDoc.tables.Count
tableTot = wdDoc.tables.Count
If tableNo = 0 Then
MsgBox "This document contains no tables", _
vbExclamation, "Import Word Table"
ElseIf tableNo > 1 Then
tableNo = InputBox("This Word document contains " & tableNo & " tables." & vbCrLf & _
"Enter the table to start from", "Import Word Table", "1")
End If
resultRow = 4
For tableStart = tableNo To tableTot
With .tables(tableStart)
'copy cell contents from Word table cells to Excel cells
For iRow = 1 To .Rows.Count
For iCol = 1 To .Columns.Count
Cells(resultRow, iCol) = WorksheetFunction.Clean(.cell(iRow, iCol).Range.Text)
Next iCol
resultRow = resultRow + 1
Next iRow
End With
resultRow = resultRow + 1
Next tableStart
End With
End Sub
- 1. Wyzwalanie makro MS Word po zapisaniu zdarzenia
- 2. Makro VBA w wielu arkuszach roboczych
- 3. Makro programu Word, przechowujące bieżący wybór (VBA)
- 4. Podświetlanie składni w MS Word
- 5. Usuń MS Word "HTML" PHP
- 6. tinyMCE Usuwanie znaczników MS Word
- 7. Suma konkretnych danych w oddzielnych arkuszach Excel
- 8. Tworzenie i edycja dokumentów MS-Word na serwerze Linux?
- 9. Makro Microsoft Word do podświetlania wielu słów
- 10. Pobierz tekst powyżej tabeli MS Word
- 11. Osadzanie wielu instancji MS Word w TOleContainer
- 12. Osiąganie jakości wydruku MS Word w C#
- 13. Wyodrębnianie komórki tabeli MS Word jako obrazu?
- 14. Zmiany w MS Word i RMarkDown
- 15. Podświetlanie składni w dokumencie MS Word
- 16. Konwertowanie komórki tabeli Ms Word na obraz przy użyciu java
- 17. Eksportować do programu Excel z repeatera?
- 18. Jak eksportować wiele tabel html do programu Excel?
- 19. Czy istnieje nieskończoność w arkuszach kalkulacyjnych?
- 20. Uruchamianie skryptów geolokalizacji JQuery w Arkuszach kalkulacyjnych programu Excel
- 21. Zmień nazwę arkusza programu Excel na makro VBA
- 22. Makro Microsoft Excel do uruchomienia programu Java
- 23. Excel VBA - Uruchom makro przed zapisaniem
- 24. WORD 2010 Makro do edycji nagłówków i stopek
- 25. funkcja MS Word, aby dołączyć zakres do dokumentu
- 26. Kopiowanie z dokumentów MS Word w polu tekstowym strony internetowej
- 27. Jak ustawić tekst RightToLeft w dokumencie MS Word w C#?
- 28. Przesyłanie plików MS Word z Android do .Net WCF?
- 29. W języku Java: zastąp ciąg znaków w pliku MS Word
- 30. Jak wstawić podział strony podczas tworzenia dokumentu MS Word
Dzięki za kod. Myślę, że mogę zmodyfikować twój kod, by przeczytać wszystkie tabele, ale jak utworzyć inny arkusz Excela dla każdej tabeli? – QLands
Te źródła nie zachowują formatowania oryginalnych tabel słów. Czy istnieje jakieś rozwiązanie? –
Jeśli kod wygeneruje błąd podczas analizowania tabeli, spróbuj umieścić ten kod w nowej linii po „Z wdDoc” linii: „On Error Resume Next”. Zasadniczo mówi się, że jeśli komórka wyrzuci możliwy do naprawienia błąd, wykonanie kodu nie zatrzyma się, a wznowi wykonywanie do następnej komórki. – Santhos