MFC + VS2008 对Excel文件的操作

时间:2021-01-26 10:03:32


注:在此保存一个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); //隐藏弹出的对话框