如何使用Word对象模型中的C ++接口在Word中添加CustomXMLParts?

时间:2019-07-18 02:04:14

标签: c++ ms-word

我正在尝试在MS Word文档的customXMLParts中插入一些文本。使用C#或VBA可以完成很多示例,但是使用C ++接口我找不到任何示例用法。

因此通常在VBA中,您只需这样做:

ActiveDocument.CustomXMLParts.Add "<dataOrigin>abcdef</dataOrigin>"

但是,如果我想使用MSO14中的C ++接口执行相同的操作。 “添加”功能界面略有不同:

_CustomXMLParts : _IMsoDispObj 
{
 ...
 virtual HRESULT __stdcall Add (
        /*[in]*/ BSTR XML,
        /*[in]*/ VARIANT SchemaCollection,
        /*[out,retval]*/ struct _CustomXMLPart * * ppPart ) = 0;
}

所以我的问题是这个SchemaCollection应该是什么? 有一个_CustomXMLSchemaCollection类型,但是它似乎与VARIANT类型不兼容。还是应该只通过xml模式的stringfy版本?

我尝试通过以下方式调用该函数,但它似乎不起作用,只是出错了:

// ... some initial code to get customXMLParts

BSTR xmlContent = SysAllocString(L"<dataOrigin>abcdef</dataOrigin>");
const char * xmlSchema = "<?xml version=\"1.0\" encoding=\"utf-8\" ?>"
"<xs:schema xmlns:xs=\"http://www.w3.org/2001/XMLSchema\">"
"<xs:element name=\"dataOrigin\" type=\"string\"></xs:element>"
"</xs:schema>";

Office14::_CustomXMLPart * outXML (nullptr);
customXMLParts->Add(xmlContent, xmlSchema, &outXML);

我用谷歌搜索的大多数例子似乎是C#或VBA,是否有人知道schemaCollection应该是什么,还是有例子说明如何调用CustomXMLParts。使用c ++接口正确添加?

1 个答案:

答案 0 :(得分:0)

实际上我知道了。这只是customXMLParts自己的模式集合。

BSTR xmlContent = SysAllocString(L"<dataOrigin>abcdef</dataOrigin>");

Office14:_CustomXMLSchemaCollection * schemaCollection ( nullptr );
customXMLParts->get_SchemaCollection( &schemaCollection );

Office14::_CustomXMLPart * outXMLPart (nullptr);
customXMLParts->Add( xmlContent, _variant_t(schemaCollection), &outXMLPart);