Показать сообщение отдельно
Старый 14.08.2006, 23:10   #7  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2476 (88) +++++++++
Регистрация: 20.08.2005
В общем, победил я е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).