• ベストアンサー

Visual C++ 2008からExcel2003への出力方法

私はVisual C++ 2008でWindowsフォームを使用し、アンケートを作成しています。同じフォームに回答のラジオボタン(はい、いいえ、どちらでもないの3種)を設置し、その結果をExcel2003のセルへ出力したいと考えているのですが、可能ですか? ※セルへ出力する値は数字でしたいと思っています。 はい・・2、いいえ・・0、どちらでもない・・1

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

  • ベストアンサー
noname#144013
noname#144013
回答No.4

こんにちは。FarEyesです。 すみません、私の【回答:ANo.2】の下記部分について訂正があります。 >コンパイルエラーが出たのはそのためだと思います。(CLR、C++/CLIの記述形式とは異なるため) >利用するには使用している環境に合わせてソースの修正等を行う必要があります。 これは、記述形式の違いと言うよりも「Visual C++ 2008 Express Edition」の標準設定&環境だけでは、 Excelを操作するための機能が利用できない状態なのではないかと思います。 ※具体的に何が不足しているかとか、どういうソースの記述をしたら良いのかは、申し訳ありません が私には判りません。その辺りは関連書籍及びWEB上の関連サイト等を当たってみてください。 あと、もう一つ【回答:ANo.2】について補足があります。 CSV形式ファイルを利用する件ですが、一つ難点があります。 ExcelでCSVファイルを読み込んだ場合、セルのサイズ、フォントなどが固定されてしまうので表示が 見辛い場合があります。 見やいすようにユーザーがセルサイズの変更及びタイトル・項目名の付加等の修正はできますが、 そうするとその成形した状態を維持したい場合、ファイルをExcel標準のブック形式(拡張子 .xls) のファイルとして保存しなくてはいけません。 CSV形式で保存すると、データのみのテキストファイルなので成形した情報は失われてしまいます。 結果として同じデータですが、ファイル形式の違う2つのファイル(*.csv と *.xls)ができてしまい データ管理(一元化)がし辛くなります。 データファイルをCSV形式ファイルのみに一元化して、かつExcelで開いた際にきれいに成形した状態 で表示させる一つのやり方としてExcelのマクロ機能(VBA)を利用した以下のような方法が考えられます。 ■ExcelのVBAを利用したデータ表示方法の例 1)予めセルサイズ・フォント等の設定及び表の外枠・タイトル・項目等を入れたExcelブック(*.xls)を  作成する。 2)そのExcelブックにマクロ(VBA)を実装し、CSVファイルを読み込んでセルに展開する処理を作りこむ。 3)そのExcelブックを開いて、C++側プログラムで出力されたCSVデータファイルを読み込んでセルに  データを展開させる。   【C++側プログラム】 → 「CSV形式データファイル」 → 【Excelブック:マクロ実装】                 ↑                  ↑           C++側プログラムで出力        マクロで読み込んでセルに展開 このやり方では、C++のプログラムに加え、Excelのマクロ(VBA)も作らなくてはいけないので、 勉強部分も含め作業が多くて大変ですが、プログラミング技術習得の一手段として取り組んで みるのも良いかもしれません。

その他の回答 (3)

noname#144013
noname#144013
回答No.3

tierra31さん、こんばんは。 FarEyesです。 度々すみません。 本スレとは直接関係ありませんが、C++/CLIでプログラミングを勉強するに当たって、 初心者向けで解り易く参考になりそうなホームページを見つけました。 ■超初心者の C++/CLI(CLR) 入門 http://www13.plala.or.jp/kmaeda/cpp_cli/cpp_cli.htm このサイトでは、基本的なファイル操作とか、フォームの操作とか、その他多方面に渡って 具体的で判りやすいサンプルと共に、詳しく解説されています。  オススメです。(^_^) 一度、ご覧になってみては如何でしょう? ※きっと、本件の参考にもなると思います。

noname#144013
noname#144013
回答No.2

tierra31さん、こんにちは。 tierra31さんへ 少し本題とはそれますが(御免なさい)、まず、こういったプログラミング関連の掲示板でご質問される際は、 ご使用の開発環境の種類・バージョン、及び作成するアプリケーションのタイプなどをもう少し具体的に明記 しておくとアドバイスされやすいと思いますし、アドバイスする側にとっても内容を理解しやすいと思います。 ■例えば以下のような 1)開発環境の種類・バージョンの例  Visual C++ 2008 Express Edition  Visual C++ 2005 Express Edition  Visual C++ 2005 Standard Edition  Visual C++ 6.0 Professional Edition  ※Editionによって利用可能な環境が違ってくるので、Edition名まで省略せずに明記する。. 2)作成するアプリケーションタイプの例  コンソールアプリケーション  CLR Windowsフォームアプリケーション  MFC MDIアプリケーション  MFC SDIアプリケーション  MFC ダイアログベースアプリケーション  ※アプリケーションタイプによってプログラムの形態、利用できるライブラリ環境などが違ってきます。 私は、tierra31さんの立てられたもう一つのスレ(下記■関連スレ参照)にて、お使いの環境及び作成 しているプログラムのタイプが、   「Visual C++ 2008 Express Edition」+「CLR Windowsフォームアプリケーション」 であると判断できますが、このスレしか見たことがない人にとっては判らないので、内容が判断しずらい ですし、また誤解も招きやすいと思います。 それと、このスレの質問内容は下記関連スレの質問内容の延長及び関連するものですので、別スレを 立てられるよりも同一スレで追加の質問として書き込みされるか、もしくは新たにスレを立てるにしても 関連スレへのリンクを張る形にすれば、アドバイスする側&される側双方にとって、その経緯などが掴め ますし、内容も理解しやすいと思います。 ■関連スレ Visual C++ 2008EEでフォーム間の変数渡し http://qanda.rakuten.ne.jp/qa4300748.html さて本題ですが、titokaniさんが紹介されたサイトのサンプル例は、MFCアプリケーションの場合ですので tierra31さんの環境でそのまま利用するのは難しいと思います。 コンパイルエラーが出たのはそのためだと思います。(CLR、C++/CLIの記述形式とは異なるため) 利用するには使用している環境に合わせてソースの修正等を行う必要があります。 Excelを直接アクセスしてセルの操作を行うのは、上記のサンプル例の方法などを採ればできなくはない ですが、それなりの知識が必要ですし難しいのではと思います。 そこで、直接セルを操作するのではなく、作成するプログラムでデータをCSV形式(カンマ・TAB・スペース 区切りの形式)のテキストファイルとして出力し、そのファイルをExcelで開いて(手動操作にはなりますが)、 セルに表示させる方法は如何でしょう? こちらの方は比較的簡単なプログラムで可能かと思います。 ■CSV形式ファイルを使ったデータ渡しの例   【作成したプログラム】 → 「CSV形式データファイル」 → 【Excel】                 ↑                   ↑              プログラムで処理           手動で開く 残念ながら私は、「CLR、C++/CLI」には詳しくないので具体的なプログラムソースは示せませんが、 その辺のことは、Googleなどで、   "Visual C++ 2008 Express Edition ファイル操作" などのキーワードで検索すればいくつか見付かるのではないかと思います。 あと、もう一つ余計なアドバイスですが、一冊でもいいので「Visual C++ 2008 Express Edition」関連の プログラミング入門書を入手し、お読みになることをお勧め致します。 全部読まなくても良いので、判らないことがあったらその都度、参考になりそうなページを探して読んで みては如何でしょうか? ※プログラミング入門書は、見て判りやすいものが第一ですが、具体的ですぐに作成・実行できるサン プルプログラムがCD-ROM/DVD等のメディアで添付されているものの方が良いと思います。

  • titokani
  • ベストアンサー率19% (341/1726)
回答No.1

ちょっとバージョンが古いですが、こちらが参考になるんじゃないでしょうか。 http://www.ujasiri.com/prglib/vc/excel/vc_excel.html

tierra31
質問者

補足

ご回答ありがとうございます。 教えていただいたサイトの「ExcelのCellへ書き出す」のページの最初にある #import "C:\Program Files\Microsoft Office 2000\Office\Mso9.dll" no_namespace rename("DocumentProperties", "DocumentPropertiesXL") #import "C:\Program Files\Common Files\Microsoft Shared\VBA\VBA6\Vbe6ext.olb" no_namespace #import "C:\Program Files\Microsoft Office 2000\Office\excel9.olb" rename("DialogBox", "DialogBoxXL") rename("RGB", "RBGXL") rename("DocumentProperties", "DocumentPropertiesXL") no_dual_interfaces これを追加したところ、error C2812: #import は /clr:pure および /clr:safe でサポートされていません というエラーが表示されてしまったのですが、原因が分かりません。

関連するQ&A

専門家に質問してみよう