プロフィール

Author:はるかわ しおん
なにか、新しいものを。
そして、楽しいものを。

FC2カウンター


上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
  • ADODB.Streamオブジェクトを使ってBOMなしUTF-8のファイルを作成する方法

Android の string.xml を Excel 経由で出力しようとマクロを作っていたら、なんと!
FileSystemObject では UTF-8 で出力できない!!

・・・というときにお世話になったのがコチラ
Excel VBA だと微妙にコンパイルエラーだったので、修正したものを下に掲載しています。
まんまコピペで動きます。
使い方は
saveFile "ファイル名のフルパス", "書き出したい内容"
です。



'@see http://d.hatena.ne.jp/replication/20091117/1258418243
Sub saveFile(filename, text)
On Error Resume Next

' ADODB.Streamのモード
Dim adTypeBinary: adTypeBinary = 1
Dim adTypeText: adTypeText = 2
Dim adSaveCreateOverWrite: adSaveCreateOverWrite = 2

' ADODB.Streamを作成
Dim pre: Set pre = CreateObject("ADODB.Stream")
' 最初はテキストモードでUTF-8で書き込む
pre.Type = adTypeText
pre.Charset = "UTF-8"
pre.Open
pre.WriteText (text)
' バイナリモードにするためにPositionを一度0に戻す
' Readするためにはバイナリタイプでないといけない
pre.Position = 0
pre.Type = adTypeBinary
' Positionを3にしてから読み込むことで最初の3バイトをスキップする
' つまりBOMをスキップします
pre.Position = 3
Dim bin: bin = pre.Read()
pre.Close

' 読み込んだバイナリデータをバイナリデータとしてファイルに出力する
' ここは一般的な書き方なので説明を省略
Dim stm: Set stm = CreateObject("ADODB.Stream")
stm.Type = adTypeBinary
stm.Open
stm.Write (bin)
stm.SaveToFile filename, adSaveCreateOverWrite ' force overwrite
stm.Close

End Sub





感謝!




コメント

コメントの投稿

   管理者にだけ表示を許可する
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。