どのように読み取り/書き込みデータはエクセル2007年にはc++?

StackOverflow https://stackoverflow.com/questions/1727361

  •  19-09-2019
  •  | 
  •  

質問

どのように読み取り/書き込みデータはエクセル2007年にはc++?

役に立ちましたか?

解決

Excelは、あなたのC ++アプリケーションから使用できるCOMインターフェイスを提供します。

私はExcel 2003の使用経験があるが、私は、Excel 2007のために、それはまた仕事になると思います。

これは、例えば、行うことができます#importを持つか、またはこの資料に記載の方法で: http://support.microsoft.com/kb/216686する

他のヒント

(COMディスパッチを使用して)Pythonのソリューションがここにあります:のhttp://snippets.dzone .COM /ポスト/ショー/ 2036

これは、C ++ではないですが、COMインターフェイスは同じである必要がありますに関係なく、使用する言語、右?

あなたはポートすべてに必要はありません。ただ、__init__set_rangeget_valueset_valuesave(またはsave_as)、close、およびquit。 (パイソン自動GCを持っているよう)あなたはまた、ごみを処分する必要があるかもしれません。

(私はもうExcelを持っていないので、私がテストしていません - あなたは、おそらくのpythonとpythonwinをダウンロードして、それをチェックする必要があります)

それとも、できたばかりのポート次のコードを(および変更):

from win32com.client import Dispatch
app = Dispatch("Excel.Application")
app.Visible = True # spooky - watch the app run on your desktop!
app.Workbooks.Open("C:\\book.xls")

range = app.ActiveWorkbook.Sheets(1).Range("a1") 
print 'The range was:'
print range.Value

range.Value = 42

print 'The value is now 42'  

app.ActiveWorkbook.Save()
app.ActiveWorkbook.SaveAs("C:\\excel2.xls")

app.ActiveWorkbook.Close()
app.Quit()

# any gc to do?

Excel2007のファイルは単にzipファイルです。う名前を変更します。xlsxます。zip:抽出できファイルやフォルダの中に別のフォルダを作テキストエディタで示したものであるというXMLファイルです。

その解

  1. 共用のクラスを解凍おxlsx
  2. 利用xmlパーサのものを掴んだデータ
  3. まsomethig、すべてのzip

なCOMオブジェクトが必要です。によってはc++コンパイラですができ、必要な源です。

あく必要があります。

1)事前に必要なファイルがインストールされていやlocatable.

Blindinglyかんでいただくには最適なExcelのバージョンを設置し、そのを見つけることができる機能で、必要なMicrosoftライブラリ(およびその箇所)。すなわちMSO.DLL,VBE6EXT.OLBとEXCEL.EXE

2)設定、Microsoftの図書館です。

ごC++コードしましょう開発プロジェクトの簡単なコンソール-アプリケーションも非常に大切である、輸入図書館に任意のC++アプリケーションが界面を作成します。私の例を使ってい:

#import "C:\\Program Files (x86)\\Common Files\\microsoft shared\\OFFICE11\\MSO.DLL" \
rename( "RGB", "MSORGB" )

using namespace Office;  

#import "C:\\Program Files (x86)\\Common Files\\microsoft shared\\VBA\\VBA6\\VBE6EXT.OLB"  

using namespace VBIDE;  

#import "C:\\Program Files (x86)\\Microsoft Office\\OFFICE11\\EXCEL.EXE" \  
    rename( "DialogBox", "ExcelDialogBox" ) \  
    rename( "RGB", "ExcelRGB" ) \  
    rename( "CopyFile", "ExcelCopyFile" ) \  
    rename( "ReplaceText", "ExcelReplaceText" ) \  
    exclude( "IFont", "IPicture" ) no_dual_interfaces 

3)利用ExcelのオブジェクトモデルあるいはC++コード

例えば、を宣言するのにレンズを平凸レンズアプリケーションオブジェクトのポインタの読み込みや書き込みができるExcelのワークブック:

Excel::_ApplicationPtr pXL;  
pXL->Workbooks->Open( L"C:\\dump\\book.xls" );

アクセスおよび操作は、Excelワークシートの細胞内で

Excel::_WorksheetPtr pWksheet = pXL->ActiveSheet;  
Excel::RangePtr pRange = pWksheet->Cells;  
double value = pRange->Item[1][1];  
pRange->Item[1][1] = 5.4321; 

います。いより密度の濃いディスカッションです ブログ投稿.

私はプロジェクトのカップルに使用してきた

ローテクな方法は、それが外部プログラムを実行するどんな簡単なスクリプト/マクロ/を作ることです。 C ++でその外部プログラムを書きます。外部プログラムからその入力を読み込み、.csvファイル(簡単なカンマ区切りのテキストファイル)に出力を書き込むようにすることを取得します。 Excelは、簡単に読んで、.csvファイルを書き込むので、この設定は、あなたが実行可能なソリューションを作るために必要なすべてを提供しますすることができます。

あなたが最高のパフォーマンスが必要な場合は、バイナリのExcelファイルを書き込むと、移動するための方法であると、それらを書くことは、それらを読んほど難しいことではありません。バイナリファイル形式は、比較的よくOpenOffice.orgプロジェクトによって文書化されます:

http://sc.openoffice.org/excelfileformat.pdfする

とMicrosoftはまた、ドキュメントをリリースしました。

<のhref = "http://download.microsoft.com/download/0/B/E/0BE8BDD7-E5E8-422A-ABFD-4342ED7AD886/Excel97-2007BinaryFileFormat(xls)Specification.xps" のrel = "nofollowをnoreferrer "> http://download.microsoft.com/download/0/B/E/0BE8BDD7-E5E8-422A-ABFD-4342ED7AD886/Excel97-2007BinaryFileFormat(XLS)Specification.xps の

あなたは、ほとんどのデータと少しのフォーマットで、多くのExcelファイルを書き込むために、そしてあなたが同時にファイルを開くにはしたくない場合がある場合は、

このソリューションは最適に動作します。あなたが後でそれを開くために、単一のExcelファイルを記述する場合、他のポスターが説明したように、あなたはおそらくpropsed C ++ COMインターフェイスを使用することができます。

は、Excel COMアドインを作成していない限り、高価なアウトプロセスの呼び出しが必要となるCOMインターフェイスを使用しました。あなたが現在のExcelシートにデータをインポートするアドインを作成する場合は、シートを充填することは、まだファイルをダンプするよりもはるかに遅くなりますが、一度に一つのファイルに対して、これは、ユーザーシナリオに応じて許容することができます。あなたはCOMインターフェイスを使用することを決定しない場合は、Excelへのコールの数を最小限に抑えます。行と列でスタイルプロパティを設定可能としない細胞あたりで、それらが存在する場合、値の配列を挿入することを可能にする方法を使用。

あなたは、Excelなしで簡単にExcelファイルからデータを読み書きするためにODBCを使用することができます。リンク:ここ

ODBCを使用してデータを書き込む方法については、

リンク:ここ

私はXLSファイルに書き込みをする前にCodeProjectのから入手可能であるC ++クラスのセットを使用しました。

これは本当に使いやすく、そして無料です!あなたはここにのそれを見つけることができます。

私にセットアップする時間を取らなかった。

scroll top