AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 19.05.2022, 01:06   #1  
DesparioN is offline
DesparioN
Участник
 
86 / 15 (1) ++
Регистрация: 21.10.2014
Проблемы с OpenXML (DAX2012)
Добрый день!

Подскажите, есть ли понятный мануал по данной API?
Пытаюсь реализовать функцию по редактированию границ ячеек. Уже всю голову сломал.

Затык с *border.set_style(). Предполагал, что туда можно передать числовое значение границы, но вылезает ошибка Microsoft.Dynamics.AX.ManagedInterop.ClrBridgeException: set_Style is not a member of TopBorder
Старый 19.05.2022, 06:42   #2  
Pandasama is offline
Pandasama
Участник
 
457 / 137 (5) +++++
Регистрация: 11.08.2014
Адрес: Барнаул
Цитата:
Сообщение от DesparioN Посмотреть сообщение
Подскажите, есть ли понятный мануал по данной API?
Наверно, что-то вроде этого - описания классов там есть
https://docs.microsoft.com/ru-ru/off...etting-started

Ну и вы бы полный код показали, который у вас ошибку вызывает - понятнее бы было

Последний раз редактировалось Pandasama; 19.05.2022 в 06:44.
Старый 19.05.2022, 11:59   #3  
DesparioN is offline
DesparioN
Участник
 
86 / 15 (1) ++
Регистрация: 21.10.2014
Пытался сделать по аналогии с уже существующим методом по коррекции шрифта

X++:
public void setNamedRangeBorder(Bookmark _bookmark, int _top = 1, int _left = 1, int _right = 1,
                                int _bottom = 1)
{
    DocumentFormat.OpenXml.Spreadsheet.TopBorder                topBorder,
                                                                newTopBorder;
    DocumentFormat.OpenXml.Spreadsheet.LeftBorder               leftBorder,
                                                                newleftBorder;
    DocumentFormat.OpenXml.Spreadsheet.RightBorder              rightBorder,
                                                                newrightBorder;
    DocumentFormat.OpenXml.Spreadsheet.BottomBorder             bottomBorder,
                                                                newBottomBorder;
    DocumentFormat.OpenXml.Spreadsheet.Border                   border,
                                                                newBorder;
    DocumentFormat.OpenXml.Spreadsheet.Borders                  borders;
    DocumentFormat.OpenXml.Spreadsheet.CellFormats              formats;
    DocumentFormat.OpenXml.Spreadsheet.CellFormat               format,
                                                                newFormat;
    DocumentFormat.OpenXml.Spreadsheet.Cell                     cell;
    DocumentFormat.OpenXml.OpenXmlElementList                   elementList;
    System.Collections.IEnumerator                              enumerator;

    int         fromRow;
    int         fromCol;
    int         toRow;
    int         toCol;

    int         styleIdx;
    int         borderIdx;
    int         curIdx;
    str         worksheetName;
    container   con;


    if(!this.definedNames().exists([_bookmark, #localSheetIdUndefined]))
    {
        throw error(strFmt("@GLS64283", _bookmark));
    }

    con = this.parseBookmark(_bookmark);

    worksheetName = conPeek(con, 1);
    fromRow       = conPeek(con, 2);
    fromCol       = conPeek(con, 3);
    toRow         = conPeek(con, 4);
    toCol         = conPeek(con, 5);

    if(templateMode)
    {
        cell = this.getWorksheet(worksheetName, true).rowTemplate(fromRow).cell(fromCol).cell();
        styleIdx = this.getWorksheet(worksheetName, true).rowTemplate(fromRow).cell(fromCol).styleIndex();
    }
    else
    {
        cell     = this.getWorksheet(worksheetName, true).row(fromRow).cell(fromCol).cell();
        styleIdx = this.getWorksheet(worksheetName, true).row(fromRow).cell(fromCol).styleIndex();
    }

    format      = this.getCellXfById(styleIdx);
    borderIdx   = OXML_RU::getUInt32Value(format.get_BorderId());

    stylesPart  = workbookPart.get_WorkbookStylesPart();
    styleSheet  = stylesPart.get_Stylesheet();
    borders     = styleSheet.get_Borders();
    elementList = borders.get_ChildElements();
    enumerator  = elementList.GetEnumerator();

    while(enumerator.MoveNext())
    {
        border = enumerator.get_Current();

        if(curIdx == borderIdx)
        {
            break;
        }

        curIdx++;
    }

    topBorder       = border.get_TopBorder();
    leftBorder      = border.get_LeftBorder();
    rightBorder     = border.get_RightBorder();
    bottomBorder    = border.get_BottomBorder();

    newTopBorder        = topBorder.Clone();
    newleftBorder       = leftBorder.Clone();
    newrightBorder      = rightBorder.Clone();
    newBottomBorder     = bottomBorder.Clone();

    newTopBorder.set_Style(OXML_RU::setInt32Value(_top));
    newLeftBorder.set_Style(OXML_RU::setInt32Value(_left));
    newRightBorder.set_Style(OXML_RU::setInt32Value(_right));
    newBottomBorder.set_Style(OXML_RU::setInt32Value(_bottom));

    newBorder = border.Clone();

    newBorder.set_TopBorder(newTopBorder);
    newBorder.set_LeftBorder(newLeftBorder);
    newBorder.set_RightBorder(newRightBorder);
    newBorder.set_BottomBorder(newBottomBorder);

    OXML_RU::appendChild(borders, newBorder);

    newFormat   = format.Clone();
    newFormat.set_BorderId(borders.get_Count());

    borders.set_Count(OXML_RU::setUInt32Value(OXML_RU::getUInt32Value(borders.get_Count()) + 1));

    formats = styleSheet.get_CellFormats();
    OXML_RU::appendChild(formats, newFormat);
    cell.set_StyleIndex(formats.get_Count());
    formats.set_Count(OXML_RU::setUInt32Value(OXML_RU::getUInt32Value(formats.get_Count()) + 1));
Старый 19.05.2022, 14:24   #4  
DesparioN is offline
DesparioN
Участник
 
86 / 15 (1) ++
Регистрация: 21.10.2014
Удалось найти ISO по OpenXML, если кому надо
https://github.com/python-openxml/py...EC-29500-1.pdf
За это сообщение автора поблагодарили: DarkSpirit22 (1).
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
OpenXml. C# -> X++ decoder DAX: Программирование 10 07.03.2023 23:19
palleagermark: OpenXML teaser Blog bot DAX Blogs 0 21.08.2015 16:11
i-neti: Решение проблемы с суммарной обработкой журнала прибытия DAX2012 Blog bot DAX Blogs 1 21.05.2015 14:04
DAX2012 - перепоставки по закупкам Starling DAX: Функционал 2 18.03.2014 13:56
Проблемы с кэшированием inventSum в DAX2012 fed DAX: Администрирование 20 19.11.2012 17:56

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 04:48.