Eu tenho alguns documentos do Word, cada um contendo algumas centenas de páginas de dados científicos, que incluem:
- Fórmulas químicas (H2SO4 com todos os subscritos e sobrescritos adequados)
- Números científicos (expoentes formatados usando sobrescritos)
- Muitas equações matemáticas. Escrito usando o editor de equações matemáticas no Word.
O problema é que armazenar esses dados no Word não é eficiente para nós. Então, queremos armazenar todas essas informações em um banco de dados (MySQL). Queremos converter a formatação para LaTex.
Existe alguma maneira de percorrer todos os sub-scripts, sobrescritos e equações em um documento do Word usando o VBA?
Respostas:
Sim existe. Eu sugeriria usar o Powershell, pois ele lida com arquivos do Word muito bem. Eu acho que vou ser a maneira mais fácil.
Mais sobre automação do Powershell vs Word aqui: http://www.simple-talk.com/dotnet/.net-tools/com-automation-of-office-applications-via-powershell/
Eu cavei um pouco mais fundo e encontrei este script do PowerShell:
Salve-o como .ps1 e inicie-o com:
Ele salvará todo o arquivo .doc do diretório especificado, como os arquivos html. Então, eu tenho um arquivo doc no qual eu tenho o seu H2SO4 com subscritos e após a conversão do PowerShell, a saída é a seguinte:
Como você pode ver, os subscritos têm suas próprias tags em HTML; portanto, o que resta é analisar o arquivo em bash ou c ++ para cortar de corpo para / corpo, altere para LATEX e remova o restante das tags HTML posteriormente.
Então, eu desenvolvi um analisador em C ++ para procurar por subscrito HTML e substituí-lo por subscrito LATEX.
O código:
Para o arquivo html:
A saída é:
Não é ideal, é claro, mas tratar é como prova de conceito.
fonte
Você pode extrair o xml diretamente de qualquer documento do Office com mais de 2007. Isso é feito da seguinte maneira:
word
subpasta e odocument.xml
arquivo. Isso deve conter todo o conteúdo do documento.Eu criei um documento de amostra e, nas tags do corpo, encontrei isso (note que eu o juntei rapidamente, então a formatação pode ficar um pouco fora):
Parece que a
<w:t>
tag é para texto,<w:rPr>
é a definição da fonte e do<w:p>
é um novo parágrafo.A palavra equivalente é assim:
fonte
Eu tenho olhado para uma abordagem diferente daquela adotada pelo mnmnc.
Minhas tentativas de salvar um documento do Word de teste como HTML não foram bem-sucedidas. Descobri no passado que o HTML gerado pelo Office é tão cheio de palha que escolher os bits que você deseja é quase impossível. Eu descobri que esse é o caso aqui. Eu também tive um problema com equações. O Word salva equações como imagens. Para cada equação, haverá duas imagens, uma com uma extensão de WMZ e outra com uma extensão de GIF. Se você exibir o arquivo html no Google Chrome, as equações parecerão boas, mas não maravilhosas; a aparência corresponde ao arquivo GIF quando exibida com uma ferramenta de exibição / edição de imagens que pode lidar com imagens transparentes. Se você exibir o arquivo HTML no Internet Explorer, as equações parecerão perfeitas.
Informação adicional
Eu deveria ter incluído esta informação na resposta original.
Criei um pequeno documento do Word que salvei como HTML. Os três painéis da imagem abaixo mostram o documento original do Word, o documento HTML, conforme exibido pelo Microsoft Internet Explorer, e o documento HTML, como exibido pelo Google Chrome.
Como explicado anteriormente, a diferença entre as imagens do IE e do Chrome é o resultado das equações serem salvas duas vezes, uma vez no formato WMZ e outra no formato GIF. O HTML é muito grande para ser mostrado aqui.
O HTML criado pela macro é:
Que é exibido como:
Não tentei converter as equações desde o Kit de desenvolvimento de software gratuito MathType aparentemente inclui rotinas que se convertem em LaTex
O código é bastante básico, portanto não há muitos comentários. Pergunte se algo não está claro. Nota: esta é uma versão aprimorada do código original.
fonte
A maneira mais simples de fazer isso é apenas as seguintes linhas no VBA:
Isso encontrará todo o texto sobrescrito. Se você quiser fazer algo com ele, basta inseri-lo no método Por exemplo, para encontrar a palavra "super" em um sobrescrito e transformá-la em "super encontrado", use:
fonte