藉由以下VBA跟VC程式來執行。
Excel VBA程式碼。
Sub 執行() MsgBox 1 + 2 End SubVC程式碼。
void runExcel(CString csFile, CString csMacroName) { if (::CoInitialize( NULL ) == E_INVALIDARG) { AfxMessageBox(_T("無法初始化COM的DLL")); return ; } _Application excel; COleException *e = new COleException; CString str; //建立Excel檔案 try { if (!excel.CreateDispatch("Excel.Application", e)) throw e; } catch(COleDispatchException *e) { CString csTmp; if(!e->m_strSource.IsEmpty()) csTmp = e->m_strSource + "-"; if(!e->m_strDescription.IsEmpty()) csTmp += e->m_strDescription; else csTmp += "unknown error"; AfxMessageBox(csTmp, MB_OK, e->m_strHelpFile.IsEmpty() ? 0: e->m_dwHelpContext); e->Delete(); } COleVariant vResult, covOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR); TRY { Workbooks workBooks; _Workbook _Workbook; //取得工作簿集合 workBooks= excel.GetWorkbooks(); //取得工作簿,並開啟檔案 _Workbook = workBooks.Open( csFile, covOptional, covOptional, covOptional, covOptional, covOptional, covOptional, covOptional, covOptional, covOptional, covOptional, covOptional, covOptional, covOptional, covOptional); vResult = excel.Run(COleVariant(csMacroName), covOptional, covOptional, covOptional, covOptional, covOptional, covOptional, covOptional, covOptional, covOptional, covOptional, covOptional, covOptional, covOptional, covOptional, covOptional, covOptional, covOptional, covOptional, covOptional, covOptional, covOptional, covOptional, covOptional, covOptional, covOptional, covOptional, covOptional, covOptional, covOptional, covOptional); switch(vResult.vt) { case VT_BSTR://string str=vResult.bstrVal; break; case VT_I4://int case VT_INT: str.Format("%d",vResult.lVal); break; case VT_I2://short str.Format("%d",vResult.iVal); break; case VT_R4://float str.Format("%f",vResult.fltVal); break; case VT_R8://double str.Format("%d", (int)vResult.dblVal); break; case VT_BOOL: str.Format("%d",vResult.boolVal ); break; case VT_DATE://date break; case VT_ERROR: str.Format("ERROR : Can not Execute."); break; } printf("Status = %s\n", str); //釋放資源 workBooks.ReleaseDispatch(); _Workbook.ReleaseDispatch(); workBooks.Close(); } CATCH(COleDispatchException, e) { printf("%s\n", e->m_strDescription); } END_CATCH; excel.Quit(); excel.ReleaseDispatch(); ::CoUninitialize(); }Batch程式碼。
@echo off C:\Code\ExcelRunMacro\Release\ExcelRunMacro.exe C:\Code\ExcelRunMacro\Release\123.xlsm 執行執行結果: