在查閱了大量資料后我成功實現(xiàn)了數(shù)據(jù)的導出,方法如下。
首先Ctrl+W打開類向?qū)?,新建一個類,并選擇從Type Library添加。這里,由于我用的是Office 2003,因此添加的是Office安裝路徑下的Excel.exe(在Office 2000環(huán)境下添加的應該是Excel9.OLB) 。在彈出的Confirm Classes里選擇_Application,Workbooks,_Workbook,Worksheets ,_Worksheet,Range ,F(xiàn)ont 這幾個類,并確定新生成的CPP和H文件的名稱,這里我定為Excel.cpp,Excel.h。然后確定,你會發(fā)現(xiàn)類視圖里已經(jīng)有了剛才添加的這些新類。
由于我需要將datagrid里已經(jīng)顯示出來的Sql數(shù)據(jù)導出到Excel中,因此建立一個按鈕,并設單擊響應函數(shù)Output()。我的datagrid控件變量名為m_datagrid,代碼如下:
首先頭文件里#include "Excel.h"
接下來Output函數(shù):
void CEx::OnOutput() //導出按鈕
{
// TODO: Add your control notification handler code here
_Application app; //程序?qū)ο?/font>
Workbooks books; //工作簿集合
_Workbook book; //工作簿
Worksheets sheets; //工作表集合
_Worksheet sheet; //工作表
Range range; //單元格范圍
Font font; //字體
Range cols;
COleVariant covOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);
if( !app.CreateDispatch("Excel.Application") ){
this->MessageBox("無法創(chuàng)建Excel應用!");
return;}
books=app.GetWorkbooks();
book=books.Add(covOptional); //新建工作簿
sheets=book.GetSheets();
sheet=sheets.GetItem(COleVariant((short)1)); //以下是我的具體表
if(m_table=="Ylypro") //原料油性質(zhì)導出
{
range=sheet.GetRange(COleVariant("A1"),COleVariant("a1")); //字段名設置
range.SetValue2(COleVariant("廠名"));cols=range.GetEntireColumn();cols.SetColumnWidth(_variant_t((long)8)); //設置Excel列寬
range=sheet.GetRange(COleVariant("b1"),COleVariant("b1"));
range.SetValue2(COleVariant("工藝"));cols=range.GetEntireColumn();cols.AutoFit();
range=sheet.GetRange(COleVariant("c1"),COleVariant("c1"));
range.SetValue2(COleVariant("日期"));cols=range.GetEntireColumn();cols.SetColumnWidth(_variant_t((long)12));
range=sheet.GetRange(COleVariant("d1"),COleVariant("d1"));
range.SetValue2(COleVariant("時間段"));cols=range.GetEntireColumn();cols.SetColumnWidth(_variant_t((long)12));
range=sheet.GetRange(COleVariant("e1"),COleVariant("e1"));
range.SetValue2(COleVariant("密度(20℃)"));cols=range.GetEntireColumn();cols.AutoFit();
range=sheet.GetRange(COleVariant("f1"),COleVariant("f1"));
range.SetValue2(COleVariant("殘?zhí)?(%)"));cols=range.GetEntireColumn();cols.AutoFit();
range=sheet.GetRange(COleVariant("g1"),COleVariant("g1"));
range.SetValue2(COleVariant("硫 (%)"));cols=range.GetEntireColumn();cols.AutoFit();
range=sheet.GetRange(COleVariant("h1"),COleVariant("h1"));
range.SetValue2(COleVariant("氮 (ppm)"));cols=range.GetEntireColumn();cols.AutoFit();
range=sheet.GetRange(COleVariant("i1"),COleVariant("i1"));
range.SetValue2(COleVariant("重金屬Ni (ppm)"));cols=range.GetEntireColumn();cols.AutoFit();
range=sheet.GetRange(COleVariant("j1"),COleVariant("j1"));
range.SetValue2(COleVariant("重金屬V (ppm)"));cols=range.GetEntireColumn();cols.AutoFit();
range=sheet.GetRange(COleVariant("k1"),COleVariant("k1"));
range.SetValue2(COleVariant("重金屬Fe (ppm)"));cols=range.GetEntireColumn();cols.AutoFit();
range=sheet.GetRange(COleVariant("l1"),COleVariant("l1"));
range.SetValue2(COleVariant("重金屬Cu (ppm)"));cols=range.GetEntireColumn();cols.AutoFit();
range=sheet.GetRange(COleVariant("m1"),COleVariant("m1"));
range.SetValue2(COleVariant("重金屬Na (ppm)"));cols=range.GetEntireColumn();cols.AutoFit();
range=sheet.GetRange(COleVariant("n1"),COleVariant("n1"));
range.SetValue2(COleVariant("餾程HK (℃)"));cols=range.GetEntireColumn();cols.AutoFit();
range=sheet.GetRange(COleVariant("o1"),COleVariant("o1"));
range.SetValue2(COleVariant("餾程10% (℃)"));cols=range.GetEntireColumn();cols.AutoFit();
range=sheet.GetRange(COleVariant("p1"),COleVariant("p1"));
range.SetValue2(COleVariant("餾程50% (℃)"));cols=range.GetEntireColumn();cols.AutoFit();
range=sheet.GetRange(COleVariant("q1"),COleVariant("q1"));
range.SetValue2(COleVariant("餾程90% (℃)"));cols=range.GetEntireColumn();cols.AutoFit();
range=sheet.GetRange(COleVariant("r1"),COleVariant("r1"));
range.SetValue2(COleVariant("餾程KK (℃)"));cols=range.GetEntireColumn();cols.AutoFit();
range=sheet.GetRange(COleVariant("s1"),COleVariant("s1"));
range.SetValue2(COleVariant("350℃(%)"));cols=range.GetEntireColumn();cols.AutoFit();
range=sheet.GetRange(COleVariant("t1"),COleVariant("t1"));
range.SetValue2(COleVariant("500℃(%)"));cols=range.GetEntireColumn();cols.AutoFit();
range=sheet.GetRange(COleVariant("u1"),COleVariant("u1"));
range.SetValue2(COleVariant("C(%)"));cols=range.GetEntireColumn();cols.AutoFit();
range=sheet.GetRange(COleVariant("v1"),COleVariant("v1"));
range.SetValue2(COleVariant("H(%)"));cols=range.GetEntireColumn();cols.AutoFit();
range=sheet.GetRange(COleVariant("w1"),COleVariant("w1"));
range.SetValue2(COleVariant("飽和烴(vol.%)"));cols=range.GetEntireColumn();cols.AutoFit();
range=sheet.GetRange(COleVariant("x1"),COleVariant("x1"));
range.SetValue2(COleVariant("芳烴(vol.%)"));cols=range.GetEntireColumn();cols.AutoFit();
range=sheet.GetRange(COleVariant("y1"),COleVariant("y1"));
range.SetValue2(COleVariant("膠質(zhì)(vol.%)"));cols=range.GetEntireColumn();cols.AutoFit();
range=sheet.GetRange(COleVariant("z1"),COleVariant("z1"));
range.SetValue2(COleVariant("瀝青質(zhì)(vol.%)"));cols=range.GetEntireColumn();cols.AutoFit();
range=sheet.GetRange(COleVariant("a1"),COleVariant("a1"));//Range復位
}
int ss,nn; //雙循環(huán)將m_datagrid中的數(shù)據(jù)全部導出到Excel
double dtotal;
dtotal=0;
CString cc;
nn=m_adodc.GetRecordset().GetRecordCount();
CColumns cls;
cls=m_datagrid.GetColumns();
ss=cls.GetCount();
for(int i=0;i<nn;i++)
{
m_datagrid.SetRow(i);
for(int j=0;j<ss;j++)
{
m_datagrid.SetCol(j);
cc=m_datagrid.GetText();
range.SetItem(_variant_t((long)(i+2)),_variant_t((long)(j+1)),_variant_t(cc));
}
}
app.SetVisible(TRUE); //設置Excel表可見
app.SetUserControl(TRUE); //設置Excel表可被操作
}