- 締切済み
外部ファイルへの出力時に余計なダブルクオートを除去し、文字コードを指定する方法は?
Excel2007のデータを行毎にhtmlファイルとして保存しようとしています。 そこで、2つ問題が解決できずにいますので、どなたかお力添えをお願いできますでしょうか。 (1) セル内に改行がある場合、ダブルクオートが追加されたデータがhtmlファイルに出力されてしまうので、余計なダブルクオートを取り除いた、セル内に記載されたままのテキストデータをhtmlファイルに出力したい ---データ例 (A1)ここから--- <html> <head> <meta http-equiv="content-type" content="text/html; charset=utf-8" /> <script type="text/javascript"> if (document.getElementById) { document.write("<st" + "yle type=\"text/css\">.j1 {display:block;}</st" + "yle>");} </script> </head> <body> ---データ例 (A1)ここまで--- ---データ例 (B1)ここから--- <p class="j1">見出し1</p> </body> </html> ---データ例 (B1)ここまで--- (2) htmlファイルの文字コードをutf-8で出力&保存したい 現在は Open "001.html" For Output As #1 Write #1, Cells(1, 1) Write #1, Cells(1, 2) Close #1 このような感じのコードに CreateObject("ADODB.Stream") や Charset = "utf-8" を組み込んでいる最中ですが、自力では解決しそうになく、質問させていただきました。 なお、実際に出力されるhtmlは50KBほどあり、ファイル数(=Excelの行数)も100を超えるため、できるだけメモリーを圧迫しない方法で解決できればと思います。 よろしくお願いいたします。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- himajin100000
- ベストアンサー率54% (1660/3060)
Option Explicit Sub Main() Dim stream As New ADODB.stream stream.Charset = "UTF-8" stream.Open stream.WriteText (Cells(1, 1).Value) stream.WriteText (Cells(1, 2).Value) stream.SaveToFile "002.html", adSaveCreateNotExist stream.Close End Sub 'こう?
- mt2008
- ベストアンサー率52% (885/1701)
先にセル内の改行を取り去って置くのが一番簡単そうですが問題がありますか?
お礼
Windows限定ですが、自己解決しました。 変数にHTMLを全て入れてから、以下のコードで出力すると、ダブルクオートも追加されること無く、文字コードもUTF-8で出力出来ました。 --- Dim utfTmp As String utfTmp = Cells(1, 1) & vbCrLf utfTmp = utfTmp & Cells(2, 1) Dim utfHtml Set utfHtml = CreateObject("ADODB.Stream") utfHtml.Charset = "UTF-8" utfHtml.Open utfHtml.WriteText (utfTmp) utfHtml.SaveToFile "hoge.html", 2 utfHtml.Close Set utfHtml = Nothing --- 上記コードをを実際にはループさせて、解決したということです。
補足
少し問題があります。 一行にしていない理由は、自分以外の人に利用してもらうことになるため、実際のHTMLのメンテナが、作業しやすくなるようにするという目的と、プログラムのメンテを楽にするという目的があるためです。 解決方法が複雑になり、処理時間に影響するレベルになるようでしたら、1セル1行のHTMLにして、HTMLのメンテナにゴメンナサイすることを考えようと思いますが、できれば現状のセル内改行をやっつけられれば、と思います。 宜しくお願い致します。
お礼
回答ありがとうございます。 上記コードのままですとエラーが出て、試せていません。 このような質問をしているレベルの人間ということで、深追いも出来ない訳ですが、結局WriteではなくWriteTextを利用してADODB.streamを使えば良かったのであろう、、、と、勝手に自己解決しておきました。