
お世話になります。
ExcelのVBAでテキストにタグをつけてxml形式で書き出すようにしたのですが、xmlの始めの文章で
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
で文字コード?を指定しているために書き出されたxmlをドリームウェーバーで開くと平仮名などの中身の文字が化けます。
MacのOSXを使っているためなのか、ADODBが使えないようです。
参考までにこんなプログラムです↓
Sub kaki_TextFile2()
Const cnsFILENAME = "a.xml"
Dim intFF As Integer ' FreeFile値
Dim strREC As String ' 書き出すレコード内容
Dim GYO As Long ' 収容するセルの行
Dim GYOMAX As Long ' データが収容された最終行
Worksheets("最終データ").Activate
' 最終行の取得
GYOMAX = Range("A65536").End(xlUp).Row
' FreeFile値の取得(以降この値で入出力する)
intFF = FreeFile
' 指定ファイルをOPEN(出力モード)
Open ThisWorkbook.Path & cnsFILENAME For Output As #intFF
' 2行目から開始
GYO = 2
' 最終行まで繰り返す
Do Until GYO > GYOMAX
' A列内容をレコードにセット(先頭は2行目)
strREC = Cells(GYO, 1).Value
' レコードを出力
Print #intFF, strREC
' 行を加算
GYO = GYO + 1
Loop
' 指定ファイルをCLOSE
Close #intFF
End Sub
といってもこちらから抜粋させていただいただけなのですが…
http://www.asahi-net.or.jp/~ef2o-inue/vba_o/sub0 …
VBもxmlも初心者同然なので、、、すみませんがよろしくお願いします。
No.4ベストアンサー
- 回答日時:
Windowsの場合、Print文で出力される文字コードはCP932=Shift_JISになる
のですが、Macの場合もShift_JISになるのですかね?
(日本語をPrint文で出力して、バイナリエディタで文字コードを調べれば
確認できるはず)
いっそのこと、String変数にはUnicodeで持っている(※)わけなので、
BinaryモードでUnicodeをはけば確実ではないでしょうか?
※ MsgBox AscW("あ") → 12354 → &H3042 で確認できるはず
(Shift_JISの"あ"は &H82a0となる)
# 最悪、encoding=UTF-8でもUnicodeエスケープすればできるかも。
# <?xml version="1.0" encoding="utf-8"?>
# <a>あ</a>
# ってのは 3042 は "あ" のUnicodeだが、ちゃんと表示できる。
もしくは、MacのExcelのバージョンが良くわからないのでできるかわかりませんが、
出力するものをすべてSheetに吐き出し、Unicodeのテキストファイルとして出力するとか。
(たぶんこれができれば一番楽)
お返事ありがとうございます。
本当に申し訳ないのですが、もう少しわかりやすく説明していただいてもよろしいでしょうか?
MsgBox AscW("あ")をイミディエイトで実行すると12354という結果が表示されたのですが
それをバイナリエディタに通せばいいのでしょうか?
最後の#最悪~~というところは全然理解ができなくて…すいません;;
ちなみにExcelは
Excel2004 for mac、
Microsoft visual basic
共にバージョン11.0です。
No.6
- 回答日時:
この検証用にちょうどよいMAC用バイナリエディタを見つけました。
「HexEditor」は文字のエンコーディングを指定して、表示させることができるそうです。
http://park.zero.ad.jp/pautha/hexeditor.html
MACには Microsoft XML V.xx みたいなdllは無いですよね?
No.5
- 回答日時:
>Print #intFF, strREC ' レコードを出力
で出力したらMacでは文字コードがどうなるか確認してもらいたいわけです。
単純な文字列を吐き出し、出来上がったテキストファイルをバイナリエディタで
みたとき、どうなっているか
ということです。
No.3
- 回答日時:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>で、
そのXMLで使用される文字コードはUTF-8だと宣言しています。
これをもってXMLの文字コードを判定しているソフトもあれば、そうでない
ソフトもあります。
WindowsのEXCELで使われている文字コードはShift-JISです。
Print文は文字コードの変換をしないと思うのですが、
だから抜本的におかしいです。
そのXMLをどう使うのかわかりませんが、
<?xml version="1.0" encoding="Shift-JIS" standalone="yes"?>
と換えるのはだめなんですか?
ありがとうございます。
でき上がったxmlを利用するときに、文字コードはUTF-8でないといけないそうです。
なので、その方法は使えそうになさそうです。
わざわざありがとうございます。
No.2
- 回答日時:
>書き出されたxmlを全部コピーして上記が既に入力されているxmlファイルにペースト
という状態であれば、
Open ThisWorkbook.Path & cnsFILENAME For Output As #intFF
これを書き換えたいファイル名に変更してあげれば動作するのでは?
Dim Fname As String
Fname = Application.GetOpenFilename("XMLファイル,*.xml")
If Fname = "False" Then Exit Sub
上記を最初に行って書き換えたいXMLファイルを取得して、
Open Fname For Output As #intFF
とすればうまくいきそうな感じに受け取れるのですが。
ありがとうございます。
やってみたのですがうまく動作しませんでした( Application...でエラーがでます)
私のやり方が悪いのかもしれませんのでこんな感じにしたのですが↓
'Sub kaki_TextFile2()
Const cnsFILENAME = "a.xml"
Dim intFF As Integer ' FreeFile値
Dim strREC As String ' 書き出すレコード内容
Dim GYO As Long ' 収容するセルの行
Dim GYOMAX As Long ' データが収容された最終行
Dim Fname As String
Worksheets("最終データ").Activate ' シートの指定
Fname = Application.GetOpenFilename("XMLファイル,panaa.xml")
If Fname = "False" Then Exit Sub
GYOMAX = Range("A65536").End(xlUp).Row ' 最終行の取得
intFF = FreeFile ' FreeFile値の取得(以降この値で入出力する)
Open Fname For Output As #intFF ' 指定ファイルを開く
GYO = 2 ' 2行目から開始
Do Until GYO > GYOMAX ' 最終行まで繰り返す
strREC = Cells(GYO, 1).Value ' A列内容をレコードにセット(先頭は2行目)
Print #intFF, strREC ' レコードを出力
GYO = GYO + 1 ' 行を加算
Loop
Close #intFF
' 指定ファイルをとじる
関係ないのかもしれませんが、最初に書き込んだものを実行するとファイル名がフォルダ名を参照して一つ前の階層に保存されます。
ex)
デスクトップ/p(フォルダ)/Excelファイル
デスクトップ/pa.xml
No.1
- 回答日時:
とりあえず普通のエディタで文字化けしないものを作りましょう。
xml 文字化けなどでググリましょう。
で、化けないようなxmlファイルが作れたら、
そのフォーマットにしたがって自動化してください。
一気にやるのは無茶です。一つ一つ課題をクリアしましょう
早いお返事ありがとうございます。
説明不足で申し訳なかったのですがExcelのシート上で
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
の文字列をいれずに書き出しするとxmlファイルは文字化けしないのです。
対策として…
xml上で文字コードを指定する文(上記)を入力しない状態で書き出す→書き出されたxmlを全部コピーして上記が既に入力されているxmlファイルにペースト
という手段をとっているのですが、なんとか自動化にする手段を探しています…
やはり無理なのでしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excel VBA セルの値がおかしいです
-
VBA セル間のリンク修正につい...
-
エクエルのVBAコードについて教...
-
ワードの図形にマクロを登録で...
-
vbsでのwebフォームへの入力制限?
-
ダブルクリックで貼り付けた画...
-
vba textboxへの入力について教...
-
【マクロ】並び替えの範囲が、...
-
【マクロ】開いているブックの...
-
えくせるのVBAコードについて教...
-
Excelのマクロについて教えてく...
-
VBAでセルの書式を変えずに文字...
-
複数のExcelファイルをマージす...
-
Vba Array関数について教えてく...
-
【マクロ】シートの変数へ入れ...
-
【マクロ】売上一覧YYYYMMDDHHS...
-
VBAの「To」という語句について
-
VBAでFOR NEXT分を Application...
-
VB.net 文字列から日付型へ変更...
-
【ExcelVBA】5万行以上のデー...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
バッチファイルでテキストファ...
-
msxslで「不明な方法」エラー
-
C#で使用中のファイルに別のフ...
-
Excel(2007以降)をxml形式に変...
-
eclipseへのxmlファイル追加
-
外部ファイル(txt/csv)から文字...
-
ExcelVBAで書き出した文字が化ける
-
DataSetのwriteXmlでのXML宣言
-
XMLデータを整形して、ブラウザ...
-
DOSコマンドラインからxmlファ...
-
複数のXMLファイルからデータを...
-
質問
-
VBAでxmlファイルの置換をしたい
-
XMLファイルのattribute値を取...
-
XMLからデータセットへ
-
RDFファイルは何故拡張子が.rdf...
-
NEXUS7でSecret No5の使い方
-
XMLの編集?について
-
csv作成エラー
-
XMLファイルの作り方がわかりま...
おすすめ情報