Свойство Объединение (MergedCells) http://yoksel.net.ru/ComServer/Ob'ekty/Oblast'TablichnogoDokumenta/MergedCells имеется.
Но оно лишь говорит о том, что ячейка объединена с какой-то.
Не пойму как определить границы объединенных ячеек.
Вот скажем мне нужно найти правую границу области /еще раз напомню - идет речь об области объединенных ячеек/
Казалось бы достаточно просто в цикле формировать ссылку на область в которую входит текущая справа ячейка и
проверять свойство Объединение.
Как только в области окажется "не объединенная" ячейка, то свойство Объединение должно стать == 0.
Но к сожалению это не так.
Похоже, что значение этого свойства формируется исходя из того, что в области имеется хотя бы одна ячейка объединенная с другой.
Йоксель » Главный форум
Как в Йоксель можно проверить, что ячейки объединены?
(15 posts)-
Отправлено 9 года(лет) назад #
-
Прямого способа определить объединение не существует. Когда мне было нужно получить список всех объединений, то я использовал тот факт, что любая ячейка объединения при получении значения дает значение из левого верхнего угла объединения. В итоге метод получения объединений выглядит так.
Начинаем с левого верхнего угла листа.
Запоминаем значение ячейки.
Пишем в это значение что-то, что не может встретиться в данных листа (например, новый GUID).
Двигаемся вправо и проверяем значения ячеек справа. Если значение ячейки совпадает с нашим GUID, то эта ячейка входит в объединение. Если не совпадает - достигнут конец объединения ячеек.
Аналогично поступаем, двигаясь вниз.
Восстанавливаем исходное значение левой верхней ячейки.
Этот алгоритм крутим в цикле по всем ячейкам листа, которые по нашим сведениям еще не входят в объединения.
Ну а по хорошему нужен какой-то встроенный метод, чтобы получить сведения об объединениях ячеек. Но его на текущий момент не существует.
Отправлено 9 года(лет) назад # -
Oleg извиняюсь за нескромный вопрос.
Вы являетесь разработчиком ВК Йоксель?Если да, то что нужно изменить в коде, чтобы отказаться от использования Boost.
Не использую его по той причине, что очень трудоемко изменить чей либо проект ...
Вообщем похоже появляется необходимость познакомиться с кодом проекта ...PS: Собственно разрабатываю конвертер mxl to pdf.
/это к тому откуда возник этот вопрос/.Отправлено 9 года(лет) назад # -
> Вы являетесь разработчиком ВК Йоксель?
Являюсь.
> Если да, то что нужно изменить в коде, чтобы отказаться от использования Boost.
Просто изменений в коде не достаточно, чтобы отказаться от Буста. Буст предоставляет определенный функционал, используемый в Йокселе. Поэтому для отказа от Буста этот функционал надо либо писать самому, либо использовать другие библиотеки. Ни один из этих вариантов мне не нравится. Частично можно отказаться от Буста, если задействовать некоторый функционал из нового STL (смарт-пойнтеры). Но этого будет недостаточно. Т.к. в STL не все, что нужно.
Отправлено 9 года(лет) назад # -
> Ну а по хорошему нужен какой-то встроенный метод, чтобы получить сведения об объединениях ячеек. Но его на текущий момент не существует.
Может допишешь?
Конечно спасибо за приведенный тобой алгоритм определения границ области объединенных
ячеек.
Видел в тестах, то что ты объяснил, но воспринял код как просто проверка корректности
объединения ячеек, а оно вон как на самом деле ...
Если посчитаешь нужным разработать этот метод, то было бы не плохо, чтобы по заданной
координате ячейки, возвращалась граница области /объединенных ячеек в которую содержится
проверяемая/.
Ну, а так пока напишу процедуру для 1С ...Отправлено 9 года(лет) назад # -
> Может допишешь?
Может быть.
> Видел в тестах, то что ты объяснил, но воспринял код как просто проверка корректности
объединения ячеек, а оно вон как на самом деле ...То, что в тестах - к данной теме не имеет отношения. Из кода на C++ нет никаких проблем доступа к данным об объединенных ячейках.
Отправлено 9 года(лет) назад # -
Т.е. в YokselSheet.idl имеется требуемый interface и метод ...
Подскажи пожалуйста какой?Отправлено 9 года(лет) назад # -
Нет, из COM нет доступа к этим данным.
Отправлено 9 года(лет) назад # -
Конвертер mxl to pdf у меня это обычный AcyiveX /C++/.
Какую lib, *.h ... мне нужно подключить для использования этого метода
/ну и какой метод нужен/?Отправлено 9 года(лет) назад # -
Вообщем открываю COM и дергаю его interfaces и методы?
Примеры здесь ... SpreadSheet\Comet\src\test\Test.sln?Отправлено 9 года(лет) назад # -
Попробывал приведенный тобой алгоритм определения границ области.
И что-то у меня он не работает ...
Может быть конечно что-то делаю не так ...И так ...
Предположим были объединены 1 и 2 ячейки в 1-й строке таблицы.OldОбласть = обИсхТаблица.Область( 1, 1 );
VpТекстOld = OldОбласть.Текст;OldОбласть.Текст = ";="
flПринадлОбласти = ?( обИсхТаблица.Область( 1, 2 ) = ";=", 1, 0 );
Так вот flПринадлОбласти не получает значения == 1 да и конечно обИсхТаблица.Область( 1, 2 ) <> ";="
Отправлено 9 года(лет) назад # -
Ну, для начала распечатай ТипЗначенияСтр для обИсхТаблица.Область( 1, 2 ) и для ";=". И поразмышляй над полученными результатами.
Отправлено 9 года(лет) назад # -
Ранее приведенный текст - "на лету" урезанный код из процедуры.
И при этом допустил опечатку ...Ниже привел подправленный:
flПринадлОбласти = ?( обИсхТаблица.Область( 1, 2 ).Текст = ";=", 1, 0 );
Так вот flПринадлОбласти не получает значения == 1 да и конечно обИсхТаблица.Область( 1, 2 ).Текст <> ";="
Отправлено 9 года(лет) назад # -
Я писал код для сбора объединений с листа. Этот код работал. К сожалению, не могу его дать , потому что он где-то потерялся. Или был удален из-за ненадобности. Так что, все сделать можно. Если у тебя не получается, то пересмотри код, займись отладкой, подумай, что не так и т.д. Если ничего не получится, займись чем-нибудь другим. За тебя я код писать точно не буду.
Отправлено 9 года(лет) назад # -
"любая ячейка объединения при получении значения дает значение из левого верхнего угла объединения" - вот это действует для объекта "Таблица", а не "ТабличныйДокумент".
Отправлено 9 года(лет) назад #
Отправить сообщение
Вы должны войти в систему, чтобы оставлять сообщения.