Что нового

Как средствами Autoit вытащить из Word в html таблицу в очищенном виде?

Tapok

Новичок
Сообщения
204
Репутация
0
Как средствами Autoit вытащить из Word в html таблицу в очищенном виде?

В инете есть масса ссылок на онлайн программы, якобы вытаскивающие более-менее чисто, но на практике всегда или куча мусора или преобразование портит таблицу.
Может кто сталкивался с такой задачей, просьба подсказать, куда копать.

Пока я нашел один способ:
1) Сохраняем таблицу в pdf;
2) В Adobe Acrobat сохраняем pdf в html - получается более менее чистый код, который дополнительно очищаем StringRegExpReplace;
3) Вручную дорабатываем таблицу (кодировка сбивается, меняем на ANSI и UTF-8).

Код:
$a = FileRead(@ScriptDir & '\Таблица неправильных глаголов.html')
$b = StringRegExpReplace($a, '<td', @CRLF&'<td')
;$c = StringRegExpReplace($b, '(<td)( .+)(?<=">)(<p.+)', '\1>\3')
ConsoleWrite($b)
FileWrite(@ScriptDir & '\Таблица неправильных глаголов-2.html', $b)


Если напрямую убирать все "лишнее"
Код:
$c = StringRegExpReplace($b, '(<td)( .+)(?<=">)(<p.+)', '\1>\3')

теряется рамка и все сдвигается

В данном примере (doc файл) получается коряво, но многое зависит от самой таблицы
 

Вложения

  • Таблица неправильных глаголов.zip
    28.6 КБ · Просмотры: 5
  • Таблица неправильных глаголов-2.zip
    6.3 КБ · Просмотры: 2

Velmor

Новичок
Сообщения
27
Репутация
0
Добрый день.
У меня получился примерно такой результат. К сожалению, я почти не понимаю в регулярных выражениях, по этому выглядит скрипт так, если кто-то может исправить, буду благодарен.
По-моему, достаточно "чисто" получилось, все стили+форматирование удаляется, если нужно, вы можете вернуть, но по-моему, лучше стили задавать непосредственно через CSS, что бы не делать костыли в контенте. Вот только момент с тегом <p> внутри каждого <td>, может быть не совсем корректным, если вы хотите ставить разные стили на эти теги. Хотя всегда можно внести изменения в текущий код для удаления <p> внутри <td>. И еще, при сохранении файла как HTML на диске появляется папка с таким же названием, как и файл, в данном случае D:\Word_Test. В ней, помимо .xml и .thmx, будут лежать все картинки из документа и если они понадобятся - всегда можете взять их оттуда.
Код:
#include <Word.au3>
#include <FileConstants.au3>

$sInputFile = FileOpenDialog("Select .doc file", "D:\", "DOC, DOCX (*.doc;*.docx)", $FD_FILEMUSTEXIST)
$oWordApp = ObjCreate("Word.Application")
$oDoc = _Word_DocOpen($oWordApp, $sInputFile)
_Word_DocSaveAs($oDoc, "D:\Word_Test.html", $WdFormatHTML)
_Word_DocClose($oDoc)

$sString = FileOpen("D:\Word_Test.html", $FO_READ)
If $sString = -1 Then MsgBox(0, "Error", "File read error!")
$sFileRead = FileRead($sString)
$delInsideHTML = StringRegExpReplace($sFileRead, "<html(?s)(.*?)>", "<html>")
$delInsideHead = StringRegExpReplace($delInsideHTML, "<head>(?s)(.*?)</head>", "<head></head>")
$delInsideV = StringRegExpReplace($delInsideHead, "<!(?s)(.*?)-->", "")
$delInsideDiv = StringRegExpReplace($delInsideV, "<div(?s)(.*?)>", "<div>")
$delInsideSpan = StringRegExpReplace($delInsideDiv, "<span(?s)(.*?)>", "<span>")
$delSpanPlusSpases = StringRegExpReplace($delInsideSpan, "<span>(?s)(.*?)</span>", "\1")
$delInsideTable = StringRegExpReplace($delSpanPlusSpases, "<table(?s)(.*?)>", "<table>")
$delInsideTd = StringRegExpReplace($delInsideTable, "<td(?s)(.*?)>", "<td>")
$delInsideTr = StringRegExpReplace($delInsideTd, "<tr(?s)(.*?)>", "<tr>")
$delInsideO_P = StringRegExpReplace($delInsideTr, "<o:p>(?s)(.*?)</o:p>", "\1")
$delInsideP = StringRegExpReplace($delInsideO_P, "<p(?s)(.*?)>", "<p>")
$delSpan = StringRegExpReplace($delInsideP, '<span>(.*?)</span>', '\1')
$delInsidebody = StringRegExpReplace($delSpan, "<body(?s)(.*?)>", "<body>")
$result = StringReplace($delInsidebody, "<![endif]>", "")
FileClose($sString)


$newFile = FileOpen("D:\temp_21.txt", 130)
If $newFile = -1 Then MsgBox(0, "Error", "File read error!")
FileWrite($newFile, $result)
FileClose($newFile)
 
Верх