我正在尝试在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 ++接口正确添加?
答案 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);