All pastes #556268 Raw Edit

zero_point_o

public cpp v1 · immutable
·published 2007-06-10 14:25 UTC
rendered paste body
#include <iostream>#include <cstdlib>#include "windows.h"#include "ole2.h"using namespace std;// FUNCTION THAT MAKES USING COM WITH OUT #import OR MFC// A LITTLE BIT EASIERHRESULT AutoWrap(int autoType, VARIANT *pvResult, IDispatch *pDisp, LPOLESTR ptName, int cArgs...);// FUNCTION THAT CONVERTS AN HTM FILE TO AN XLS FILE// USING A COM CONNECTION TO MS EXCELbool htmtoxls(char *inputFile, char *outputFile);bool htmtoxls(char *inputFile, char *outputFile){	// INITIALIZE COM FOR THIS THREAD	CoInitialize(NULL);	// GET CLSID FOR OUR SERVER	CLSID clsid;	HRESULT hr = CLSIDFromProgID(L"Excel.Application", &clsid);	if(FAILED(hr)) {		return false;	}	// START SERVER AND GET IDispatch	IDispatch *pXlApp;	hr = CoCreateInstance(clsid, NULL, CLSCTX_LOCAL_SERVER, IID_IDispatch, (void **)&pXlApp);	if(FAILED(hr)) {		return false;	}	// MAKE EXCEL INVISIBLE (app.visible = 0)	{		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.Open();	IDispatch *pXlBook;	{		VARIANT param;		param.vt = VT_BSTR;		param.bstrVal = ::SysAllocString(/*mbtowc*/L"C:\\Documents and Settings\\robertb\\My Documents\\Visual Studio 2005\\Projects\\OVG481_exn_off_less_negative_than_-0.850.htm");		VARIANT result;		VariantInit(&result);		AutoWrap(DISPATCH_PROPERTYGET, &result, pXlBooks, L"Open", 1, param);		VariantClear(&param);		pXlBook = result.pdispVal;	}	// GET ActiveSheet OBJECT	IDispatch *pXlSheet;	{		VARIANT result;		VariantInit(&result);		AutoWrap(DISPATCH_PROPERTYGET, &result, pXlApp, L"ActiveSheet", 0);		pXlSheet = result.pdispVal;	}	// SaveAs METHOD	{		VARIANT param[2];		VariantInit(&param[0]);		VariantInit(&param[1]);		param[0].vt = VT_BSTR;		param[0].bstrVal = ::SysAllocString(L"C:\\Documents and Settings\\robertb\\My Documents\\Visual Studio 2005\\Projects\\TEST");		param[1].vt = VT_INT;		param[1].intVal = 51;		//param[1].vt = VT_I4;		//param[1].lVal = 51;		VARIANT result;		VariantInit(&result);		AutoWrap(DISPATCH_METHOD, &result, pXlSheet, L"SaveAs", 1, param[0], param[1]);		VariantClear(&param[0]);		VariantClear(&param[1]);	}	// SET .Saved PROPERTY OF THE WORK BOOK TO TRUE SO WE ARN'T	// PROMPTED TO SAVE WHEN EXCEL QUITS	{		VARIANT x;		x.vt = VT_I4;		x.lVal = 1;		AutoWrap(DISPATCH_PROPERTYPUT, NULL, pXlBook, L"Saved", 1, x);	}	// TELL EXCEL TO QUIT (app.Quit)	AutoWrap(DISPATCH_METHOD, NULL, pXlApp, L"Quit", 0);	pXlSheet->Release();	pXlBook->Release();	pXlBooks->Release();	pXlApp->Release();	// UNINITIALIZE COM FOR THIS THREAD	CoUninitialize();	return true;}HRESULT AutoWrap(int autoType, VARIANT *pvResult, IDispatch *pDisp, LPOLESTR ptName, int cArgs...) {	// BEGIN VARIABLE ARGUMENT LIST	va_list marker;	va_start(marker, cArgs);	if(!pDisp) {		_exit(0);	}	DISPPARAMS dp = { NULL, NULL, 0, 0 };	DISPID dispidNamed = DISPID_PROPERTYPUT;	DISPID dispID;	HRESULT hr;	char szName[200];	// CONVERT DOWN TO ANSI	WideCharToMultiByte(CP_ACP, 0, ptName, -1, szName, 256, NULL, NULL);	// GET DISPID FOR NAME PASSED	hr = pDisp->GetIDsOfNames(IID_NULL, &ptName, 1, LOCALE_USER_DEFAULT, &dispID);	if(FAILED(hr)) {		_exit(0);	return hr;	}	// ALLOCATE MEMORY FOR ARGUMENTS	VARIANT *pArgs = new VARIANT[cArgs+1];	// EXTRACT ARGUMENTS	for(int i=0; i<cArgs; i++) {		pArgs[i] = va_arg(marker, VARIANT);	}	// BUILD DISPPARAMS	dp.cArgs = cArgs;	dp.rgvarg = pArgs;	// HANDLE special-case FOR property-puts	if(autoType & DISPATCH_PROPERTYPUT) {		dp.cNamedArgs = 1;		dp.rgdispidNamedArgs = &dispidNamed;	}	// MAKE THE CALL	hr = pDisp->Invoke(dispID, IID_NULL, LOCALE_SYSTEM_DEFAULT, autoType, &dp, pvResult, NULL, NULL);	if(FAILED(hr)) {		_exit(0);	return hr;	}	// END variable-arguments SECTION	va_end(marker);	delete [] pArgs;	return hr;}