ページ 11

C++によるExcel入出力

Posted: 2011年5月27日(金) 11:48
by fulls
Excelファイル(xls,xlsx)のセルに数値を書きこみたいのです。

http://www-online.kek.jp/~keibun/pukiwi ... D%F8%CD%D1
こちらのサイトを参考(コピペ)して、

コード:

#import "C:\Program Files\Common Files\Microsoft Shared\Office10\MSO.DLL" \
の部分を自分の環境に合わせたのですが、

1>c:\users\User\documents\visual studio 2010\projects\dataforexcel01\dataforexcel01\debug\vbe6ext.tlh(632): error C2146: 構文エラー : ';' が、識別子 'CommandBars' の前に必要です。

という類のエラーが大量に出ます。
何をどうすれば...という感じで困っています。
どなたかわかる方がいらっしゃいましたら教えてください。


環境は
Windows7 Ultimate
Visual Studio 2010 Professional
Microsoft Office 2010
です。

よろしくお願いします。

Re: C++によるExcel入出力

Posted: 2011年5月27日(金) 12:12
by ookami
¥を「¥¥」または「/」に書き換えるとどうですか?

Re: C++によるExcel入出力

Posted: 2011年5月27日(金) 14:48
by non
プリプロセッサ行の最後に\は間違いなくありますか?
\の後ろにスペースとかないですよね。

Re: C++によるExcel入出力

Posted: 2011年5月28日(土) 12:55
by fulls
返信ありがとうございます。

>¥を「¥¥」または「/」に書き換えるとどうですか?
「¥¥」にしましたがダメでした。

>プリプロセッサ行の最後に\は間違いなくありますか?
はい。
間違いなくあります。

他のPC(windows7 Professional,office2007)でやったところ、コンパイルは出来ましたが、書き込みが終わってからメモリのアクセス違反がありました。
office2010ではダメなのでしょうか。

との方法等がありましたら、教えてください。
お願いします。

Re: C++によるExcel入出力

Posted: 2011年5月28日(土) 14:04
by bitter_fox
yucky001 さんが書きました: Excelファイル(xls,xlsx)のセルに数値を書きこみたいのです。
xlsxはファイルフォーマットがXMLを利用したものですが、それには対応しているのでしょうか?(xlsは従来のフォーマットですが・・・)
yucky001 さんが書きました: 他のPC(windows7 Professional,office2007)でやったところ、コンパイルは出来ましたが、書き込みが終わってからメモリのアクセス違反がありました。
office2010ではダメなのでしょうか。

との方法等がありましたら、教えてください。
お願いします。
他のPCでのコンパイラもVS2010ですか?またファイルの拡張子はxlsですか?

あともう少し広い範囲のソースコードを掲示した方が回答を受けやすくなると思いますよ。
それからOffice2000や2003からはかなり変更されているので最新の情報を探した方が良いように思います。

[hr][追記]
yucky001 さんが書きました: 1>c:\users\User\documents\visual studio 2010\projects\dataforexcel01\dataforexcel01\debug\vbe6ext.tlh(632): error C2146: 構文エラー : ';' が、識別子 'CommandBars' の前に必要です。
とありますがvbe6ext.tlhはVBA6.x向けの物ではないでしょうか?
Office2010からはVBA7.xなのでそれに対応したものを使う必要があるのではないでしょうか?

Re: C++によるExcel入出力

Posted: 2011年5月31日(火) 18:25
by fulls
なんかいじってたらできるようになりました。
しかし、自分でアレンジしたプログラムを実行するとエラーが出ます。
オリジナル: http://www-online.kek.jp/~keibun/pukiwi ... D%F8%CD%D1
アレンジしたコードは↓

コード:


#include <iostream>
#include<conio.h>

#import "C:\Program Files\Common Files\microsoft shared\OFFICE14\MSO.DLL" \
 rename("RGB","MSRGB") rename("DocumentProperties","MSDocumentProperties")
#import "C:\Program Files\Common Files\Microsoft Shared\VBA\VBA6\VBE6EXT.OLB"
#import "progid:Excel.Sheet" auto_search auto_rename rename_search_namespace("Office10")

class StartOle
{
public:
  StartOle() { ::CoInitialize(0); }
  ~StartOle() { ::CoUninitialize(); }
};

StartOle ole;

int main()
{
  using namespace Excel;

  _ApplicationPtr pXL;
  pXL.CreateInstance("Excel.Application");
  pXL->Visible[0] = VARIANT_TRUE;
//  pXL->Visible = TRUE;

  WorkbooksPtr pBooks = pXL->Workbooks;
  _WorkbookPtr pBook = pBooks->Add((long)xlWorksheet);
  _WorksheetPtr pSheet = pXL->ActiveSheet;

  pSheet->Name = "Test Sheet";

  char CellNum[8];
  for(int j=(int)'A';j<(int)'H';j++){
	  for(int i=0;i<10;i++){
	  
		sprintf_s(CellNum,"%c%d",(char)j,i);
		std::cout<<CellNum<<std::endl;
		pSheet->Range[CellNum]->Value = i;
	  }
  }

  pBook->Saved[0] = VARIANT_TRUE;
  _getch();
  return 0;
}
エラー内容:
ハンドルされていない例外が発生しました: Microsoft C++ の例外: _com_error (メモリの場所 0x0019fb48)。

EXCEL.tliというファイルの

コード:

#pragma implementation_key(8854)
inline Excel::RangePtr Excel::_Worksheet::GetRange ( const _variant_t & Cell1, const _variant_t & Cell2 ) {
    struct Range * _result = 0;
    HRESULT _hr = get_Range(Cell1, Cell2, &_result);
    if (FAILED(_hr)) _com_issue_errorex(_hr, this, __uuidof(this));
    return RangePtr(_result, false);     //←ここ
}
です。

どうすればいいかわかりません。
わかる方がおりましたら教えてください。

Re: C++によるExcel入出力

Posted: 2011年5月31日(火) 20:37
by bitter_fox
yucky001 さんが書きました: しかし、自分でアレンジしたプログラムを実行するとエラーが出ます。

エラー内容:
ハンドルされていない例外が発生しました: Microsoft C++ の例外: _com_error (メモリの場所 0x0019fb48)。
http://akas.cocolog-nifty.com/blog/2010 ... l_com.html
こちらは参考になりませんか?

Re: C++によるExcel入出力

Posted: 2011年5月31日(火) 20:52
by h2so5

コード:

pSheet->Range["A3"][vtMissing]->Value2 = 75;
yucky001 さんが書きました:

コード:

pSheet->Range[CellNum]->Value = i;
サンプルと書式が明らかに違う気がするのですが、これは問題ないのでしょうか?
([vtMissing]が無い、Value2ではなくValue)

Re: C++によるExcel入出力

Posted: 2011年6月01日(水) 06:17
by fulls
bitter_foxさん
返信ありがとうございます。
早速やってみます。

h2so5さん
>サンプルと書式が明らかに違う気がするのですが、これは問題ないのでしょうか?
これはネットでいろいろ探っていたらこの書き方があったのでやってみただけです。
結果は変わりませんでした。