![]() |
#7 |
Участник
|
В общем, победил я еe (Axapta'у). Сделал на интерфейсах без макросов.
Хотя этот способ можно так-же охарактеризовать как перректальный ![]() X++: #define.msoPropertyTypeDate(0x00000003) #define.msoPropertyTypeString(0x00000004) static void AndyD_Excel_DocProperty(Args _args) { COMExcelDocument_RU excel; FileName fileName = ""; COM doc; COM comDocProp, comOneProp; ComVariant var; ComDispFunction funcGet; ComDispFunction funcSet; COMVariant varArg1; COMVariant varArg2; COMVariant varArg3; COMVariant varArg4; COMVariant varRet; ; excel = new ComExcelDocument_RU(); excel.newFile(fileName,true); doc = excel.getComDocument(); // ------------------ Запись в BuiltinDocumentProperties comDocProp = doc.BuiltinDocumentProperties(); funcGet = new ComDispFunction(comDocProp, "Item", COMDispContext::PropertyGet); varArg1 = new COMVariant(COMVariantInOut::In, COMVariantType::VT_BSTR); varArg1.bStr("Author"); varRet = new COMVariant(COMVariantInOut::OUT_RETVAL, COMVariantType::VT_DISPATCH); funcGet.call(varArg1, varRet); comOneProp = COM::createFromInterface(varRet.iDispatch()); funcSet = new ComDispFunction(comOneProp, "Value", COMDispContext::PropertyPut); varRet = new COMVariant(COMVariantInOut::In, COMVariantType::VT_BSTR); varRet.bStr((select UserInfo where UserInfo.id == curuserId()).Name + "-Builtin"); funcSet.call(varRet); // Пример получения значения funcSet = new ComDispFunction(comOneProp, "Value", COMDispContext::PropertyGet); varRet = new COMVariant(COMVariantInOut::Out_retVal, COMVariantType::VT_BSTR); funcSet.call(varRet); info(varRet.bStr()); funcGet = new ComDispFunction(comDocProp, "Item", COMDispContext::PropertyGet); varArg1 = new COMVariant(COMVariantInOut::In, COMVariantType::VT_BSTR); varArg1.bStr("Creation Date"); varRet = new COMVariant(COMVariantInOut::OUT_RETVAL, COMVariantType::VT_DISPATCH); funcGet.call(varArg1, varRet); comOneProp = COM::createFromInterface(varRet.iDispatch()); funcSet = new ComDispFunction(comOneProp, "Value", COMDispContext::PropertyPut); varRet = new COMVariant(COMVariantInOut::In, COMVariantType::VT_DATE); varRet.date(today()); funcSet.call(varRet); // ------------------ Запись в CustomDocumentProperties comDocProp = doc.CustomDocumentProperties(); funcSet = new ComDispFunction(comDocProp, "Add", COMDispContext::Method); varArg1 = new COMVariant(COMVariantInOut::In, COMVariantType::VT_BSTR); varArg1.bStr("Автор"); varArg2 = new COMVariant(COMVariantInOut::In, COMVariantType::VT_BOOL); varArg2.boolean(false); varArg3 = new COMVariant(COMVariantInOut::In, COMVariantType::VT_INT); varArg3.int(#msoPropertyTypeString); varArg4 = new COMVariant(COMVariantInOut::In, COMVariantType::VT_BSTR); varArg4.bStr((select UserInfo where UserInfo.id == curuserId()).Name + "-Custom"); funcSet.call(varArg1, varArg2, varArg3, varArg4); varArg1.bStr("Дата создания"); varArg3.int(#msoPropertyTypeDate); varArg4 = new COMVariant(COMVariantInOut::In, COMVariantType::VT_DATE); varArg4.date(today()); funcSet.call(varArg1, varArg2, varArg3, varArg4); // Пример получения значения funcGet = new ComDispFunction(comDocProp, "Item", COMDispContext::PropertyGet); varArg1 = new COMVariant(COMVariantInOut::In, COMVariantType::VT_BSTR); varArg1.bStr("Автор"); varRet = new COMVariant(COMVariantInOut::OUT_RETVAL, COMVariantType::VT_DISPATCH); funcGet.call(varArg1, varRet); comOneProp = COM::createFromInterface(varRet.iDispatch()); funcSet = new ComDispFunction(comOneProp, "Value", COMDispContext::PropertyGet); varRet = new COMVariant(COMVariantInOut::Out_retVal, COMVariantType::VT_BSTR); funcSet.call(varRet); info(varRet.bStr()); }
__________________
Axapta v.3.0 sp5 kr2 |
|
|
За это сообщение автора поблагодарили: Владимир Максимов (1), Gustav (3). |
Теги |
excel |
|
|