• ベストアンサー

VBAからxml・スタイルシートを作成すると、一度保存しないと正常に動作しない

お世話になります。 現在エクセルの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>

質問者が選んだベストアンサー

  • ベストアンサー
  • KenKen_SP
  • ベストアンサー率62% (785/1258)
回答No.3

こんにちは。 > (2)の...中略....とそのまま打ち込んでいます。 の意味がよくわからないのです。そのまま打ち込んでいるとは? > スタイルシートを使用して返還しようとすると スタイルシートを使用して変換するとは? > 保存しなおさないと正しく認識しない状態です。 ご提示のソースでは (2) の結果が得られないですよね。 テキストファイルの書き出し部だけなのですから。 したがって、#2 のソースは変数 src に代入された文字列を UTF-8 の テキストファイルに保存するものにとどまっています。 単体プロシージャでのテストで間違いなく動作することは確認済みです から、上手くいかない理由はご質問文にはでてこないその他の要因に よるものでしょう。そもそも、XSL の内容が正しいかどうかも、現在の ところこちらには判断できません。 また、Excel のバージョンは? どのような過程で、どのようなデータを、どのようなソースで実行して して、どのような結果にならずお困りなのか回答者側に見えてこない のです。 もっと具体的に説明していただけませんか?

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (2)

  • KenKen_SP
  • ベストアンサー率62% (785/1258)
回答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/filesystemobject/filesystemobject.htm#CreateTextFile ■ 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 カテにしては、ちょっと難しい内容かもしれませんね。

kgyqk433
質問者

補足

ご返事ありがとうございます。 教えていただいた方法を試したのですが、状況がかわらず、やはり、保存しなおさないと正しく認識しない状態です。

全文を見る
すると、全ての回答が全文表示されます。
  • nyasu_nc
  • ベストアンサー率50% (12/24)
回答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へ) すみません、未確認で回答しています…

kgyqk433
質問者

補足

