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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 18.09.2014, 06:23   #1  
ackid is offline
ackid
Участник
 
34 / 12 (1) ++
Регистрация: 21.10.2013
XMLExcelDocument_RU вставка string
Всем привет.
Есть простейший код:
Код:
    XMLExcelDocument_RU         document;   
    ;
    
    
    document    = XMLExcelDocument_RU::newFromFile('D:\\ExcelFile.xlsx');  
    document.insertValue('C1','1');

    document.closeDocument(true);
При попытке вставить текст выдаёт исключение...
Начал копаться и вот до чего дошёл...
есть класс OxmlCell_RU там вызывается setValue - тут идёт определение типов и прочее...дальше идёт код
Код:
    switch (cellType)
    {
        case 's':
            cellValue.set_Text(int2str(oxmlRow.worksheet().workbook().getSharedStringIdx(string)));
            break;
        case 'n':
            cellValue.set_Text(string);
            break;
    }
Почему-то именно для текста вызывается getSharedStringIdx... Я так понимаю это какое то сопоставление текста и числа (поправьте меня).
Дальше отрабатывает метод initSharedStringTablePart()...
Код:
    sharedStringCount = 0;
    sharedStringTablePart = workbookPart.get_SharedStringTablePart();
    sharedStringTable     = sharedStringTablePart.get_SharedStringTable();
В общем тут вылетает , говорит что NullReferenceException на sharedStringTablePart.
Подскажите кто сталкивается , что это за SharedStringTablePart - зачем он нуден.
Спасибо!
Старый 18.09.2014, 09:10   #2  
trud is offline
trud
Участник
Лучший по профессии 2017
 
1,039 / 1630 (57) ++++++++
Регистрация: 07.06.2003
Записей в блоге: 1
А остальные то стандартные отчеты работают? посмотрите как там.
ну и попробуйте вставлять в именованную ячейку, а не в С1
строки хранятся в отдельной области XML, я в ячейке ссылка на них, этот код как раз и реализует данную логику
Старый 22.09.2014, 10:53   #3  
VORP is offline
VORP
Участник
Аватар для VORP
 
146 / 95 (4) ++++
Регистрация: 26.05.2006
В екселе строки можно записывать двумя способами - через индекс таблицы строк и "inline". Здесь используется запись через индекс. То есть в SharedStringTable добавляется строка и в ячейку прописывается её индекс, как в экселе по умолчанию. Но в пустом файле SharedStringTable нет. Чтобы она появилась надо либо сделать функцию её добавления, либо как воркэраунд, добавить любое значение, например пробел, в любую ячейку шаблона екселя. Мне кажется что безопасность тут ни при чём, просто в целях сжатия сделана эта SharedStringTable.
Функция создания SharedStringTable не была создана сразу по причине невозможности вызова из Аксапты Generic функций. Потом фукции вроде разобрались как вызывать через reflection, но было уже не особо надо.
За это сообщение автора поблагодарили: arhat (1), eugene egorov (2), gl00mie (3).
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Сортировка в Report smailik DAX: Программирование 8 12.12.2013 20:10
X++: New Option to Log X++ Max-Length String Truncation Blog bot DAX Blogs 0 07.10.2011 04:12
BookDataCalc_Sales_Ru, метод initOnPayment ошибка jonny DAX: Программирование 4 24.04.2011 16:52
ALEG: Блог переехал на новую площадку tools4cio.ru Blog bot DAX Blogs 0 23.02.2009 18:05
Вопрос по классу SalesPurchReport_RU Кирилл DAX: Программирование 4 27.02.2004 13:28
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

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

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

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