VBでワード文書をHTMLに変換
投稿者 るきお  ()
投稿日時
2007/9/2 05:41:00
すさんさん、こんにちは。
>Visual Basicを使ってワード文書に書かれた翻訳内容を読み取り、それをHTMLに変換
実際のところこれだけではどのような手法かわからないです。
VBを使えばWordの制御はほぼ完全に可能なので、Wordの標準機能を使用してWordのドキュメントをhtml形式に変換することは可能です。
それだけのことでしたら次のようにします。
Dim WordApp As New Microsoft.Office.Interop.Word.Application
Dim Doc As Microsoft.Office.Interop.Word.Document
Dim FileName As String = "C:\Test\Test.docx"
Dim HTMLFileName As String = IO.Path.ChangeExtension(FileName, ".htm")
Doc = WordApp.Documents.Open(FileName)
Doc.SaveAs(htmlfilename, Microsoft.Office.Interop.Word.WdSaveFormat.wdFormatHTML)
Doc.Close()
WordApp.Quit()
VBのバージョンが書き込まれていなかったので、VB2005を前提にしています。
このサンプルを動作させるためにはMicrosoft Word x.x Object Libraryへの参照設定が必要です。
単純に変換するだけでなく、なんらかの処理を介在させて、カスタマイズした形でhtml化するには自分で文書の構造を解析して出力するプログラムを書く必要があります。
次の投稿にそのもっとも単純なサンプルを掲載します。
これも上記と同じ参照設定が必要です。
これらの情報はそのまま実際の業務にすぐに使えるわけではありませんが、手がかりとしては十分なはずです。
逆にこの手がかりを利用できるだけのスキルがなければその仕事はお断りした方がいいかもしれません。
なお、サンプルにはCOMオブジェクトの解放部分は記述していませんので別途追加しておいてください。
>Visual Basicを使ってワード文書に書かれた翻訳内容を読み取り、それをHTMLに変換
実際のところこれだけではどのような手法かわからないです。
VBを使えばWordの制御はほぼ完全に可能なので、Wordの標準機能を使用してWordのドキュメントをhtml形式に変換することは可能です。
それだけのことでしたら次のようにします。
Dim WordApp As New Microsoft.Office.Interop.Word.Application
Dim Doc As Microsoft.Office.Interop.Word.Document
Dim FileName As String = "C:\Test\Test.docx"
Dim HTMLFileName As String = IO.Path.ChangeExtension(FileName, ".htm")
Doc = WordApp.Documents.Open(FileName)
Doc.SaveAs(htmlfilename, Microsoft.Office.Interop.Word.WdSaveFormat.wdFormatHTML)
Doc.Close()
WordApp.Quit()
VBのバージョンが書き込まれていなかったので、VB2005を前提にしています。
このサンプルを動作させるためにはMicrosoft Word x.x Object Libraryへの参照設定が必要です。
単純に変換するだけでなく、なんらかの処理を介在させて、カスタマイズした形でhtml化するには自分で文書の構造を解析して出力するプログラムを書く必要があります。
次の投稿にそのもっとも単純なサンプルを掲載します。
これも上記と同じ参照設定が必要です。
これらの情報はそのまま実際の業務にすぐに使えるわけではありませんが、手がかりとしては十分なはずです。
逆にこの手がかりを利用できるだけのスキルがなければその仕事はお断りした方がいいかもしれません。
なお、サンプルにはCOMオブジェクトの解放部分は記述していませんので別途追加しておいてください。
投稿者 るきお  ()
投稿日時
2007/9/2 05:41:00
'▼Wordのドキュメントから文章を取得
Dim WordApp As New Microsoft.Office.Interop.Word.Application
Dim Doc As Microsoft.Office.Interop.Word.Document
Dim FileName As String = "C:\Test\Test.docx"
Dim Contents As String
Doc = WordApp.Documents.Open(FileName)
Contents = Doc.Range.Text
Doc.Close()
WordApp.Quit()
'▼HTMLに保存
Dim HTMLFileName As String = IO.Path.ChangeExtension(FileName, ".htm")
Dim Writer As New IO.StreamWriter(HTMLFileName, False)
Writer.WriteLine("<HTML>" & vbNewLine)
Writer.WriteLine("<HEAD>" & vbNewLine)
Writer.WriteLine("<meta http-equiv=""Content-Type"" content=""text/html; charset=utf-8"">" & vbNewLine)
Writer.WriteLine("</HEAD>" & vbNewLine)
Writer.WriteLine("<BODY>" & vbNewLine)
Contents = Contents.Replace("<", "<")
Contents = Contents.Replace(">", ">")
Writer.WriteLine(Contents & vbNewLine)
Writer.WriteLine("</BODY></HTML>" & vbNewLine)
Writer.Close()
MsgBox(HTMLFileName & "を作成しました。")
Dim WordApp As New Microsoft.Office.Interop.Word.Application
Dim Doc As Microsoft.Office.Interop.Word.Document
Dim FileName As String = "C:\Test\Test.docx"
Dim Contents As String
Doc = WordApp.Documents.Open(FileName)
Contents = Doc.Range.Text
Doc.Close()
WordApp.Quit()
'▼HTMLに保存
Dim HTMLFileName As String = IO.Path.ChangeExtension(FileName, ".htm")
Dim Writer As New IO.StreamWriter(HTMLFileName, False)
Writer.WriteLine("<HTML>" & vbNewLine)
Writer.WriteLine("<HEAD>" & vbNewLine)
Writer.WriteLine("<meta http-equiv=""Content-Type"" content=""text/html; charset=utf-8"">" & vbNewLine)
Writer.WriteLine("</HEAD>" & vbNewLine)
Writer.WriteLine("<BODY>" & vbNewLine)
Contents = Contents.Replace("<", "<")
Contents = Contents.Replace(">", ">")
Writer.WriteLine(Contents & vbNewLine)
Writer.WriteLine("</BODY></HTML>" & vbNewLine)
Writer.Close()
MsgBox(HTMLFileName & "を作成しました。")
投稿者 すさん  ()
投稿日時
2007/9/2 07:32:00
こんにちは。
早速お返事いただいて、コードまで書いていただき(__;すごい感謝しています。どちらも試してみたのですが、エラーになってしまい、いろいろウェブを検索してみたのですが、糸口がみつからず・・・戻ってきました。
Microsoft.Office.Interop.Word._ApplicationとMicrosoft.Office.Interop.Word.Documentなのですが、「型""が定義されていません」と出ます。これは私のVB 2005の設定で何かが間違っているのでしょうか。
いまのところほぼコピーしてファイル名を変えただけですが、2番目のコードはこのようになっています。
Public Class Form1
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
'▼Wordのドキュメントから文章を取得
Dim WordApp As New Microsoft.Office.Interop.Word._Application
Dim Doc As Microsoft.Office.Interop.Word.Document
Dim FileName As String = "C:\Documents and Settings\jennifer\Test.docx"
Dim Contents As String
Doc = WordApp.Documents.Open(FileName)
Contents = Doc.Range.Text
Doc.Close()
WordApp.Quit()
'▼HTMLに保存
Dim HTMLFileName As String = IO.Path.ChangeExtension(FileName, ".htm")
Dim Writer As New IO.StreamWriter(HTMLFileName, False)
Writer.WriteLine("<HTML>" & vbNewLine)
Writer.WriteLine("<HEAD>" & vbNewLine)
Writer.WriteLine("<meta http-equiv=""Content-Type"" content=""text/html; charset=utf-8"">" & vbNewLine)
Writer.WriteLine("</HEAD>" & vbNewLine)
Writer.WriteLine("<BODY>" & vbNewLine)
Contents = Contents.Replace("<", "<")
Contents = Contents.Replace(">", ">")
Writer.WriteLine(Contents & vbNewLine)
Writer.WriteLine("</BODY></HTML>" & vbNewLine)
Writer.Close()
MsgBox(HTMLFileName & "を作成しました。")
End Sub
End Class
一応、VBがメインのお仕事ではなく、会社側からはいい反応が来ているようなのですが・・・。*__
早速お返事いただいて、コードまで書いていただき(__;すごい感謝しています。どちらも試してみたのですが、エラーになってしまい、いろいろウェブを検索してみたのですが、糸口がみつからず・・・戻ってきました。
Microsoft.Office.Interop.Word._ApplicationとMicrosoft.Office.Interop.Word.Documentなのですが、「型""が定義されていません」と出ます。これは私のVB 2005の設定で何かが間違っているのでしょうか。
いまのところほぼコピーしてファイル名を変えただけですが、2番目のコードはこのようになっています。
Public Class Form1
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
'▼Wordのドキュメントから文章を取得
Dim WordApp As New Microsoft.Office.Interop.Word._Application
Dim Doc As Microsoft.Office.Interop.Word.Document
Dim FileName As String = "C:\Documents and Settings\jennifer\Test.docx"
Dim Contents As String
Doc = WordApp.Documents.Open(FileName)
Contents = Doc.Range.Text
Doc.Close()
WordApp.Quit()
'▼HTMLに保存
Dim HTMLFileName As String = IO.Path.ChangeExtension(FileName, ".htm")
Dim Writer As New IO.StreamWriter(HTMLFileName, False)
Writer.WriteLine("<HTML>" & vbNewLine)
Writer.WriteLine("<HEAD>" & vbNewLine)
Writer.WriteLine("<meta http-equiv=""Content-Type"" content=""text/html; charset=utf-8"">" & vbNewLine)
Writer.WriteLine("</HEAD>" & vbNewLine)
Writer.WriteLine("<BODY>" & vbNewLine)
Contents = Contents.Replace("<", "<")
Contents = Contents.Replace(">", ">")
Writer.WriteLine(Contents & vbNewLine)
Writer.WriteLine("</BODY></HTML>" & vbNewLine)
Writer.Close()
MsgBox(HTMLFileName & "を作成しました。")
End Sub
End Class
一応、VBがメインのお仕事ではなく、会社側からはいい反応が来ているようなのですが・・・。*__
投稿者 るきお  ()
投稿日時
2007/9/2 07:53:00
Microsoft.Office.Interop.Word._Applicationの方はエラーになりませんか?
両方エラーなら、参照設定がされていないと思いますので、下記ページを参考にMicrosoft Word x.x Object Libraryに参照設定を追加してみてください。
http://homepage1.nifty.com/rucio/main/kiso/Kiso13Reference.htm
Documentの方だけがエラーだとしたら原因はわかりません。
考えられるのは、私とWordのバージョンが違うということくらいですが、基本的な部分はバージョンが多少異なっていても同じと思うので少し考えにくいです。
ただし、私はVBからWordを操作することはほとんどしないのでこのあたりの知識はありません。
私のバージョンは2007です。
正確な情報はMSDNライブラリをご覧ください。
両方エラーなら、参照設定がされていないと思いますので、下記ページを参考にMicrosoft Word x.x Object Libraryに参照設定を追加してみてください。
http://homepage1.nifty.com/rucio/main/kiso/Kiso13Reference.htm
Documentの方だけがエラーだとしたら原因はわかりません。
考えられるのは、私とWordのバージョンが違うということくらいですが、基本的な部分はバージョンが多少異なっていても同じと思うので少し考えにくいです。
ただし、私はVBからWordを操作することはほとんどしないのでこのあたりの知識はありません。
私のバージョンは2007です。
正確な情報はMSDNライブラリをご覧ください。
投稿者 すさん  ()
投稿日時
2007/9/2 08:38:00
ご返答ありがとうございました。
無事に参照を追加しました。
(エラーはApplicationも、Documentもどちらもです)
ただ、私のワードのバージョンは1997なので、
すこしMsdnで調べてみます。ありがとうございました。
投稿者 るきお  ()
投稿日時
2007/9/2 21:48:00
参照設定してもエラーはなくなりませんか?
投稿者 すさん  ()
投稿日時
2007/9/3 06:09:00
はい、やはりエラーは直らないようです。(__;
投稿者 るきお  ()
投稿日時
2007/9/3 06:21:00
うーん…。そうですか。
ひょっとして97は違う型になるのか…。
何かご存知の方フォローお願いします。
Object型で宣言しておいてCreateObjectを使う手もあります。実際にOffice97 + VB2005の環境があればすぐに試せるのですが、なかなかそういう環境はないですね。
ひょっとして97は違う型になるのか…。
何かご存知の方フォローお願いします。
Object型で宣言しておいてCreateObjectを使う手もあります。実際にOffice97 + VB2005の環境があればすぐに試せるのですが、なかなかそういう環境はないですね。
投稿者 すさん  ()
投稿日時
2007/10/14 03:28:00
どうもご回答ありがとうございました。
なんと!その会社に採用されてしまいました。
前の人が自分でつくったのかどうかはわかりませんが、コードも見ることが出来ました。(実はVisual BasicではなくAccessについてるVBAだということが判明)
コード全部書くとすごいことになるのでちょっとだけご紹介します:
Sub MakeProdDetailPage(p_cnt As Integer, f_name As String, bgclr As String)
Debug.Print f_name
Debug.Print ProductList(p_cnt).ProdDescript
If bgclr = "" Then bgclr = "550000"
bgclr = bgcolor
pdfh = FreeFile
OutputFile = OutDir & f_name
Open OutputFile For Output As #pdfh
DoProdDetTop pdfh
f3 = FreeFile
MidBlkFile = InDir & "cmlk_detail_blk.html"
Open MidBlkFile For Input As #f3
While Not EOF(f3)
round_again:
Line Input #f3, temp
If InStr(temp, "DETAIL_IMAGE") > 0 Then
Print #pdfh, "<img border=""0"" src=""Prod_Img/" & ProductList(p_cnt).Large_img & """ alt = """ & ProductList(p_cnt).MetaTitle & """ > "
GoTo round_again:
End If
If InStr(temp, "DETAIL_NAME_CLR") > 0 Then
out_str = "<td width=""99%"" colspan=""2"" bgcolor=""#" & bgclr & """>"
Print #pdfh, out_str
Debug.Print out_str
GoTo round_again:
End If
以下条件が続く・・・
End Sub
一応、できてしまったプログラムなので私自身はそんなにわからなくても、という感じがしました。しかしVBAのコード内にHTMLコードが入っているためページ内の色の変更など、コードを変える必要性も出てきます。
VBもせっかくはじめたのでもうちょっと勉強しようと思います。ありがとうございました。
なんと!その会社に採用されてしまいました。
前の人が自分でつくったのかどうかはわかりませんが、コードも見ることが出来ました。(実はVisual BasicではなくAccessについてるVBAだということが判明)
コード全部書くとすごいことになるのでちょっとだけご紹介します:
Sub MakeProdDetailPage(p_cnt As Integer, f_name As String, bgclr As String)
Debug.Print f_name
Debug.Print ProductList(p_cnt).ProdDescript
If bgclr = "" Then bgclr = "550000"
bgclr = bgcolor
pdfh = FreeFile
OutputFile = OutDir & f_name
Open OutputFile For Output As #pdfh
DoProdDetTop pdfh
f3 = FreeFile
MidBlkFile = InDir & "cmlk_detail_blk.html"
Open MidBlkFile For Input As #f3
While Not EOF(f3)
round_again:
Line Input #f3, temp
If InStr(temp, "DETAIL_IMAGE") > 0 Then
Print #pdfh, "<img border=""0"" src=""Prod_Img/" & ProductList(p_cnt).Large_img & """ alt = """ & ProductList(p_cnt).MetaTitle & """ > "
GoTo round_again:
End If
If InStr(temp, "DETAIL_NAME_CLR") > 0 Then
out_str = "<td width=""99%"" colspan=""2"" bgcolor=""#" & bgclr & """>"
Print #pdfh, out_str
Debug.Print out_str
GoTo round_again:
End If
以下条件が続く・・・
End Sub
一応、できてしまったプログラムなので私自身はそんなにわからなくても、という感じがしました。しかしVBAのコード内にHTMLコードが入っているためページ内の色の変更など、コードを変える必要性も出てきます。
VBもせっかくはじめたのでもうちょっと勉強しようと思います。ありがとうございました。
実は、ご相談があって書き込みさせていただきました。
私はPHPやASPを使ったウェブ開発が得意でウェブ開発者のお仕事を探しています。それで今回、ある会社の面接に行きました。その会社ではそこのウェブサイトを6カ国語に訳して同じ内容を載せたい、とのこと。そこで社長が「前にいた開発者がVisual Basicを使ってワード文書に書かれた翻訳内容を読み取り、それをHTMLに変換していた」そうで、それはその人もやっているところを見た、というのです。私はVBは初心者なのでわからないのですが、実際にそういうことは可能なのでしょうか。可能だとしたら、どのようにしたらできるのでしょうか。分かる方いたらお願いします。