通过Com操作Excel
// stdafx.h : 標準のシステム インクルード ファイルのインクルード ファイル、または
// 参照回数が多く、かつあまり変更されない、プロジェクト専用のインクルード ファイル
// を記述します。
//
#pragma once
// 下で指定された定義の前に対象プラットフォームを指定しなければならない場合、以下の定義を変更してください。
// 異なるプラットフォームに対応する値に関する最新情報については、MSDN を参照してください。
#ifndef WINVER // Windows XP 以降のバージョンに固有の機能の使用を許可します。
#define WINVER 0x0501 // これを Windows の他のバージョン向けに適切な値に変更してください。
#endif
#ifndef _WIN32_WINNT // Windows XP 以降のバージョンに固有の機能の使用を許可します。
#define _WIN32_WINNT 0x0501 // これを Windows の他のバージョン向けに適切な値に変更してください。
#endif
#ifndef _WIN32_WINDOWS // Windows 98 以降のバージョンに固有の機能の使用を許可します。
#define _WIN32_WINDOWS 0x0410 // これを Windows Me またはそれ以降のバージョン向けに適切な値に変更してください。
#endif
#ifndef _WIN32_IE // IE 6.0 以降のバージョンに固有の機能の使用を許可します。
#define _WIN32_IE 0x0600 // これを IE. の他のバージョン向けに適切な値に変更してください。
#endif
#define WIN32_LEAN_AND_MEAN // Windows ヘッダーから使用されていない部分を除外します。
#include <stdio.h>
#include <tchar.h>
#define _ATL_CSTRING_EXPLICIT_CONSTRUCTORS // 一部の CString コンストラクタは明示的です。
#ifndef VC_EXTRALEAN
#define VC_EXTRALEAN // Windows ヘッダーから使用されていない部分を除外します。
#endif
#include <afx.h>
#include <afxwin.h> // MFC のコアおよび標準コンポーネント
#include <afxext.h> // MFC の拡張部分
#ifndef _AFX_NO_OLE_SUPPORT
#include <afxdtctl.h> // MFC の Internet Explorer 4 コモン コントロール サポート
#endif
#ifndef _AFX_NO_AFXCMN_SUPPORT
#include <afxcmn.h> // MFC の Windows コモン コントロール サポート
#endif // _AFX_NO_AFXCMN_SUPPORT
#include <iostream>
#import "h:\\Program Files\\Common Files\\microsoft shared\\OFFICE11\\MSO.DLL" \
rename("RGB","MsoRGB") \
rename("SearchPath","MsoSearchPath")
#import "h:\\Program Files\\Common Files\\Microsoft Shared\\VBA\\VBA6\\VBE6EXT.OLB"
#import "h:\\Program Files\\Microsoft Office\\Office11\\EXCEL.EXE" \
rename( "DialogBox", "ExcelDialogBox" ) \
rename( "RGB", "ExcelRGB" ) \
rename( "CopyFile", "ExcelCopyFile" ) \
rename( "ReplaceText", "ExcelReplaceText" ) \
exclude( "IFont", "IPicture" ) no_dual_interfaces
// TODO: プログラムに必要な追加ヘッダーをここで参照してください。
// TestCom.cpp : コンソール アプリケーションのエントリ ポイントを定義します。
//
#include "stdafx.h"
#include "TestCom.h"
#include <math.h>
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
// 唯一のアプリケーション オブジェクトです。
CWinApp theApp;
using namespace std;
int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
{
int nRetCode = 0;
// MFC を初期化して、エラーの場合は結果を印刷します。
if (!AfxWinInit(::GetModuleHandle(NULL), NULL, ::GetCommandLine(), 0))
{
// TODO: 必要に応じてエラー コードを変更してください。
_tprintf(_T("致命的なエラー: MFC の初期化ができませんでした。\n"));
nRetCode = 1;
}
else
{
// TODO: アプリケーションの動作を記述するコードをここに挿入してください。
try
{
if(!AfxOleInit())
{
AfxMessageBox(_T( "Cannot initialize COM dll" ));
return 1;
}
::CoInitialize(NULL);
Excel::_ApplicationPtr pExcelApp;
HRESULT hr = pExcelApp.CreateInstance("Excel.Application");
ATLASSERT(SUCCEEDED(hr));
pExcelApp->Visible = true; // make Excel’s main window visible
Excel::_WorkbookPtr pWorkbook = pExcelApp->Workbooks->Open(_bstr_t("C:\\test.xls")); // open excel file
Excel::_WorksheetPtr pWorksheet = pWorkbook->ActiveSheet;
pWorksheet->Name = L"Chart Data";
Excel::RangePtr pRange = pWorksheet->Cells;
const int nplot = 100;
const double xlow = 0.0, xhigh = 20.0;
double h = (xhigh-xlow)/(double)nplot;
pRange->Item[1][1] = L"x"; // read/write cell’s data
pRange->Item[1][2] = L"f(x)";
for (int i=0;i<nplot;++i)
{
double x = xlow+i*h;
pRange->Item[i+2][1] = x;
pRange->Item[i+2][2] = sin(x)*exp(-x);
}
Excel::RangePtr pBeginRange = pRange->Item[1][1];
Excel::RangePtr pEndRange = pRange->Item[nplot+1][2];
Excel::RangePtr pTotalRange =
pWorksheet->Range[(Excel::Range*)pBeginRange][(Excel::Range*)pEndRange];
Excel::_ChartPtr pChart = pExcelApp->ActiveWorkbook->Charts->Add();
// refer to :
// http://msdn.microsoft.com/en-us/library/microsoft.office.tools.excel.chart.chartwizard(v=vs.80).aspx
pChart->ChartWizard(
(Excel::Range*)pTotalRange,
(long)Excel::xlXYScatter,
6L,
(long)Excel::xlColumns,
1L,1L,
true,
L"My Graph",
L"x",L"f(x)");
pChart->Name = L"My Data Plot";
pWorkbook->Close(VARIANT_TRUE); // save changes
pExcelApp->Quit();
}
catch (_com_error& error)
{
const TCHAR *msg = error.ErrorMessage();
ATLASSERT(FALSE);
ATLTRACE2(error.ErrorMessage());
}
}
return nRetCode;
}
源代码来自:http://www.cnblogs.com/wdhust/archive/2011/04/20/2022963.html
posted on 2013-07-05 16:10 MoreNotepad++ 阅读(228) 评论(0) 收藏 举报
浙公网安备 33010602011771号