//建立
void CExcel1Dlg::OnOK()
{
// TODO: Add extra validation here
COleVariant
covTrue((short)TRUE),
covFalse((short)FALSE),
covOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);
_Application ExcelApp;//excel对象
Workbooks wbsMyBooks;//工作簿集
_Workbook wbMyBook;//工作簿
Worksheets wssMysheets;//表单集
_Worksheet wsMysheet;//表单
Range rgMyRge;//
Range rgMyRgeFormat;//
LPDISPATCH lpDisp;//
//创建Excel 2000服务器(启动Excel)
if (!ExcelApp.CreateDispatch("Excel.Application",NULL))
{
AfxMessageBox("创建Excel服务失败!");
exit(1);
}
ExcelApp.SetVisible(false);//是否打开
wbsMyBooks.AttachDispatch(ExcelApp.GetWorkbooks(),true);//
wbMyBook.AttachDispatch(wbsMyBooks.Add(covOptional));
//得到Worksheets
wssMysheets.AttachDispatch(wbMyBook.GetWorksheets(),true);
//得到sheet1
wsMysheet.AttachDispatch(wssMysheets.GetItem(_variant_t("sheet1")),true);
//得到全部Cells,此时,rgMyRge是cells的集合
rgMyRge.AttachDispatch(wsMysheet.GetCells(),true);
//设置所有单元格为空
rgMyRge.SetValue(_variant_t(""));
CString str,str2;
str = "****";
rgMyRge.SetItem(_variant_t((long)1),_variant_t((long)2),_variant_t(str));
str = "****";
rgMyRge.SetItem(_variant_t((long)2),_variant_t((long)1),_variant_t(str));
str = "****";
rgMyRge.SetItem(_variant_t((long)2),_variant_t((long)2),_variant_t(str));
str = "****";
rgMyRge.SetItem(_variant_t((long)2),_variant_t((long)3),_variant_t(str));
str = "****";
rgMyRge.SetItem(_variant_t((long)2),_variant_t((long)4),_variant_t(str));
str = "****";
rgMyRge.SetItem(_variant_t((long)2),_variant_t((long)5),_variant_t(str));
str = "****";
rgMyRge.SetItem(_variant_t((long)2),_variant_t((long)6),_variant_t(str));
str = "****";
rgMyRge.SetItem(_variant_t((long)2),_variant_t((long)7),_variant_t(str));
str = "****";
rgMyRge.SetItem(_variant_t((long)2),_variant_t((long)8),_variant_t(str));
// rgMyRge.SetItem(_variant_t((long)3),_variant_t((long)8),_variant_t("12345678901234567890"));
// rgMyRge.SetNumberFormat(_variant_t("0.0"));
//设置格式
lpDisp = wsMysheet.GetRange(_variant_t("B3"),_variant_t("B105"));
ASSERT(lpDisp);
rgMyRgeFormat.AttachDispatch(lpDisp);
rgMyRgeFormat.SetNumberFormat(_variant_t("0"));
//设置字体
Font ft;
Interior it; //定义背景色变量
//表头
lpDisp = wsMysheet.GetRange(_variant_t("A1"),_variant_t("H1"));
rgMyRgeFormat.AttachDispatch(lpDisp);
ft.AttachDispatch(rgMyRgeFormat.GetFont());
ft.SetSize(_variant_t((long)20)); //字大小
lpDisp = wsMysheet.GetRange(_variant_t("A2"),_variant_t("H2"));
rgMyRgeFormat.AttachDispatch(lpDisp);
ft.AttachDispatch(rgMyRgeFormat.GetFont());
ft.SetColorIndex(_variant_t((long)3)); //字颜色
it.AttachDispatch(rgMyRgeFormat.GetInterior());
it.SetColorIndex(_variant_t((long)19)); //背景色
for(i=startrow; i<startrow+NumberofStudent; i++)
{
str.Format(_T("A%d"),i);
str2.Format(_T("H%d"),i);
if(i%2==0)
{
lpDisp = wsMysheet.GetRange(_variant_t(str),_variant_t(str2));
rgMyRgeFormat.AttachDispatch(lpDisp);
it.AttachDispatch(rgMyRgeFormat.GetInterior());
it.SetColorIndex(_variant_t((long)34)); //背景色
}
}
// 3:居中 2:左对齐 1:右对齐
lpDisp = wsMysheet.GetRange(_variant_t("A1"),_variant_t("H2"));
rgMyRge.AttachDispatch(lpDisp);
rgMyRge.SetHorizontalAlignment(_variant_t((long)3));
//合并单元格
lpDisp = wsMysheet.GetRange(_variant_t("A1"),_variant_t("H1"));
//ASSERT(lpDisp);
rgMyRge.AttachDispatch(lpDisp);
rgMyRge.Merge(_variant_t("0"));
//设置宽度为自动适应
//lpDisp = rgMyRge.GetEntireColumn();
//rgMyRge.AttachDispatch(lpDisp);
//rgMyRge.AutoFit();
lpDisp = wsMysheet.GetRange(_variant_t("A1"),_variant_t("A1"));
ASSERT(lpDisp);
rgMyRge.AttachDispatch(lpDisp);
lpDisp = rgMyRge.GetEntireRow();
rgMyRge.AttachDispatch(lpDisp);
//插入一行
//rgMyRge.Insert(_variant_t((long)1));
//打印预览
//wbMyBook.PrintPreview(_variant_t(false));
//释放对象
ExcelApp.SetVisible(true);//打开表格
rgMyRge.ReleaseDispatch();
wsMysheet.ReleaseDispatch();
wssMysheets.ReleaseDispatch();
wbMyBook.ReleaseDispatch();
wbsMyBooks.ReleaseDispatch();
ExcelApp.ReleaseDispatch();
CDialog::OnOK();
}
//通过窗口打开已有的表格
void CExcel1Dlg::OnOpen1()
{
_Application app;
Workbooks books;
_Workbook book;
Worksheets sheets;
_Worksheet sheet;
Range range;
VARIANT ret;
COleVariant covOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);
CFileFind filefind;
// TODO: Add your control notification handler code here
CString FilePathName;
CFileDialog dlg(TRUE, //TRUE为OPEN对话框,FALSE为SAVE AS对话框
NULL,
NULL,
OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,
(LPCTSTR)_TEXT("Worksheet Files (*.xls)|*.xls|Data Files (*.xlc;*.xls)|*.xlc; *.xls|All Files (*.*)|*.*||"),
NULL);
if(dlg.DoModal()==IDOK)
{
FilePathName=dlg.GetPathName(); //文件相对路径保存在了FilePathName里
app.CreateDispatch("Excel.Application");//开启Excel服务
if(!filefind.FindFile(FilePathName))
{
AfxMessageBox( "没有找到模版文档,请其查找" );
return;
}
LPDISPATCH lpDisp;
books=app.GetWorkbooks();
lpDisp = books.Open(FilePathName,
covOptional, covOptional, covOptional, covOptional,
covOptional, covOptional, covOptional, covOptional,
covOptional, covOptional, covOptional, covOptional
);//打开表格
//ExcelApp.SetVisible(false);//
book.AttachDispatch(lpDisp);//
sheets = book.GetWorksheets();
sheet = sheets.GetItem(COleVariant((short)1));
range = sheet.GetRange(COleVariant("A1"), COleVariant("C8"));
ret = range.GetValue();
COleSafeArray sa(ret);
app.SetVisible(true);
//app.Quit();
//m_ExlApp一定要释放,否则程序结束后还会有一个Excel进程驻留在内存中,而且程序重复运行的时候会出错
//app.ReleaseDispatch();
}
}
如果有不对的地方欢迎大家指正,有的函数我也没有看懂。。。。。。。懂得请解释一下。。。。。。