Saya memiliki beberapa dokumen Word, masing-masing berisi beberapa ratus halaman data ilmiah yang meliputi:
- Formula kimia (H2SO4 dengan semua subskrip & superskrip yang tepat)
- Bilangan ilmiah (eksponen diformat menggunakan superskrip)
- Banyak Persamaan Matematika. Ditulis menggunakan editor persamaan matematika di Word.
Masalahnya, menyimpan data ini di Word tidak efisien bagi kami. Jadi kami ingin menyimpan semua informasi ini dalam database (MySQL). Kami ingin mengonversi pemformatan ke LaTex.
Apakah ada cara untuk beralih melalui semua subkrip, superskrip dan persamaan dalam dokumen Word menggunakan VBA?
Jawaban:
Ya ada. Saya akan menyarankan menggunakan Powershell karena menangani file Word dengan cukup baik. Saya pikir saya akan menjadi cara termudah.
Lebih lanjut tentang Powershell vs otomatisasi Word di sini: http://www.simple-talk.com/dotnet/.net-tools/com-automation-of-office-applications-via-powershell/
Saya telah menggali sedikit lebih dalam dan saya menemukan skrip PowerShell ini:
Simpan sebagai .ps1 dan mulai dengan:
Ini akan menyimpan semua file .doc dari direktori yang ditentukan, sebagai file html. Jadi saya punya file doc di mana saya memiliki H2SO4 Anda dengan subskrip dan setelah konversi powershell hasilnya adalah sebagai berikut:
Seperti yang Anda lihat, subskrip memiliki tag sendiri dalam HTML sehingga satu-satunya yang tersisa adalah mengurai file dalam bash atau c ++ untuk memotong dari tubuh ke / tubuh, ubah ke LATEX dan hapus sisa tag HTML setelahnya.
Jadi saya telah mengembangkan parser di C ++ untuk mencari subscript HTML dan menggantinya dengan subscript LATEX.
Kode:
Untuk file html:
Outputnya adalah:
Tentu saja ini tidak ideal, tetapi memperlakukan adalah sebagai bukti konsep.
sumber
Anda dapat mengekstrak xml langsung dari dokumen kantor apa pun yang 2007+. Ini dilakukan dengan cara berikut:
word
subfolder dandocument.xml
file. Itu harus mengandung semua konten dokumen.Saya membuat dokumen sampel, dan di tag tubuh saya menemukan ini (perhatikan saya cepat-cepat menyatukannya, jadi pemformatannya mungkin sedikit salah):
Tampaknya
<w:t>
tag tersebut untuk teks,<w:rPr>
adalah definisi font dan<w:p>
paragraf baru.Kata setara terlihat seperti ini:
sumber
Saya telah melihat pendekatan yang berbeda dari yang ditempuh oleh mnmnc.
Upaya saya untuk menyimpan dokumen Word uji sebagai HTML tidak berhasil. Saya telah menemukan di masa lalu bahwa Office menghasilkan HTML sangat penuh dengan sekam yang memilih bit yang Anda inginkan hampir mustahil. Saya telah menemukan itu menjadi kasus di sini. Saya juga punya masalah dengan persamaan. Word menyimpan persamaan sebagai gambar. Untuk setiap persamaan akan ada dua gambar satu dengan ekstensi WMZ dan satu dengan ekstensi GIF. Jika Anda menampilkan file html dengan Google Chrome, persamaannya terlihat OK tapi tidak bagus; penampilannya cocok dengan file GIF saat ditampilkan dengan tampilan gambar / alat edit yang dapat menangani gambar transparan. Jika Anda menampilkan file HTML dengan Internet Explorer, persamaannya terlihat sempurna.
Informasi tambahan
Saya seharusnya memasukkan informasi ini dalam jawaban asli.
Saya membuat dokumen Word kecil yang saya simpan sebagai Html. Tiga panel pada gambar di bawah ini menunjukkan dokumen Word asli, dokumen Html seperti yang ditampilkan oleh Microsoft Internet Explorer dan dokumen Html seperti yang ditampilkan oleh Google Chrome.
Seperti yang dijelaskan sebelumnya, perbedaan antara gambar IE dan Chrome adalah hasil dari persamaan yang disimpan dua kali, sekali dalam format WMZ dan sekali dalam format GIF. Html terlalu besar untuk ditampilkan di sini.
Html yang dibuat oleh makro adalah:
Yang ditampilkan sebagai:
Saya belum mencoba untuk mengubah persamaan karena Kit Pengembangan Perangkat Lunak MathType gratis ternyata mencakup rutinitas yang dikonversi ke LaTex
Kode ini cukup mendasar sehingga tidak banyak komentar. Tanyakan apakah ada yang tidak jelas. Catatan: ini adalah versi yang disempurnakan dari kode asli.
sumber
Cara paling sederhana untuk melakukan ini adalah hanya baris berikut di VBA:
Ini akan menemukan semua teks superscript. Jika Anda ingin melakukan sesuatu dengannya, cukup masukkan ke dalam metode. Misalnya, untuk menemukan kata "super" dalam superscript, dan mengubahnya menjadi "super found" gunakan:
sumber