お世話になります。
現在エクセルのVBAで(1)のようなソースで(2)を書き出しています。
(2)の「<?xml version="1.0" encoding="UTF-8"?><xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
」もVBAで「indate=<?xml version="1.0" encoding="UTF-8"?xsl:stylesheet version="1.0" lns:xsl="http://www.w3.org/1999/XSL/Transform">」とそのまま打ち込んでいます。
スタイルシートを使用して返還しようとすると、「パラメータが違う」旨メッセージがでてきて、(2)を一度開き、何も変更しないで保存すると正常にスタイルシートの変換処理が行われます。
(2)のVBAで書き出したxmlがUTF-8で保存されていないように感じるのですが、どのように変更すればUTF-8で書き出せるのでしょうか?
以上お手数ですが、よろしくお願いします。
(1)
Const ForReading = 1, ForWriting = 2, ForAppending = 3
Const TristateUseDefault = -2, TristateTrue = -1, TristateFalse = 0
Dim fs, f, ts
Set fs = CreateObject("Scripting.FileSystemObject")
fs.CreateTextFile "F:\EXCEL→XML\問題形式" & Worksheets("設問形式設定シート").Range(設問形式設定シート大問列 & 設問形式設定シート行).Value & ".xsl" 'ファイルの作成
Set f = fs.GetFile("F:\EXCEL→XML\問題形式" & Worksheets("設問形式設定シート").Range(設問形式設定シート大問列 & 設問形式設定シート行).Value & ".xsl")
Set ts = f.OpenAsTextStream(ForWriting, TristateTrue)
ts.Write indate
ts.Close
(2)
<?xml version="1.0" encoding="UTF-8"?><xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:import href="設定.xsl" />
<xsl:output method="xml" encoding="UTF-8" indent="yes" />
<xsl:param name="形式番号" >10001</xsl:param>
<xsl:template match="/">
<xsl:call-template name="問題形式" />
</xsl:template>
xsl:stylesheet>
No.1
- 回答日時:
こんばんわ
VBAからUTF-8出力は、StrConv()WINAPIでいけるようです
http://okwave.jp/qa112893.html
もしくは、
Before:<?xml version="1.0" encoding="UTF-8"?>
After :<?xml version="1.0" encoding="UTF-16"?>
と保存すると意外と動きませんか?(両方ともに16へ)
すみません、未確認で回答しています…
この回答への補足
ご返事ありがとうございます。
教えていただいた方法を試したのですが、状況がかわらず、やはり、保存しなおさないと正しく認識しない状態です。
No.2
- 回答日時:
こんにちは。
■ 1点目 FSO (FileSystemObject)について
FSO の CreateTextFile はテキストストリームを返しますので、
Set txt = fso.CreateTextFile("C:\test.txt")
txt.WriteLine "あああああ"
txt.Close
のように使います。したがって、CreateTextFile したものをわざわざ
GetFile, OpenAsTextStream し直す必要はありません。
この点については、下記ページが参考になります。
http://officetanaka.net/excel/vba/filesystemobje …
■ 2点目 UTF-8での出力方法について
ご提示のソースでは、変数 indate の内容が不明ですから、仮に indate
には出力内容が文字列で代入されており、それを UTF-8 で出力したい
とのご質問と解釈して回答します。
まず、UTF-8 でという時点で FSO のテキストストリームでは面倒です。
ADODB.Stream を使って下さい。
Sub test()
Const adTypeText As Long = 2
Const adSaveCreateOverWrite As Long = 2
Dim srcStm As Object ' ADODB.Stream
Dim outStm As Object ' ADODB.Stream
Dim src As String
src = "出力内容の文字列" ' セルから取ってきたもの?
Set srcStm = CreateObject("ADODB.Stream")
Set outStm = CreateObject("ADODB.Stream")
With srcStm
.Type = adTypeText
.Charset = "Unicode"
.Open
.WriteText src
.Position = 0
End With
With outStm
.Type = adTypeText
.Charset = "UTF-8"
.Open
End With
srcStm.CopyTo outStm
outStm.SaveToFile "C:\test.xsl", adSaveCreateOverWrite
srcStm.Close: Set srcStm = Nothing
outStm.Close: Set outStm = Nothing
End Sub
なお、上記ソースは BOM 無し UTF-8 で、改行コードは規定値 CRLF です。
Office カテにしては、ちょっと難しい内容かもしれませんね。
この回答への補足
ご返事ありがとうございます。
教えていただいた方法を試したのですが、状況がかわらず、やはり、保存しなおさないと正しく認識しない状態です。
No.3ベストアンサー
- 回答日時:
こんにちは。
> (2)の...中略....とそのまま打ち込んでいます。
の意味がよくわからないのです。そのまま打ち込んでいるとは?
> スタイルシートを使用して返還しようとすると
スタイルシートを使用して変換するとは?
> 保存しなおさないと正しく認識しない状態です。
ご提示のソースでは (2) の結果が得られないですよね。
テキストファイルの書き出し部だけなのですから。
したがって、#2 のソースは変数 src に代入された文字列を UTF-8 の
テキストファイルに保存するものにとどまっています。
単体プロシージャでのテストで間違いなく動作することは確認済みです
から、上手くいかない理由はご質問文にはでてこないその他の要因に
よるものでしょう。そもそも、XSL の内容が正しいかどうかも、現在の
ところこちらには判断できません。
また、Excel のバージョンは?
どのような過程で、どのようなデータを、どのようなソースで実行して
して、どのような結果にならずお困りなのか回答者側に見えてこない
のです。
もっと具体的に説明していただけませんか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) VBAが止まります。 2 2022/09/02 14:02
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 2 2022/05/26 17:19
- PowerPoint(パワーポイント) ExcelのVBAコードについて教えてください。 3 2022/05/25 14:32
- Visual Basic(VBA) エクセルのマクロについて教えてください。 5 2023/06/02 08:44
- Visual Basic(VBA) vbaの構文の修正相談(xmlファイルを順に開いてコピペ作業) 1 2023/04/22 01:18
- Visual Basic(VBA) VBA 最終行まで数式をコピーする 3 2023/01/03 15:44
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 2 2023/05/23 16:28
- Visual Basic(VBA) エクセルのマクロについて教えてください。 2 2023/06/04 09:39
- Excel(エクセル) EXCELのグラフを画像(JPG形式)で保存、通常実行がうまく行かない。ステップインはうまく行く 3 2022/08/30 12:06
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
XMLとXSLTでリンクを張る方法
-
スタイルシートを使用したXM...
-
xmlのテキストにリンクを張りた...
-
XSLでXMLデータをタブ区切りデ...
-
XSLTで固定長データファイルを...
-
XMLのHTMLへの変換 (初心者)
-
東芝のDynabookなのですがアン...
-
XMLで要素が記述された順番に意...
-
CPUの考え方を教えてください ...
-
xmlファイルが上手にHTMLに変換...
-
XPathで途中に名前空間が設定さ...
-
XMLファイルの作り方がわかりま...
-
バッチファイルでテキストファ...
-
Visual Basic .NET の識別子は...
-
VB6.0でDOMを使用して...
-
VBでXMLファイルを作ると xmlns...
-
ルート要素ノードが2個ある場合?
-
VB6でXMLを作成しているのです...
-
4色定理はなぜグラフ理論で証...
-
UTF-8でエンコーディングとはど...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
XMLのHTMLへの変換 (初心者)
-
XSLで、XMLの空タグを制御したい。
-
タグの有無の判定
-
htmlに変換されない
-
スタイルシートを使用したXM...
-
xslでの最小値、最大値の取得
-
XSL内でJavaScriptを記述し、Ja...
-
ノードの並び替え
-
VBAからxml・スタイルシートを...
-
XMLをXSLを使いHTMLに変換した...
-
xmlのテキストにリンクを張りた...
-
重複するものを消したい
-
<xsl:key>とtopreceding-siblin...
-
XSL中の改行、タブを無効にした...
-
スタイルシートについて
-
XSLTにてタグ名を取得する方法
-
XSLTで直下のテキストのみ取得...
-
xsl:variable の使用方法
-
東芝のDynabookなのですがアン...
-
CPUの考え方を教えてください ...
おすすめ情報