_Application m_ExlApp;
//組件服務器的各個classes
_Workbook m_ExlBook;
Workbooks m_ExlBooks;
_Worksheet m_ExlSheet;
Worksheets m_ExlSheets;
// LPDISPATCH lpDisp;
Range m_ExlRge, usedRange;
if
(!m_ExlApp.CreateDispatch(
"Excel.Application"
,NULL))
{
AfxMessageBox(
"創建Excel服務失敗!"
);
return
;
}
//設置為可見
m_ExlApp.SetVisible(TRUE);
///////////////////下面得到應用程序所在的路徑///////////////////
CString theAppPath,theAppName;
char
Path[MAX_PATH];
GetModuleFileName(NULL,Path,MAX_PATH);
//得到應用程序的全路徑
theAppPath=(CString)Path;
theAppName=AfxGetApp()->m_pszAppName;
theAppName+=
".exe"
;
//把最后的文件名去掉
int
length1,length2;
length1=theAppPath.GetLength();
length2=theAppName.GetLength();
theAppPath.Delete(length1-length2,length2);
////////////////////////////////////////////////////////////////
COleVariant covOptional((
long
)DISP_E_PARAMNOTFOUND, VT_ERROR);
// Get the Workbooks collection so that you can add a new workbook
m_ExlBooks.AttachDispatch(m_ExlApp.GetWorkbooks());
// 得到Workbooks
m_ExlBook = m_ExlBooks.Add(covOptional);
// 得到Workbook
// m_ExlBooks.AttachDispatch(m_ExlApp.GetWorkbooks(),TRUE);
// m_ExlBook.AttachDispatch(m_ExlBooks.Add((_variant_t)TempPath),TRUE);//加載EXCEL模板
m_ExlSheets.AttachDispatch(m_ExlBook.GetSheets(),TRUE);
//加載Sheet頁面
//添加新的Sheet頁面
m_ExlSheets.Add(vtMissing,vtMissing,_variant_t((
long
)1),vtMissing);
//刪除第二個Sheet頁面
m_ExlSheet.AttachDispatch(m_ExlSheets.GetItem(_variant_t((
long
)2)),TRUE);
m_ExlSheet.Delete();
//把第一個Sheet頁面的名字改變為TestSheet
m_ExlSheet.AttachDispatch(m_ExlSheets.GetItem(_variant_t((
long
)1)),TRUE);
m_ExlSheet.SetName(
"TestSheet"
);
///////合並第一行單元格A1至D1//////
//加載要合並的單元格
m_ExlRge.AttachDispatch(m_ExlSheet.GetRange(_variant_t(
"A1"
),_variant_t(
"D1"
)),TRUE);
m_ExlRge.Merge(_variant_t((
long
)0));
////////設置表格內容////////
m_ExlRge.AttachDispatch(m_ExlSheet.GetCells(),TRUE);
//加載所有單元格
m_ExlRge.SetItem(_variant_t((
long
)1),_variant_t((
long
)1),_variant_t(
"數學系研究生課程統計"
));
m_ExlRge.SetItem(_variant_t((
long
)2),_variant_t((
long
)1),_variant_t(
"課程名"
));
m_ExlRge.SetItem(_variant_t((
long
)2),_variant_t((
long
)2),_variant_t(
"課時"
));
m_ExlRge.SetItem(_variant_t((
long
)2),_variant_t((
long
)3),_variant_t(
"難度"
));
m_ExlRge.SetItem(_variant_t((
long
)2),_variant_t((
long
)4),_variant_t(
"教學方式"
));
m_ExlRge.SetItem(_variant_t((
long
)3),_variant_t((
long
)1),_variant_t(
"泛函分析"
));
m_ExlRge.SetItem(_variant_t((
long
)3),_variant_t((
long
)2),_variant_t(
"60"
));
m_ExlRge.SetItem(_variant_t((
long
)3),_variant_t((
long
)3),_variant_t(
"普通"
));
m_ExlRge.SetItem(_variant_t((
long
)3),_variant_t((
long
)4),_variant_t(
"老師講課"
));
m_ExlRge.SetItem(_variant_t((
long
)4),_variant_t((
long
)1),_variant_t(
"微分流形"
));
m_ExlRge.SetItem(_variant_t((
long
)4),_variant_t((
long
)2),_variant_t(
"40"
));
m_ExlRge.SetItem(_variant_t((
long
)4),_variant_t((
long
)3),_variant_t(
"變態難"
));
m_ExlRge.SetItem(_variant_t((
long
)4),_variant_t((
long
)4),_variant_t(
"自學"
));
m_ExlRge.SetItem(_variant_t((
long
)5),_variant_t((
long
)1),_variant_t(
"二階橢圓型方程與方程組"
));
m_ExlRge.SetItem(_variant_t((
long
)5),_variant_t((
long
)2),_variant_t(
"60"
));
m_ExlRge.SetItem(_variant_t((
long
)5),_variant_t((
long
)3),_variant_t(
"很難"
));
m_ExlRge.SetItem(_variant_t((
long
)5),_variant_t((
long
)4),_variant_t(
"討論"
));
m_ExlRge.AttachDispatch(m_ExlSheet.GetUsedRange());
//加載已使用的單元格
m_ExlRge.SetWrapText(_variant_t((
long
)1));
//設置單元格內的文本為自動換行
//設置齊方式為水平垂直居中
//水平對齊:默認=1,居中=-4108,左=-4131,右=-4152
//垂直對齊:默認=2,居中=-4108,左=-4160,右=-4107
m_ExlRge.SetHorizontalAlignment(_variant_t((
long
)-4108));
m_ExlRge.SetVerticalAlignment(_variant_t((
long
)-4108));
///////設置整體的字體、字號及顏色//////
Font ft;
ft.AttachDispatch(m_ExlRge.GetFont());
ft.SetName(_variant_t(
"宋體"
));
//字體
ft.SetColorIndex(_variant_t((
long
)11));
//字的顏色
ft.SetSize(_variant_t((
long
)12));
//字號
///////////設置標題字體及顏色//////////
m_ExlRge.AttachDispatch(m_ExlSheet.GetRange(_variant_t(
"A1"
),_variant_t(
"D1"
)));
ft.AttachDispatch(m_ExlRge.GetFont());
ft.SetBold(_variant_t((
long
)1));
//粗體
ft.SetSize(_variant_t((
long
)13));
ft.SetColorIndex(_variant_t((
long
)2));
CellFormat cf;
cf.AttachDispatch(m_ExlRge.GetCells());
//////////////設置底色/////////////////
Interior it;
it.AttachDispatch(m_ExlRge.GetInterior());
it.SetColorIndex(_variant_t((
long
)11));
//標題底色
////表格內容的底色////
m_ExlRge.AttachDispatch(m_ExlSheet.GetRange(_variant_t(
"A2"
),_variant_t(
"D5"
)));
it.AttachDispatch(m_ExlRge.GetInterior());
it.SetColorIndex(_variant_t((
long
)15));
//////////////為表格設置邊框/////////////
Range UnitRge;
CString CellName;
for
(
int
i=1;i<=4;i++)
{
for
(
int
j=1;j<=4;j++)
{
CellName.Format(
"%c%d"
,j+64,i);
//單元格的名稱
UnitRge.AttachDispatch(m_ExlRge.GetRange(_variant_t(CellName),_variant_t(CellName)));
//加載單元格
//LineStyle=線型 Weight=線寬 ColorIndex=線的顏色(-4105為自動)
UnitRge.BorderAround(_variant_t((
long
)1),_variant_t((
long
)2),_variant_t((
long
)-4105),vtMissing);
//設置邊框
}
}
//釋放對象(相當重要!)
m_ExlRge.ReleaseDispatch();
m_ExlSheet.ReleaseDispatch();
m_ExlSheets.ReleaseDispatch();
m_ExlBook.ReleaseDispatch();
m_ExlBooks.ReleaseDispatch();
//m_ExlApp一定要釋放,否則程序結束后還會有一個Excel進程駐留在內存中,而且程序重復運行的時候會出錯
m_ExlApp.ReleaseDispatch();
//退出程序 m_ExlApp.Quit();