ご返事ありがとうございます。 教えていただいた方法を試したのですが、状況がかわらず、やはり、保存しなおさないと正しく認識しない状態です。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • xmlから別ディレクトリのxslファイルの参照

    xml初心者です。 xmlファイルのひとつ上の階層にxslファイルを置いてあります。 xslファイル <?xml version="1.0" encoding="utf-8"?> <?xml-stylesheet type="text/xsl" href="../format.xsl"?> ... xslファイル format.xsl <?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> ... href="../format.xsl" のように指定したのですがxslが適用されません。 そもそも別ディレクトリへの参照は可能なのでしょうか。 もし可能ならばどのような方法があるのでしょうか。

    • ベストアンサー
    • XML
  • PHPによるXML作成について

    PHPによるXML作成について いつもお世話になっております。 XMLファイルの署名の作成を行っております。 A.xmlというXMLファイルに後で作成した部分をまとめて追記したいと思っています。 「まとめて」というのは、後で追記する部分をプログラム上で一つの変数に格納して、その変数に格納した内容(複数行)を指定した場所に書き込むということです。 XMLの操作として、PHPにこういう機能が無いのであればファイル操作としてでもかまいません。 何かうまく行く方法はありませんでしょうか? よろしくお願いいたします。 実際の例は以下のような感じです。 【A.xmlの例】 <?xml version="1.0" encoding="UTF-8"?> <?xml-stylesheet href="00001.xsl" type="text/xsl"?> <DataRoot> <A>999000000000000009</A> <B>0001</B> <STYLESHEET>999000000000000009.xsl</STYLESHEET> <C ID="CCCCCC"> <D> <E> <E1>100495</E1> <E2>4950000020161F01</E2> </E> <F>ファイル名称</F> </D> </C> ******** ここの一括で作成した部分を追記したい ******** </DataRoot> 【追記情報 この部分を変数に格納しています。】 <G xmlns = "http://www.xxxxxxxxx" id = "2009010101"> <Hinfo> <I> <I1></I1> <I2></I2> </I> </Hinfo> </G> 【結果のA.xml】 <?xml version="1.0" encoding="UTF-8"?> <?xml-stylesheet href="00001.xsl" type="text/xsl"?> <DataRoot> <A>999000000000000009</A> <B>0001</B> <STYLESHEET>999000000000000009.xsl</STYLESHEET> <C ID="CCCCCC"> <D> <E> <E1>100495</E1> <E2>4950000020161F01</E2> </E> <F>ファイル名称</F> </D> </C> <G xmlns = "http://www.xxxxxxxxx" id = "2009010101"> <Hinfo> <I> <I1></I1> <I2></I2> </I> </Hinfo> </G> </DataRoot>

    • ベストアンサー
    • PHP
  • XMLの実体参照とXSLT

    次のようなXMLファイルをXSLTで処理したいのですが、&baseの部分がうまく表示できません。 どのようにしたら表示できるでしょうか? ■a.xml <?xml version="1.0" encoding="UTF-8"?> <?xml-stylesheet type="text/xsl" href="a.xsl"?> <!DOCTYPE test [ <!ELEMENT name (#PCDATA)> <!ENTITY base SYSTEM "base.xml"> ]> <test> <name>abc</name> &base; </test> ■base.xml <?xml version="1.0" encoding="UTF-8"?> <base>base</base> ■a.xsl <?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="xml" encoding="UTF-8" /> <xsl:template match="/"> <xsl:apply-templates select="test" /> <xsl:apply-templates select="base" /> </xsl:template> <xsl:template match="test"> name:<xsl:value-of select="name" /> </xsl:template> <xsl:template match="base"> base:<xsl:value-of select="base" /> </xsl:template> </xsl:stylesheet> □結果 name:abc ※base.xmlの内容を表示できない

    • ベストアンサー
    • XML
  • XSLTでの外部XMLファイルの読み込みについて。

    XSLTについて質問がございます。 下記のように、document関数を用いて外部のxmlを取り込んでいるのですが、 もし、そのxmlファイルが存在しなかった場合はエラーとなってしまいます。 この時、対象のxmlファイルが存在するか否かを、XSLTで調べる事は可能なのでしょうか? boolean関数を用いてみたりしたのですが、ファイルがない場合はやっぱりエラーになってしまいます。 どなたかご教授願います。 <!-- STYLESHEET --> <?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:import href="xsl1.xsl"/> <xsl:param name="doc" select="document('../XML/import.xml')"/> </xsl:stylesheet>

    • ベストアンサー
    • XML
  • スタイルシートを使用したXML入力は表示できません

    こんにちわ 初歩の初歩の初歩子です。ここに投稿してもいいのか迷いました。 ある有名なXML入門ホームページを見ながら、勉強しています。 下記の文はそのホームページをまねて書いたものです。なのにIE6で見ようとすると、質問タイトルのエラーが表示されます。どこに問題があるのでしょうか。お分かりの方ご教授ください。 -XMLテキスト- <?xml version="1.0" encording="Shift_JIS"?> <?xml-stylesheet type="text/xsl" href="sample.manyo.xsl"?> <manyosyu> <volume no="1"> <poem> <pno>8</pno> <mkana> 熱田 我心炎真中 思儘果朽 </mkana> <poet>真二王</poet> <yomi> 熱田で 我が心炎の真ん中 思いのまま朽ち果てる </yomi> <image>image/fujiyama.jpg</image> <mean>熱田で私の心は満たされました もうなるがままになってしまえ </mean> </poem> </volume> </manyosyu> -XSLテキスト- <?xml version="1.0" encording="Shift_JIS"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="/"> <html> <head> <title>たのしい男塾:基本サンプル-1</title> </head> <body> <p align="center">男塾集抜粋:とにかく表示してみよう</p> <p><xsl:value-of select="manyosyu" /></p> </body> </html> </xsl:template> </xsl:stylesheet>

    • ベストアンサー
    • XML
  • XSLで、XMLの空タグを制御したい。

    値がないXML文書に、 <exsample /> こう書かれてしまうものを、 <exsample></exsample> このように出力したいのですが、出来ずでした。 以下は、私のやり方です。 ■ XSL <?xml version="1.0" encoding="Shift_JIS"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xalan="http://xml.apache.org/xslt"> <xsl:output method="xml" encoding="Shift_JIS" indent="yes" xalan:indent-amount="4"/> <xsl:template match="/"> <xsl:copy-of select="."/> </xsl:template> </xsl:stylesheet> ■ XML <?xml version="1.0" encoding="Shift_JIS"?> <root> <section> <category> <exsample1>value</exsample1> <exsample /> </category> </section> </root> ご教授、よろしくお願いいたします。

    • ベストアンサー
    • XML
  • XSLTによるノードの抽出の際に親のnamespaceで子ノードのnamespaceが上書きされないようにするには?

    下記のようなXMLに <?xml version="1.0" encoding="EUC-JP"?> <parent xmlns:xhtml="http://parent"> <child id="A1"> <taroh xmlns="http://child"> <age>10</age> </taroh> </child> </parant> 下記のようなXSLTを適用した場合、 <?xml version="1.0" encoding="EUC-JP"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0" > <xsl:output method="xml"/> <xsl:template match="text()|@*"> </xsl:template> <xsl:template match="node()[@id='A1']"> <xsl:copy-of select="./node()"/> </xsl:template> </xsl:stylesheet> 通常下記のような結果となりますが、 <?xml version="1.0" encoding="EUC-JP"?> <taroh xmlns="http://parent"> <age>10</age> </taroh> namespaceを変更させずに、下記のような結果を 得るためにはどのようにすればよいでしょうか? <?xml version="1.0" encoding="EUC-JP"?> <taroh xmlns="http://child"> <age>10</age> </taroh> 抽出には javax.xml.transform.Transformerを用いています。 どうか、よろしくお願いします。

    • 締切済み
    • XML
  • 何故か子の要素に xmlns=

    ある「AABBCC」のタグが記述されているXML文書が有ります。 その文書に対し下記のXSLで変換をすると <?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> <xsl:output method="xml" version="1.0" encoding="UTF-16" indent="yes" /> <xsl:template match="/"> <ABC xmlns="http://www.abcd.co.jp/Schema_1_1"> <xsl:apply-templates select="AABBCC" /> </ABC> </xsl:template> <xsl:template match="AABBCC"> <DEF> <xsl:attribute name="ID">1</xsl:attribute> </DEF> </xsl:template> </xsl:stylesheet> 下記のような出力を期待しているのですが、 <?xml version="1.0" ?> <ABC xmlns="http://www.abcd.co.jp/Schema_1_1"> <DEF ID="1" /> </ABC> 何故か以下のようにDEFの属性に「xmlns=""」が追加されてしまいます。 <?xml version="1.0" ?> <ABC xmlns="http://www.abcd.co.jp/Schema_1_1"> <DEF ID="1" xmlns="" /> </ABC> まだ、XML,XSL共に勉強を始めたばかりでよく分かってないのでどうしてこのようなことが起こるのか、また対処法を教えてください。 アホな質問かもしれませんが、よろしくお願いします。

    • 締切済み
    • XML
  • XSLTの記述方法

    お世話になります。 XML+XSLTで開発しております。 XSLTの記述方法でjavascriptの引数にXMLデータを挿入する記述は どうすればよいのでしょうか? すごい初歩的な質問かもしれませんが ご教授よろしくお願いいたします。 <?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="/"> <table> <tr> <td > <a href="#" onClick="hogehoge('pram')">hogehoge rink </a> </td> </tr> </table> </xsl:template> </xsl:stylesheet> ↓↓↓↓↓↓こんな感じにしたい↓↓↓↓↓↓ <a href="#" onClick="hogehoge('<xsl:value-of select="$prm_test"/>')">りんく</a>

    • ベストアンサー
    • XML
  • うまく表示されない・・・

    XML初心者のものです。 以下のXMLをXSLを使用してWebで公開しようと試みてます。が、うまく表示されません。 どこがおかしいのでしょうか? また設置ディレクトリ構成も教えてください。 以下サンプルを示します。 -XMLファイル-(sake1.xml) <?xml version="1.0" encoding="Shift_JIS" ?> <?xml-stylesheet href="sake1.xsl" type="text/xsl" ?> <酒><名前>スーパードライ</名前></酒> -XSLファイル-(sake1.xsl) <?xml version="1.0" encoding="Shift_JIS" ?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="酒"> <html> <head> <title>酒データ1</title> </head> <body> <p align="center">とりあえず表示してみる。</p> <p><xsl:value-of select="酒" /></p> </body> </html> </xsl:template> </xsl:stylesheet>

    • 締切済み
    • XML
このQ&Aのポイント
  • Windows11にアップデートしてから、ブラザー製品のMFC-L5755DWでのスキャンができなくなりました。以前の質問ではドライバーの再インストールを試しましたが、問題は解決していません。
  • Windows11へのアップデート後、MFC-L5755DWのスキャン機能が使用できなくなりました。ドライバーの再インストールを試しましたが、問題は解決されていません。
  • MFC-L5755DWのWindows11へのアップデート後、スキャンができなくなりました。以前の質問ではドライバーの再インストールを試しましたが、問題は解決せずにいます。
回答を見る

専門家に質問してみよう