Hello All,
I am having trouble creating a table within Microsoft Word using the IDispatch. I have successfully created a new document, added an image and some text and created an IDispatch for Tables (pWordTables).
Now I am attempting to add a new table but I cannot figure out how to accomplish this. Can anyone assist?
Below is my code.
void CpwSCDOT_SolicitationsDialog::OnWordTest()
{
CoInitialize(NULL); CLSID clsid;
HRESULT hr = CLSIDFromProgID(L"Word.Application", &clsid);
if(FAILED(hr))
return;
IDispatch *pWordApp; hr = CoCreateInstance(clsid, NULL, CLSCTX_LOCAL_SERVER, IID_IDispatch, (void **) &pWordApp );
if(FAILED(hr))
return;
CWordAutowrap wd;
{
VARIANT param;
param.vt = VT_I4;
param.lVal = 1;
hr = wd.AutoWrap(DISPATCH_PROPERTYPUT, NULL, pWordApp, L"Visible", 1, param);
if(FAILED(hr))
{
VariantClear(¶m);
pWordApp->Release();
return;
}
VariantClear(¶m);
}
IDispatch *pWordDocuments;
{
VARIANT result;
VariantInit(&result);
hr = wd.AutoWrap(DISPATCH_PROPERTYGET, &result, pWordApp, L"Documents", 0);
if(FAILED(hr))
{
pWordApp->Release();
return;
}
pWordDocuments = result.pdispVal;
}
IDispatch *pWordDoc;
{
VARIANT result;
VariantInit(&result);
hr = wd.AutoWrap(DISPATCH_METHOD, &result, pWordDocuments, L"Add", 0);
if(FAILED(hr))
{
pWordDocuments->Release();
pWordApp->Release();
return;
}
pWordDoc = result.pdispVal;
}
{
VARIANT result;
VariantInit(&result);
wd.AutoWrap(DISPATCH_METHOD, &result, pWordDoc, L"Activate", 0);
}
CString sFullname = _T("");
{
VARIANT result;
VariantInit(&result);
wd.AutoWrap(DISPATCH_PROPERTYGET, &result, pWordDoc, L"FULLNAME", 0);
sFullname = result.bstrVal;
}
IDispatch *pSelection;
{
VARIANT result;
VariantInit(&result);
hr = wd.AutoWrap(DISPATCH_PROPERTYGET, &result, pWordApp, L"Selection", 0);
if(FAILED(hr))
{
pWordDoc->Release();
pWordDocuments->Release();
pWordApp->Release();
return;
}
pSelection=result.pdispVal;
}
IDispatch *pFont;
{
VARIANT result;
VariantInit(&result);
hr = wd.AutoWrap(DISPATCH_PROPERTYGET, &result, pSelection, L"Font", 0);
if(FAILED(hr))
{
pWordDoc->Release();
pWordDocuments->Release();
pWordApp->Release();
return;
}
pFont=result.pdispVal;
}
{
VARIANT param;
param.vt = VT_BOOL;
param.boolVal = TRUE;
wd.AutoWrap(DISPATCH_PROPERTYPUT, NULL, pFont, L"Bold", 1, param);
VariantClear(¶m);
}
IDispatch *pInlineShapes;
{
VARIANT result;
VariantInit(&result);
hr = wd.AutoWrap(DISPATCH_PROPERTYGET, &result, pSelection, L"InlineShapes", 0);
if(FAILED(hr))
{
pSelection->Release();
pFont->Release();
pWordDoc->Release();
pWordDocuments->Release();
pWordApp->Release();
CoUninitialize();
return;
}
pInlineShapes=result.pdispVal;
}
{
VARIANT param;
param.vt = VT_BSTR;
param.bstrVal = SysAllocString(L"C:\\Images\\evaluator1.png");
wd.AutoWrap(DISPATCH_METHOD, NULL, pInlineShapes, L"AddPicture", 1, param);
}
{
VARIANT param;
param.vt = VT_BSTR;
CString sValue = _T("");
sValue.Format(L"\nPROJECT: %s\n", m_ProjectName);
param.bstrVal = ::SysAllocString(sValue);
wd.AutoWrap(DISPATCH_METHOD, NULL, pSelection, L"TypeText", 1, param);
VariantClear(¶m);
}
{
VARIANT param;
param.vt = VT_BSTR;
CString sValue = _T("");
sValue.Format(L"CRITERIA LIST:\n");
param.bstrVal = ::SysAllocString(sValue);
wd.AutoWrap(DISPATCH_METHOD, NULL, pSelection, L"TypeText", 1, param);
VariantClear(¶m);
}
{
VARIANT param;
param.vt = VT_BSTR;
CString sValue = _T("");
sValue.Format(L"\tCRITERIA #\tQUESTIONS\t\t\t\t\t\t\tWEIGHTS\n");
param.bstrVal = ::SysAllocString(sValue);
wd.AutoWrap(DISPATCH_METHOD, NULL, pSelection, L"TypeText", 1, param);
VariantClear(¶m);
}
{
VARIANT param;
param.vt = VT_BOOL;
param.boolVal = FALSE;
wd.AutoWrap(DISPATCH_PROPERTYPUT, NULL, pFont, L"Bold", 1, param);
VariantClear(¶m);
}
CString sTemp
= _T("");
CString sCriteriaNumber = _T("");
CString sCriteriaWeight = _T("");
CString sCriteriaQuestion = _T("");
int iIndex
= 0;
int iCount = m_ArrayCriteria.GetCount();
for(iIndex = 0; iIndex < iCount; iIndex++)
{
sTemp = m_ArrayCriteria.GetAt(iIndex);
int i1 = sTemp.Find(L":");
sCriteriaNumber = sTemp.Mid(0, i1);
int iTemp = sTemp.GetLength() - (i1 + 1);
CString sTemp2 = sTemp.Right(iTemp);
int i2 = sTemp2.Find(L":");
sCriteriaWeight = sTemp2.Mid(0, i2);
sCriteriaQuestion = sTemp2.Mid(i2 + 1);
{
VARIANT param;
param.vt = VT_BSTR;
CString sValue = _T("");
sValue.Format(L"\t\t%s\t%s\t\t\t\t\t\t%s\n", sCriteriaNumber, sCriteriaQuestion,sCriteriaWeight);
param.bstrVal = ::SysAllocString(sValue);
wd.AutoWrap(DISPATCH_METHOD, NULL, pSelection, L"TypeText", 1, param);
}
}
{
VARIANT param;
param.vt = VT_BOOL;
param.boolVal = TRUE;
wd.AutoWrap(DISPATCH_PROPERTYPUT, NULL, pFont, L"Bold", 1, param);
VariantClear(¶m);
}
{
VARIANT param;
param.vt = VT_BSTR;
CString sValue = _T("");
sValue.Format(L"SCORES LIST:\n");
param.bstrVal = ::SysAllocString(sValue);
wd.AutoWrap(DISPATCH_METHOD, NULL, pSelection, L"TypeText", 1, param);
}
{
VARIANT param;
param.vt = VT_BSTR;
CString sValue = _T("");
sValue.Format(L"\tFIRM NAME\tCRITERIA #\tCOMMENTS\t\t\t\t\tSCORES\n");
param.bstrVal = ::SysAllocString(sValue);
wd.AutoWrap(DISPATCH_METHOD, NULL, pSelection, L"TypeText", 1, param);
}
IDispatch *pWordTables;
{
VARIANT param;
param.vt = VT_BOOL;
param.boolVal = false;
hr = wd.AutoWrap(DISPATCH_PROPERTYGET, NULL, pWordDoc, L"Tables", 0);
if(FAILED(hr))
TRACE(L"Failed to create tables dispatcher.");
VariantClear(¶m);
}
IDispatch *pWordTable;
{
VARIANT param1, param2, param3;
param1.vt = VT_I4;// Rows
param1.lVal = 9;
param2.vt = VT_I4;// Columns
param2.lVal = 2;
/********** I THINK THIS IS WHERE THE ISSUE IS ***************/
param3.vt = VT_BSTR; // Range
param3.bstrVal = ::SysAllocString(L"Selection");
/********** I THINK THIS IS WHERE THE ISSUE IS ***************/
hr = wd.AutoWrap(DISPATCH_METHOD, NULL, pWordTables, L"Add", 3, param3, param2, param1);
if(FAILED(hr))
TRACE(L"Failed to create tables dispatcher.");
VariantClear(¶m1);
VariantClear(¶m2);
VariantClear(¶m3);
}
{
VARIANT param;
param.vt = VT_BOOL;
param.boolVal = false;
hr = wd.AutoWrap(DISPATCH_METHOD, NULL, pWordDoc, L"Close", 1, param);
if(FAILED(hr))
TRACE(L"Failed to close Word document.");
VariantClear(¶m);
}
{
wd.AutoWrap(DISPATCH_METHOD, NULL, pWordApp, L"Quit", 0);
if(FAILED(hr))
{
TRACE(L"Failed to Quit Word application.");
return;
}
}
pWordDoc->Release();
pWordDocuments->Release();
pWordApp->Release();
CoUninitialize();
}