Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    text
    copied!<p>Excel, like other Office products, exports its guts over COM. This is available for use in C++, VB, C#, and whatever other languages have COM interop -- provided that you're running in Windows and have Excel installed. (You can't get to COM from plain C. Whether this is fortunate or unfortunate is up to you.)</p> <p>COM is a bloody messy pain for unmanaged languages, though. The following VB:</p> <pre><code>Set objExcel = CreateObject("Excel.Application") ' start or use existing Excel objExcel.Visible = True ' show the window objExcel.Workbooks.Add ' create an empty workbook </code></pre> <p>roughly translates into the following C++:</p> <pre><code>#include &lt;assert.h&gt; #include &lt;ole2.h&gt; #include &lt;tchar.h&gt; int main() { HRESULT hr; IDispatch *objExcel, *objWorkbooks; CLSID clsid; DISPID id, id2; DISPPARAMS p; VARIANT v; TCHAR *name; CoInitialize(NULL); hr = CLSIDFromProgID(_T("Excel.Application"), &amp;clsid); assert(SUCCEEDED(hr)); hr = CoCreateInstance(clsid, NULL, CLSCTX_LOCAL_SERVER, IID_IDispatch, (LPVOID *)&amp;objExcel); assert(SUCCEEDED(hr)); id2 = DISPID_PROPERTYPUT; name = _T("Visible"); hr = objExcel-&gt;GetIDsOfNames(IID_NULL, &amp;name, 1, LOCALE_USER_DEFAULT, &amp;id); assert(SUCCEEDED(hr)); VariantInit(&amp;v); v.vt = VT_I4; v.lVal = 1; p.cArgs = 1; p.rgvarg = &amp;v; p.cNamedArgs = 1; p.rgdispidNamedArgs = &amp;id2; hr = objExcel-&gt;Invoke(id, IID_NULL, LOCALE_SYSTEM_DEFAULT, DISPATCH_PROPERTYPUT, &amp;p, NULL, NULL, NULL); assert(SUCCEEDED(hr)); name = _T("Workbooks"); hr = objExcel-&gt;GetIDsOfNames(IID_NULL, &amp;name, 1, LOCALE_USER_DEFAULT, &amp;id); assert(SUCCEEDED(hr)); p.cArgs = 0; p.rgvarg = NULL; p.cNamedArgs = 0; p.rgdispidNamedArgs = NULL; hr = objExcel-&gt;Invoke(id, IID_NULL, LOCALE_SYSTEM_DEFAULT, DISPATCH_PROPERTYGET, &amp;p, &amp;v, NULL, NULL); assert(SUCCEEDED(hr)); objWorkbooks = v.pdispVal; name = _T("Add"); hr = objWorkbooks-&gt;GetIDsOfNames(IID_NULL, &amp;name, 1, LOCALE_USER_DEFAULT, &amp;id); assert(SUCCEEDED(hr)); p.cArgs = 0; p.rgvarg = NULL; p.cNamedArgs = 0; p.rgdispidNamedArgs = NULL; hr = objWorkbooks-&gt;Invoke(id, IID_NULL, LOCALE_SYSTEM_DEFAULT, DISPATCH_PROPERTYGET, &amp;p, NULL, NULL, NULL); assert(SUCCEEDED(hr)); return 0; } </code></pre>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload