• 締切済み

VC++6.0 オートメーションでExcelに書き込めない文字列が存在する?

こんにちは。 VC++6.0 を使用したオートメーション処理にて、 Excelファイルのセルに文字列を書き込む処理を 行っています。 しかし、ある特定の文字列※を書き込んだ際に、 Runtime Errorが表示され、プログラムが強制終了 してしまいました。 エラーが発生したのは、Rangeオブジェクトのvalue2プロパティです。 このプロパティに、特定の文字列を入力すると、エラーが発生するようなのです。 対処として、その特定文字列を書き込む直前に、 Excelのセルの書式設定のうち、「表示形式」を「標準」→「文字列」にしたところ、問題なく書き込めました。 質問 1.Excelの「表示形式」の「標準」と「文字列」は、具体的にどのような違いがあるのでしょうか。 2.なぜ書き込めないのでしょうか。仕様なのでしょうか。 その辺りのヘルプがないので、ヘルプの場所をご存知の方がおられましたら、ご教授願います。 ※特定文字列とは、JISコード以外の文字列です。 実際には、文字化けしていると思われます。 環境:Windows XP SP2 Excel2002, 2003

みんなの回答

回答No.3

EXCELの標準と、文字列の違いは、、 標準だと、数式、数値、日付等のデータと EXCELが理解すれば、それぞれその対応を EXCELが勝手に行います。 文字列だと、そのままです。

kerberos_001
質問者

お礼

ご回答ありがとうございます。 わかりました、ありがとうございます。

全文を見る
すると、全ての回答が全文表示されます。
  • taka_tetsu
  • ベストアンサー率65% (1020/1553)
回答No.2

>VC++のアプリ側で発生します。 で、#importを使っているということなので、実際のCOMインターフェイスをラップしたメソッド、プロパティ等が作られているはずです。 プロパティに値を書き込む(ラッピングされたものではなく本物のgetメソッドを呼ぶ)前か、後のどちらで発生しているかを調べてください。 ステップ実行していけば、ラッピングした中まで入っていけますんで。 あとは想像ですが、エラーが起こってるのはプロパティにアクセスする前で、 ANSI→UNICODEに変換が行われている所で不正な文字コードの文字列のせいで NULLかなんかが返ってるのにそのまま処理しててすっ飛んでる といったところではないでしょうかね?

kerberos_001
質問者

お礼

ご回答ありがとうございます。 ふむふむ・・・もう少し調べてみます。

全文を見る
すると、全ての回答が全文表示されます。
  • taka_tetsu
  • ベストアンサー率65% (1020/1553)
回答No.1

Runtime Errorってどこで出てるんですか? Excelの中ですか?VC++のアプリ側ですか? それによって対応方法がぜんぜん違いますが。 で、 >VC++6.0 を使用したオートメーション処理にて、 MFCですか?#importでタイプライブラリを取り込んでるんですか?

kerberos_001
質問者

補足

補足させて頂きます。 > Runtime Errorってどこで出てるんですか? > Excelの中ですか?VC++のアプリ側ですか? VC++のアプリ側で発生します。 アプリケーションを実行すると、Runtimeエラーですが、 デバッガにて実行すると、KERNEL32.DLLの例外となります。 > MFCですか?#importでタイプライブラリを取り込んでるんですか? プログラム自体は、MFCを使用していますが タイプライブラりに関しては、 #importで取り込んでいます。 (ClassWizardを使用したタイプライブラリからExcel操作用クラス取り込みではありません) 参考にしたサイト http://www.attain-sys.com/vc/vc.html よろしくお願いします。

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

