http://www.fruitfruit.com/vc/activex/excelauto.cpp ///////////////////////////////////////////////////////////////////// //change font color of a Cell in excel, change cell background color, set border ///////////////////////////////////////////////////////////////////// void CCellcolorDlg::OnOK() {//HOWTO: Create Automation Project Using MFC and a Type Library Q178749 //change font color of a Cell in excel, change cell background color, set border //Do not forget to call AfxOleInit(); try { _Application app; // app is an _Application object. _Workbook book; // More object declarations. _Worksheet sheet; Workbooks books; Worksheets sheets; Range range; // Used for Microsoft Excel 97 components. LPDISPATCH lpDisp; // Often reused variable. COleVariant covTrue((short)TRUE), covFalse((short)FALSE), covOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR); if(!app.CreateDispatch("Excel.Application")) { AfxMessageBox("Couldn't CreateDispatch() for Excel"); return; } app.SetVisible(TRUE); lpDisp = app.GetWorkbooks(); // Get an IDispatch pointer. ASSERT(lpDisp); books.AttachDispatch(lpDisp); // Attach the IDispatch pointer // to the books object. lpDisp = books.Open("C:\\temp\\book1.xls", // Test.xls is a workbook. covOptional, covOptional, covOptional, covOptional, covOptional, covOptional, covOptional, covOptional, covOptional, covOptional, covOptional, covOptional, covOptional, covOptional ); // Return Workbook's IDispatch // pointer. book.AttachDispatch( lpDisp ); lpDisp = book.GetSheets(); ASSERT(lpDisp); sheets.AttachDispatch(lpDisp); // Get sheet #1 and attach the IDispatch pointer to your sheet // object. lpDisp = sheets.GetItem( COleVariant((short)(1)) ); ASSERT(lpDisp); sheet.AttachDispatch(lpDisp); lpDisp = sheet.GetRange(COleVariant("B3"), COleVariant("b3")); range.AttachDispatch(lpDisp); // set number format // range.SetNumberFormat(COleVariant("@")); // range.SetItem(COleVariant((long)(1)),COleVariant((long)(1)),COleVariant(LPCTSTR("000666"))); // set cell font here Font newfont; lpDisp=range.GetFont(); newfont.AttachDispatch(lpDisp); //newfont.SetName(COleVariant("宋体")); //newfont.SetSize(COleVariant((long)24)); newfont.SetColorIndex(COleVariant((short)3));//use VBA to see index value of a certain color newfont.ReleaseDispatch();//set background color lpDisp=range.GetInterior(); Interior cellinterior; cellinterior.AttachDispatch(lpDisp); cellinterior.SetColorIndex(COleVariant((short)6));//use VBA to see index value of a certain color cellinterior.ReleaseDispatch(); // Set border //xlDiagonalDown =5 xlDiagonalUp=6 xlEdgeLeft=7 //xlNone = -4142 xlContinuous=1 xlThin=2 xlAutomatic=-4105 //xlEdgeTop =8 xlEdgeBottom =9 xlEdgeRight=10 lpDisp = range.GetBorders(); Borders bds; bds.AttachDispatch(lpDisp); Border bd; lpDisp = bds.GetItem(8); bd.AttachDispatch(lpDisp); bd.SetLineStyle(COleVariant((short)1));// // Release dispatch pointers. range.ReleaseDispatch(); sheet.ReleaseDispatch(); // This is not really necessary because // the default second parameter of AttachDispatch releases // when the current scope is lost. } // End of processing. catch(COleException *e) { char buf[1024]; // For the Try...Catch error message. sprintf(buf, "COleException. SCODE: %08lx.", (long)e->m_sc); ::MessageBox(NULL, buf, "COleException", MB_SETFOREGROUND | MB_OK); } catch(COleDispatchException *e) { char buf[1024]; // For the Try...Catch error message. sprintf(buf, "COleDispatchException. SCODE: %08lx, Description: \"%s\".", (long)e->m_wCode,(LPSTR)e->m_strDescription.GetBuffer(512)); ::MessageBox(NULL, buf, "COleDispatchException", MB_SETFOREGROUND | MB_OK); } catch(...) { ::MessageBox(NULL, "General Exception caught.", "Catch-All", MB_SETFOREGROUND | MB_OK); } CDialog::OnOK(); }
Range::
VARIANT BorderAround(
[in, optional] VARIANT LineStyle,
[in, optional, defaultvalue(2)] XlBorderWeight Weight,
[in, optional, defaultvalue(-4105)] XlColorIndex ColorIndex,
[in, optional] VARIANT Color);google当前不能用,失败
/////////////////////////////////////////////////////////////////////
//change font color of a Cell in excel, change cell background color, set border
/////////////////////////////////////////////////////////////////////
void CCellcolorDlg::OnOK()
{//HOWTO: Create Automation Project Using MFC and a Type Library Q178749
//change font color of a Cell in excel, change cell background color, set border
//Do not forget to call AfxOleInit();
try
{
_Application app; // app is an _Application object.
_Workbook book; // More object declarations.
_Worksheet sheet;
Workbooks books;
Worksheets sheets;
Range range; // Used for Microsoft Excel 97 components.
LPDISPATCH lpDisp; // Often reused variable.
COleVariant
covTrue((short)TRUE),
covFalse((short)FALSE),
covOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);
if(!app.CreateDispatch("Excel.Application"))
{
AfxMessageBox("Couldn't CreateDispatch() for Excel");
return;
}
app.SetVisible(TRUE);
lpDisp = app.GetWorkbooks(); // Get an IDispatch pointer.
ASSERT(lpDisp);
books.AttachDispatch(lpDisp); // Attach the IDispatch pointer
// to the books object.
lpDisp = books.Open("C:\\temp\\book1.xls", // Test.xls is a workbook.
covOptional, covOptional, covOptional, covOptional, covOptional,
covOptional, covOptional, covOptional, covOptional, covOptional,
covOptional, covOptional, covOptional, covOptional ); // Return Workbook's IDispatch
// pointer.
book.AttachDispatch( lpDisp );
lpDisp = book.GetSheets();
ASSERT(lpDisp);
sheets.AttachDispatch(lpDisp);
// Get sheet #1 and attach the IDispatch pointer to your sheet
// object.
lpDisp = sheets.GetItem( COleVariant((short)(1)) );
ASSERT(lpDisp);
sheet.AttachDispatch(lpDisp);
lpDisp = sheet.GetRange(COleVariant("B3"), COleVariant("b3"));
range.AttachDispatch(lpDisp);
// set number format
// range.SetNumberFormat(COleVariant("@"));
// range.SetItem(COleVariant((long)(1)),COleVariant((long)(1)),COleVariant(LPCTSTR("000666")));
// set cell font here
Font newfont;
lpDisp=range.GetFont();
newfont.AttachDispatch(lpDisp);
//newfont.SetName(COleVariant("宋体"));
//newfont.SetSize(COleVariant((long)24));
newfont.SetColorIndex(COleVariant((short)3));//use VBA to see index value of a certain color
newfont.ReleaseDispatch();//set background color
lpDisp=range.GetInterior();
Interior cellinterior;
cellinterior.AttachDispatch(lpDisp);
cellinterior.SetColorIndex(COleVariant((short)6));//use VBA to see index value of a certain color
cellinterior.ReleaseDispatch();
// Set border
//xlDiagonalDown =5 xlDiagonalUp=6 xlEdgeLeft=7
//xlNone = -4142 xlContinuous=1 xlThin=2 xlAutomatic=-4105
//xlEdgeTop =8 xlEdgeBottom =9 xlEdgeRight=10
lpDisp = range.GetBorders();
Borders bds;
bds.AttachDispatch(lpDisp);
Border bd;
lpDisp = bds.GetItem(8);
bd.AttachDispatch(lpDisp);
bd.SetLineStyle(COleVariant((short)1));// // Release dispatch pointers.
range.ReleaseDispatch();
sheet.ReleaseDispatch();
// This is not really necessary because
// the default second parameter of AttachDispatch releases
// when the current scope is lost. } // End of processing. catch(COleException *e)
{
char buf[1024]; // For the Try...Catch error message.
sprintf(buf, "COleException. SCODE: %08lx.", (long)e->m_sc);
::MessageBox(NULL, buf, "COleException", MB_SETFOREGROUND | MB_OK);
}
catch(COleDispatchException *e)
{
char buf[1024]; // For the Try...Catch error message.
sprintf(buf,
"COleDispatchException. SCODE: %08lx, Description: \"%s\".",
(long)e->m_wCode,(LPSTR)e->m_strDescription.GetBuffer(512));
::MessageBox(NULL, buf, "COleDispatchException",
MB_SETFOREGROUND | MB_OK);
}
catch(...)
{
::MessageBox(NULL, "General Exception caught.", "Catch-All",
MB_SETFOREGROUND | MB_OK);
}
CDialog::OnOK();
}
varColor.vt = VT_I4;
varColor.intVal = 0xff00ff;
pRange->Merge();
//BorderAround还有个Color的参数,不过我放进去出错
pRange->BorderAround(&var,Excel::xlMedium,Excel::xlColorIndexAutomatic);
Excel::BordersPtr pBorders = pRange->Borders;
pBorders->Color = varColor;
假如objRange是你要設置背景色的單元﹐可以照如下代碼寫﹕Interior objInterior=objRange.GetInterior();
objInterior.SetColor(_variant_t(long(RGB(100,100,100))));