#include <stdio.h>
#include <stdlib.h>
#include <vector>
#include <iostream>
#include <string>
#include <windows.h>
//Excelを操作するためのタイプライブラリを読みこむ (Excel2010(32bit))
#import "C:\Program Files\Common Files\microsoft shared\OFFICE14\MSO.DLL"
#import "C:\Program Files (x86)\Common Files\Microsoft Shared\VBA\VBA6\VBE6EXT.OLB" rename("CommandBars", "ExcelCommandBars")
#import "C:\Program Files\Microsoft Office\Office14\EXCEL.EXE" rename("RGB", "Excel2010RGB") rename("DialogBox", "ExcelDialogBox") rename("CopyFile", "ExcelCopyFile") rename("ReplaceText", "ExcelReplaceText6")
void main(void)
{
getchar();
}
余計なインクルードは気にしないでください。そもそもC++でエクセル扱うのは相性悪いのでおとなしくC#にしましょう。
とはいえそれでも使わないと行けない状況であれば頑張りましょう。(C#にしたい)
やりたい事:C++でエクセルを操作したい。その前に#importが通らない
調べると#importでどの記事も3つぐらいのなにかをインポートしてました。
思考指定でコピペして持ってくるとエラーで通りません。
厄介な所はエクセルのバージョンによってフォルダ名やフォルダの場所が違うので見つけた記事と完全一致の環境でないとサンプルは通らないと思います。Office14やOffice17とかC:\Program Files (x86)とかC:\Program Filesなど違うので注意
######罠1:インストールしたエクセルによってインポートするファイルや場所が違う
とりあえず必要なのは以下3つ
MSO.DLL
VBE6EXT.OLB
EXCEL.EXE
Everithingを使って探すかCフォルダのプログラムファイルの中を走り回ってさがすかしてください。
https://forest.watch.impress.co.jp/library/software/everything/
見つけたら1ファイルずつ読み込みましょう。上の順番通りにしましょう。
自分の場合はMSO.DLLは問題なく読み込めました。
ひかかった所
#include って書いた瞬間にファイルが無いとかエラーでると思います。
#importはコンパイルして展開されたあとにエラーを出力するので書いた瞬間はエラーのままだったりします。
次にVBE6EXT.OLBは rename がないとエラーでした。
おそらくVisualStudioがすでに読み込んでるクラスと競合してエラーになるんだと思います。
なのでエラーで rename しろ!といわれるか、二重定義されてるとかいわれるます。
リネームしましょう。(初めて使った)
rename("CommandBars", "ExcelCommandBars")
ExcelCommandBarsというのは別に被らなさそうな名前であればなんでも良いと思います。
最後のEXCEL.EXE
めちゃくちゃエラーでたので1個づつリネームしていったら治りました。
とりあえず最低の準備はできました。
次はエクセルにアクセスしてみたいと思います。来週書きます。