2010-08-13 90 views

回答

1

據我所知,這給「spec」你可以使用MS-COM或VBA。 C++ COM示例如下。當然,如果你正在使用XML存儲的新版本,它就變得簡單得多了。畢竟它是XML。 :-)

 
    // Initialize COM for this thread... 
    CoInitialize(NULL); 

    // Get CLSID for our server... 
    CLSID clsid; 
    HRESULT hr = CLSIDFromProgID(L"Excel.Application", &clsid); 

    if(FAILED(hr)) { 

     ::MessageBox(NULL, "CLSIDFromProgID() failed", "Error", 0x10010); 
     return -1; 
    } 

    // Start server and get IDispatch... 
    IDispatch *pXlApp; 
    hr = CoCreateInstance(clsid, NULL, CLSCTX_LOCAL_SERVER, IID_IDispatch, (void **)&pXlApp); 
    if(FAILED(hr)) { 
     ::MessageBox(NULL, "Excel not registered properly", "Error", 0x10010); 
     return -2; 
    } 

    // Make it visible (i.e. app.visible = 1) 
    { 

     VARIANT x; 
     x.vt = VT_I4; 
     x.lVal = 1; 
     AutoWrap(DISPATCH_PROPERTYPUT, NULL, pXlApp, L"Visible", 1, x); 
    } 

    // Get Workbooks collection 
    IDispatch *pXlBooks; 
    { 
     VARIANT result; 
     VariantInit(&result); 
     AutoWrap(DISPATCH_PROPERTYGET, &result, pXlApp, L"Workbooks", 0); 
     pXlBooks = result.pdispVal; 
    } 

    // Call Workbooks.Add() to get a new workbook... 
    IDispatch *pXlBook; 
    { 
     VARIANT result; 
     VariantInit(&result); 
     AutoWrap(DISPATCH_PROPERTYGET, &result, pXlBooks, L"Add", 0); 
     pXlBook = result.pdispVal; 
    } 

    // Create a 15x15 safearray of variants... 
    VARIANT arr; 
    arr.vt = VT_ARRAY | VT_VARIANT; 
    { 
     SAFEARRAYBOUND sab[2]; 
     sab[0].lLbound = 1; sab[0].cElements = 15; 
     sab[1].lLbound = 1; sab[1].cElements = 15; 
     arr.parray = SafeArrayCreate(VT_VARIANT, 2, sab); 
    } 

    // Fill safearray with some values... 
    for(int i=1; iRelease(); 
    pXlSheet->Release(); 
    pXlBook->Release(); 
    pXlBooks->Release(); 
    pXlApp->Release(); 
    VariantClear(&arr); 

    // Uninitialize COM for this thread... 
    CoUninitialize(); 

More here.

鑑於部分標籤我們在,我就沒有表現出VBA的例子,但如果「VBA打開Excel碼」需要的搜索,你會得到很多的示例代碼。

相關問題