Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > JavaScript: Применение библиотек > Copy/paste from excel into ExtJs-Grid? |
Автор: Killer_13 15.8.2012, 15:18 |
Здравтсв, порыл, порыл - инфы не нашел. Нужно сделать следующее(из названия темы видно что именно). Есть в excel табличка с данными, мы копируем эту табличку и все данные так же ровненько вставляются в ExtJs табличку. Кто-то делал такое? На данный момент нашел только один инструмент который это делает корректно - SocialCalc. http://plugindetector.com/socialcalc Смастерил я из примеров ExtJs табличку, что дальше? Как парсить буфер? Насколько я знаю такое(ровненькое вставление данных из excel) по умолчанию в ExtJs не предусмотрено... Вопрос в том, что я не знаю как это реализовать, может если кто натолкнет на правильный путь? В общем много как, как, как... Спасибо за советы, а если у кого завалялось решение сией задачки, буду премного благодарен! |
Автор: ksnk 15.8.2012, 15:33 |
Делал. Вставка таблицы из Excel делается в окно wysiwyg редактора. Использовался nicedit, так как он позволяет свободно встраивать себя в элементы управления и все равно использовался в админке. Принципиальной разницы редакторов в этом смысле - нет. Можно вставлять результат копирования в textarea, тогда столбцы будут отделятся табами, а строки - переводами строк с потерей форматирования. Но простое решение не выдержало приемки заказчиком ;) Специально было сделано окошко по форме выглядящее как окно ввода. Сразу после вставки принятый HTML парсится на предмет наличия там тегов table, tr, td и прочих атрибутов таблицы. По colspan и rowspan определяются все склеенные строки-столбики. Ничего принципиально сложного нет. |
Автор: Killer_13 15.8.2012, 15:46 |
- это звучит оч обнадежывающе... ![]() - надеюсь, только если придется все это делать. то думаю разница все-таки будет. Тоисть с вашых слов, надеюсь правильно понял, нужно в extJs-табличку парсить содержимое буфера, отслеживать табы(значит новая ячейка), потом notepad++ показывает мне переход на другую строку "CRLF" и пошло поехало в цикле...? |
Автор: Killer_13 15.8.2012, 16:29 |
Ясн, ну полюбому нужно будет найти как ExtJs буфер курит... |
Автор: skyboy 15.8.2012, 19:51 |
по-моему, ExtJS тебе не поможет смотри, в буфере обмена одни и те же данные хранятся в миллионе разных форматов. касательно таблицы из Экселя, это будет: а) текст с разделением табуляцеий/переводом строк б) HTML с <table>/<tr>/<td> в) бинарные данные, понятные экселю же с большим количеством специфической информации Может, и очевидно. Пойдем дальше: тип данных определяет программа-получатель. Т.е. браузер. Это браузер считает, что в IFrame с contentEditable(WYSIWYG-редакторы) безпроблемно можно вставить HTML. а в textarea — только текст без форматирования. Я очень-преочень сильно удивлюсь, если узнаю, что на это можно влиять из джаваскрипт кода. потому предложение: вставлять все ж в какой-то аналог WYSIWYG, а уже после вставки — парсить и переносить |
Автор: Killer_13 15.8.2012, 22:38 | ||
Потому что вариант Буфер-WYSIWYG-ExtJsGrid мне точно не подойдет. Если можно Буфер-Манипуляции с WYSIWYG на программном уровне-ExtJsGrid Имеется ввиду, что нужно будет как-то влезть между буфером и вставкой в ExtJsGrid, чтоб сделать все необходимые манипуляции... Такое возможно? Пасиб. |
Автор: skyboy 15.8.2012, 23:29 | ||
не думаю. |
Автор: ksnk 15.8.2012, 23:30 |
В Excel пользователь отмечает таблицу и нажимает Сtrl-С переходит в окно админки, находит окно "вставки таблицы", кликает правой кнопкой мышки и выбирает "вставить". Чудесным образом после этих телодвижений в нужном месте появляется вставленная таблица. Чудо происходит так: На событии mouseover области редактирования ставится обработчик события mousemove. По выходу мышки из области - обработчик снимается. Обработчик проверяет, что содержимое области редактирования стало не пустым. В этом случае содержимое анализируется на наличие таблицы. После анализа содержимое очищается. Всякие onpaste и onchange показали слабую применимость, тем более, что избранный визивиг использовал ифреймы для комфортной совместимости с IE6. Этот вариант (с правой кнопкой мышки) довольно успешно срабатывал на всех доступных мне вариантах броузеров. |
Автор: Killer_13 16.8.2012, 11:31 | ||||||
Добавлено через 3 минуты и 13 секунд Тут мне посоветовали вот такой вариант
|
Автор: ksnk 16.8.2012, 11:50 |
Мое "чудесное" описание занимается только пунктом 1 - Получаем данные из clipboard'а. Все остальные пункты считаются мной тривиальными ![]() Можно совместно с mousemove иметь еще и обработчик onkeydown с той-же функцией обработки. Или, вероятнее всего, правильнее будет вызывать обработчик с небольшой задержкой после события keydown... Дело в том, что редактор ставит довольно странный набор элементов вместо того, в который "внедряется". Добраться до нужного и вписать этому нужному правильные обработчики событий не очень просто. |
Автор: Killer_13 16.8.2012, 13:10 | ||
Сейчас нужно еще правильный grid na Ext замутить... |
Автор: ExSoft 16.8.2012, 13:52 | ||||||
BTW,
|
Автор: Killer_13 16.8.2012, 14:48 |
ExSoft - firebug показывает что так то вроде не много кода, но для меня как новичка в этом всем нужно будет долго курить. Ну ничего помаленьку. Здесь вроде все и логично, но иногда не знаешь что и куда вешать, как склеивать. Пасиб. |
Автор: Killer_13 16.8.2012, 16:31 | ||||
Вот что получилось
Не подскажете, почему не выделяются несколько ячеек одновременно, так сказать группа ячеек? В документации пишет, что за это отвечает свойство
Можно ли создать сетку например 100х100 и не забивать данными? И с возможностью редактирования этих полей, а то когда нет данных в ячейке ничего ни вставить нельзя и так д... Воно то и логично, потому что за это отвечает Store. Я не ошибусь если предположу такое видение....? Нужно вешать на ячейки какой-то обработчик, потом при двойном клике если ячейка пестая, то как-то все таки открывать ее и по ее закритии писать данные в Store. |
Автор: Killer_13 16.8.2012, 16:56 | ||
update: Хах, на счет никаких данных в колонках, то можно вот так... Работает.
Но может есть какой то спец метод? |
Автор: Killer_13 16.8.2012, 17:51 |
update: понял что делает selType, попробовал еще "multiSelect" - не то. какая же опция отвечает за возможность выделения нескольких ячеек? :( |
Автор: ExSoft 16.8.2012, 20:39 | ||
http://www.sencha.com/forum/showthread.php?189346-MULTI-Mode-for-cell-Selection-Model-Not-working |
Автор: Killer_13 16.8.2012, 20:53 |
- Приплыли... :( А на счет заполнения Store в цыкле? Возможно же... |
Автор: ExSoft 16.8.2012, 21:05 | ||||
А Вам какая печаль? Насколько я понял у Вас же задача copy -> paste (excell -> ext). По сему - зачем Вам вообще селект в ext'ах?
В смысле? |
Автор: Killer_13 16.8.2012, 21:30 | ||||||||||||
А на счет loop я имел ввиду, как цыклом занести данные в Store? Выше видно как я заполняю Store. Потом я придумал, что можно вот так забивать Store->data, чтоб ячейки были и пустые и редактировались.
Вопрос в том, как мне их цыклом в Сторе->data загонять? |
Автор: ExSoft 16.8.2012, 22:33 | ||||
|
Автор: Killer_13 17.8.2012, 15:25 | ||
Что-то мне не оч получается. .:( нужны просто пустые ячейки.
|
Автор: ExSoft 18.8.2012, 00:15 | ||
|