どのように読み取り/書き込みデータはエクセル2007年にはc++?
-
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_range
、get_value
、set_value
、save
(またはsave_as
)、close
、およびquit
。 (パイソン自動GCを持っているよう)あなたはまた、ごみを処分する必要があるかもしれません。
それとも、できたばかりのポート次のコードを(および変更):
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ファイルです。
その解
- 共用のクラスを解凍おxlsx
- 利用xmlパーサのものを掴んだデータ
- ま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ファイルを書き込むので、この設定は、あなたが実行可能なソリューションを作るために必要なすべてを提供しますすることができます。
これは、すべてのIDispatchインターフェースを介して行うことができます。それはすぐに(乾杯マイクロソフト)複雑本当に流血得ることができますが、少なくとも一度は、あなたがあまりにも簡単に他のMSのアプリケーションとの統合見つけるエクセル丸い頭を持っている:)
幸いにも誰かが codeguru 誰がプロセスがいいと簡単になりました。私はExcelは、さらに、やっていたもの丸い頭を取得するために始めたコードを読んだ後は、私はそれは私が望んでいた他の事を行うには、それを拡張するのはとても簡単になりました。ちょうどあなたがIDispatchインターフェースを経由してExcelにコマンドを送信していることを覚えておいてください。これは、あなたがプログラム的にそれを行う方法を見つけ出すために何かをするだろうかを考える必要があることを意味します。
編集:コードの第一人者の一例は、Excel 2003のためですが、2007年にそれを拡張することはかなり簡単にする必要があります。)
のOpenXml SDK にしてここからスタート。
これは非常に長い時間となっているが、私はExcelファイルで取得するためにジェットOLEDBを使用していました。あなたはその方向に検索を開始する可能性があります。
私は過去に、このためのサードパーティのコンポーネントを使用しています: SMソフトウェアからOLE XlsFile >(自由、しかし、安価ではありません)。マイクロソフトCOMコンポーネントの上に、このコンポーネントの利点は、Excelがインストールされていない場合でも、XLSファイルを書き込むためにそれを使用することができるということです。
また、あなたが交換形式としてCSVファイルを使用する場合は、埋め込み式や書式、何かではない可能性を持つspeadsheetsまたはワークブックを作成することができます。
あなたが最高のパフォーマンスが必要な場合は、バイナリの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へのコールの数を最小限に抑えます。行と列でスタイルプロパティを設定可能としない細胞あたりで、それらが存在する場合、値の配列を挿入することを可能にする方法を使用。
私はXLSファイルに書き込みをする前にCodeProjectのから入手可能であるC ++クラスのセットを使用しました。
これは本当に使いやすく、そして無料です!あなたはここにのそれを見つけることができます。
私にセットアップする時間を取らなかった。