関連するQ&A

  • Excelオートメーションについて

    こんにちは。 VC++6.0 Excelオートメーション操作を行っています。 Excel内で、セルのコピー&ペーストをたくさんする プログラムなので、本プログラムの処理中に、 他でクリップボードを更新する操作(文字列のコピー&ペーストなど)を行うと、 Excel内のコピー&ペースト処理がおかしくなってしまいます。 これらはVBAなどにも言えることなのかもしれませんが、 Excelのセルをコピー&ペーストする処理を行っている最中は、他でクリップボードを更新する操作を行ってはいけないものなのでしょうか。 アプリ側で何かしら回避策はあるのでしょうか。 (Excel内でコピー&ペーストを使わず、全て直入力する、、ということは抜きにして…) 宜しくお願いします。 Windows XP Pro SP2

  • excelで13桁のJANコードを数値から文字列に

    仕事柄、excelで13桁のJANコードを入力することが多いのですが、セルの表示が標準の設定のままだと例えば「4.12345E+12」と表示されます。実は文字列として扱いたいのですが、この入力後のセルの表示形式を文字列に変えても、表示は変わりません。このセル自体をダブルクリックすれば13桁の文字列表示になるのですが、大量のデータを数値のまま受け取る事があるため、できれば一括で処理してしまいたいのです。何か方法はありますでしょうか?

  • エクセル セルの表示形式「文字列」だけを抽出したい

    エクセル2007を使用しています。 A列に数字が入力されていますが、そのセルの表示形式は、「標準」「数値」「文字列」とバラバラです。 この「文字列」のセルだけを抽出したいのです。 例えば、関数などを利用して、B列に表示するなど。 よろしくお願いします。

  • 【Excel】セルの書式設定で標準と文字列の違い

    「セルの書式設定」の「表示形式」での「標準」と「文字列」の違いについてです。 「文字列」は「[文字列]は、数値も文字列として扱います。セルには入力した値がそのまま表示されます」 とあります。 しかし「文字列」に数値を入力するとセルの左上に、グリーンの▼印がでてきて、「数値が文字列として保存されています」というエラー表示がでます。 数値も文字列として扱われるはずですがなぜなのでしょう。いちいち「エラーを無視する」にしなければならないので面倒だなと思いますので、今度は「標準」で入力しようと思いますが、 「標準」は「セルの値に対して一般の書式を適用します(特定の書式を指定しません)」 とのことです。一般の書式、特定の書式が何を指すのか分かりません。 文字列が、数値として扱われない理由と、「標準」「文字列」のそれぞれの特徴を教えてください。

  • エクセル ある文字列を入れるとある文字列を返す

    エクセルでの関数、ど素人です。一応自分で調べたのですが、無理なので質問させていただきます。よろしくお願いいたします。 エクセルで、時刻ですが文字列として1745~2345までを手入力します(1745,とか2000とか2330とか。。。。。) 入れた文字列によって、すぐ横のセルに1745、1800、1815であれば8.00、1830からは0.25刻みで8.25、1845であれば8.50、1900であれば8.75。。。。2330であれば13.25、2345であれば13.50と言ったように、入力した文字列に対しある特定の文字列を自動的に入れたいのですが、どのような関数を使えばよろしいのでしょうか。 私が行おうとしたのは、別シートに文字列一覧を作り、if(特定のセル(手入力するセル)=別シートの1745~2345まで、横のセル=別シートの8.00、8.00、8.00~13.50まで)や、sumif、lookupを使ってみましたが撃沈です。 どなたか教えていただきたく、お願いいたします。

  • EXCELで日付を文字列として取り出すには

    EXCELで日付形式のセルの内容を、そのイメージのまま文字列にするにはどうすれば良いでしょうか。何かうまい方法があれば教えてください。 例えば、2006/01/05 と表示されている日付をそのまま文字列として 取り出したいのです。単にセルの書式設定で文字列に変えただけでは 38722とタイムスタンプの値らしきものに化けてしまうので困っています。

  • セル内の文字列操作について

    Excelでセル内の文字列を操作したいのですが、Excelの標準の関数では出来そうにないので、どなたかお力をお貸しください。 1つのセル内に、文字列や数値が複数入っています。 (例) Excel 12 りんご Word 11 このセルを調べて、数値のデータが複数入っている場合、最大値のみを表示させ、残りの数値データは削除したいのです。 (結果) Excel 12 りんご Word この処理の対象はセル内の数値データであって文字列には作用させず、結果的には文字列はそのまま表示させたいのです。 Excelの文字列に関する関数を調べてみたのですが、該当するものがなく、VBAを使用しなくてはならないのかもしれません。処理するデータが大量なため、VBAマクロなどで処理できれば大変ありがたいのですが、どなたかご存知の方がいらっしゃいましたら、ご教授くださいませ。どうぞよろしくお願いいたします。

  • 【エクセル】文字列置換について

    エクセルでの文字列置換についてお教えください。 一部の文字列が含まれていたら、置換するという処理は可能ですか? 例えば、 ”ああああいいいい”  ”ああああうううう” ”ああああええええ” セルに、上記の文字列が、あったとして、 ”ああああ”が、含まれていたら、 すべてのセルを、”おおおお” に、置き換える(差し替える)という処理を想定しています。 よろしくお願いいたします。

  • エクセルで特定の文字列が入った行を非表示にしたい

    エクセル(97)で特定の列のセルに特定の文字列が入った行を非表示にする機能はありますでしょうか? 例えばC列の3行目以降から「無し」という文字列が入ったらその行を非表示にしたいのですが・・・

  • Excelで指数表現しないようにする方法

    こんにちは。 csvファイルに 10E098 という文字列がある場合、 このファイルをダブルクリックしてExcelで表示すると 1.00E+99 のように指数形式で表示されてしまいます。 (セルのプロパティも「指数」になっています) そのまま 10E098 という文字列で表示するようにしたいのですが どのようにすればよいのでしょうか? ちなみに、該当のセルの表示形式を「標準」にしても「文字列」に しても 1E+99 と表示されてしまって出来ませんでした。 よろしくお願いいたします。