注:在此保存一个VC6.0下的超详细的mfc操作Excel表的网址
http://blog.csdn.net/shuilan0066/article/details/7936336
1.首先是搭建环境以及打开一个已经存在的Excel表,这个网上很多,而我是直接借鉴一下网址的做法。
http://www.360doc.com/content/13/0219/15/7023119_266558527.shtml
//上面这个网址中少了一个步骤,就是在dialog初始化接口(OnInitDialog)中需要添加下面一句:
if(!AfxOleInit())//初始化COM库 { AfxMessageBox(_T("初始化OLE失败")); return FALSE; }
2.创建Excel表并保存,代码如下
void CtestFile_excelDlg::OnBnClickedOk() { // TODO: Add your control notification handler code here //OnOK(); this->UpdateData(); CApplication app; CWorkbooks books; CWorkbook book; CWorksheets sheets; CWorksheet sheet; CRange range; CRange iCell; LPDISPATCH lpDisp; COleVariant vResult; COleVariant covOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR); if(!app.CreateDispatch(L"Excel.Application")) { AfxMessageBox(L"无法启动Excel服务器!"); return; } app.put_Visible(TRUE); app.put_UserControl(TRUE); //获取工作薄集合 books = app.get_Workbooks(); book = books.Add(covOptional);//添加一个工作薄 sheets = book.get_Sheets();//获取工作表集合 sheet = sheets.get_Item(COleVariant((short)1));//获取第一个工作表 //选择工作表中A1:A1单元格区域 range = sheet.get_Range(COleVariant(_T("A1")),COleVariant(_T("A1"))); //设置A1 = Hello Excel! range.put_Formula(COleVariant(_T("Hello Excel!"))); //调整格式,设置粗体 //Font font = range.get_Font(); //font.SetBold(COleVariant((short)TRUE)); //选择A2单元格,插入公式 =RAND()*1000000,并设置A2数字格式为货币格式 range = sheet.get_Range(COleVariant(_T("A2")),COleVariant(_T("A2"))); range.put_Formula(COleVariant(_T("=RAND()*1000000"))); range.put_NumberFormat(COleVariant(_T("$0.00"))); //选择A:A列,设置宽度为自动适应 iCell = range.get_EntireColumn(); iCell.AutoFit(); //显示excel表格,并设置状态为用户可控制 app.put_Visible(TRUE); app.put_UserControl(TRUE); //另存为excel表 book.SaveAs(COleVariant(m_filename),covOptional, //m_filename是要创建的excel文件全路径 covOptional,covOptional, covOptional,covOptional,(long)0, covOptional,covOptional,covOptional, covOptional,covOptional);
books.Close(); app.Quit(); // 退出 //释放对象 iCell.ReleaseDispatch(); range.ReleaseDispatch(); sheet.ReleaseDispatch(); sheets.ReleaseDispatch(); book.ReleaseDispatch(); books.ReleaseDispatch(); app.ReleaseDispatch(); OnOK(); //AfxMessageBox(str); }
3.在调用SaveAs保存已经excel文件时会弹出另存为对话框,如果点击的是“是否”或者取消,那么saveas之后的释放对象将都不会执行。如果要隐藏“另存为”对话框,那么在SaveAs之前调用下面一句
app.put_DisplayAlerts(false); //隐藏弹出的对话框