藉由以下VBA跟VC程式來執行。
Excel VBA程式碼。
Sub 執行()
MsgBox 1 + 2
End Sub
VC程式碼。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 執行執行結果:
