18.09.2014, 06:23 | #1 |
Участник
|
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; } Дальше отрабатывает метод initSharedStringTablePart()... Код: sharedStringCount = 0; sharedStringTablePart = workbookPart.get_SharedStringTablePart(); sharedStringTable = sharedStringTablePart.get_SharedStringTable(); Подскажите кто сталкивается , что это за SharedStringTablePart - зачем он нуден. Спасибо! |
|
18.09.2014, 09:10 | #2 |
Участник
|
А остальные то стандартные отчеты работают? посмотрите как там.
ну и попробуйте вставлять в именованную ячейку, а не в С1 строки хранятся в отдельной области XML, я в ячейке ссылка на них, этот код как раз и реализует данную логику |
|
22.09.2014, 10:53 | #3 |
Участник
|
В екселе строки можно записывать двумя способами - через индекс таблицы строк и "inline". Здесь используется запись через индекс. То есть в SharedStringTable добавляется строка и в ячейку прописывается её индекс, как в экселе по умолчанию. Но в пустом файле SharedStringTable нет. Чтобы она появилась надо либо сделать функцию её добавления, либо как воркэраунд, добавить любое значение, например пробел, в любую ячейку шаблона екселя. Мне кажется что безопасность тут ни при чём, просто в целях сжатия сделана эта SharedStringTable.
Функция создания SharedStringTable не была создана сразу по причине невозможности вызова из Аксапты Generic функций. Потом фукции вроде разобрались как вызывать через reflection, но было уже не особо надо. |
|
|
За это сообщение автора поблагодарили: arhat (1), eugene egorov (2), gl00mie (3). |