У меня есть несколько документов Word, каждый из которых содержит несколько сотен страниц научных данных, которые включают в себя:
- Химические формулы (H2SO4 со всеми соответствующими индексами и индексами)
- Научные числа (показатели, отформатированные с использованием верхних индексов)
- Много математических уравнений. Написано с использованием редактора математических уравнений в Word.
Проблема в том, что хранение этих данных в Word неэффективно для нас. Поэтому мы хотим хранить всю эту информацию в базе данных (MySQL). Мы хотим преобразовать форматирование в LaTex.
Есть ли способ перебрать все индексы, нижние индексы и уравнения в документе Word, используя VBA?
Ответы:
Да, есть. Я бы рекомендовал использовать Powershell, так как он довольно хорошо обрабатывает файлы Word. Я думаю, что я буду самым простым способом.
Больше о Powershell против автоматизации Word здесь: http://www.simple-talk.com/dotnet/.net-tools/com-automation-of-office-applications-via-powershell/
Я копнул немного глубже, и я нашел этот скрипт PowerShell:
Сохраните его как .ps1 и начните с:
Он сохранит все файлы .doc из указанного каталога в виде файлов html. Итак, у меня есть файл документации, в котором у меня есть H2SO4 с подписками, и после преобразования в PowerShell получается следующее:
Как вы можете видеть, у подписчиков есть свои собственные теги в HTML, поэтому остается только проанализировать файл в bash или c ++, чтобы вырезать из тела в / body, изменить на LATEX и впоследствии удалить остальные HTML-теги.
Поэтому я разработал синтаксический анализатор в C ++ для поиска HTML-индекса и замены его на LATEX-индекс.
Код:
Для HTML-файла:
Выход:
Конечно, это не идеал, но угощение - это доказательство концепции.
источник
Вы можете извлечь XML непосредственно из любого офисного документа 2007 года. Это делается следующим образом:
word
подпапке и вdocument.xml
файле. Это должно содержать все содержимое документа.Я создал образец документа, и в тегах body я нашел это (обратите внимание, я быстро собрал это вместе, так что форматирование может быть немного неправильным):
Похоже, что
<w:t>
тег для текста<w:rPr>
- это определение шрифта, а<w:p>
новый абзац.Слово эквивалент выглядит так:
источник
Я искал подход, отличный от подхода mnmnc.
Мои попытки сохранить тестовый документ Word в формате HTML не увенчались успехом. В прошлом я обнаружил, что HTML, сгенерированный Office, настолько переполнен, что выделять нужные биты практически невозможно. Я обнаружил, что это имеет место здесь. У меня также была проблема с уравнениями. Слово сохраняет уравнения в виде изображений. Для каждого уравнения будет два изображения, одно с расширением WMZ и одно с расширением GIF. Если вы отображаете html-файл с помощью Google Chrome, уравнения выглядят хорошо, но не замечательно; внешний вид соответствует файлу GIF при отображении с помощью инструмента отображения / редактирования изображений, который может обрабатывать прозрачные изображения. Если вы отображаете HTML-файл с помощью Internet Explorer, уравнения выглядят идеально.
Дополнительная информация
Я должен был включить эту информацию в первоначальный ответ.
Я создал небольшой документ Word, который я сохранил как HTML. Три панели на изображении ниже показывают исходный документ Word, HTML-документ, отображаемый в Microsoft Internet Explorer, и HTML-документ, отображаемый в Google Chrome.
Как объяснялось ранее, разница между изображениями IE и Chrome является результатом того, что уравнения сохраняются дважды, один раз в формате WMZ и один раз в формате GIF. HTML слишком велик, чтобы показать здесь.
HTML, созданный макросом:
Который отображается как:
Я не пытался преобразовать уравнения, так как бесплатный MathType Software Development Kit, очевидно, включает в себя процедуры, которые конвертируют в LaTex
Код довольно простой, поэтому не так много комментариев. Спросите, если что-то неясно. Примечание: это улучшенная версия исходного кода.
источник
Самый простой способ сделать это - просто следующие строки в VBA:
Это найдет весь надстрочный текст. Если вы хотите что-то с этим сделать, просто вставьте это в метод. Например, чтобы найти слово «super» в верхнем индексе и превратить его в «super found», используйте:
источник