Здравствуйте, уважаемые программисты.
Проблема в следующем: хотел реализовать перемещение данных из QTableWidget в Excel обычным методом копипаста, но возникла непонятка.
Со статьей
http://hardclub.donntu.edu.ua/projects/qt/articles/qt-excel.html я ознакомился, но проблема как раз таки в том, что нужно перемещать большое количество данных.
Из практики знаю следующее: если, допустим, имеется текстовый файл следующего содержания (между цифрами в строке стоит табуляция):
то копирование из текстовика в EXcel пройдет нормально:
Поэтому я решил работать именно с текстом (диаграммы и т.д. не нужны - главная задача заключается именно в перемещении чисел, что там дальше с ними будут делать в Excel - воля пользователя).
Для своих целей я решил использовать объект QPlainTextEdit.
Собственно создал объект класса:
QPlainTextEdit *pte = new QPlainTextEdit(this);
И записал в него в цикле текст (содержание ячеек таблицы) методами:
pte->appendPlainText(S);
Получилось, например, следующее:
Цифры в строке по-прежнему разделены табуляцией.
Хочу сказать, что можно ввести текст и вручную в виджет QPlainTextEdit, дальнейший результат не изменится. Изображение виджета - для наглядности, в оригинале его вообще не нужно отображать.
Далее я вызываю 2 метода:
pte->selectAll(); //выделение всего содержимого
pte->copy(); //копирование в память
Теперь весь текст как бы в памяти, можно вставлять в Excel... И вот тут и возникла проблема: вставка происходит следующим образом:
что несколько озадачивает, поскольку в содержимом QPlainTextEdit явно стоят знаки табуляции, а не пробелы (при копировании в Word как раз таки можно увидеть, что цифры при вставке оказываются разделены пробелами, а не табуляцией).
Далее было проведено еще 2 опыта:
1) Создал виджет QLineEdit, скопировал в него содержимое QPlaintTextEdit, скопировал и вставил в Excel. Операция прошла успешно, цифры расставились по клеткам, как и надо.
Можно было остановиться и на этом варианте, однако максимальная длина строки QLineEdit, как я понял, типа int и составляет 32767 символов, что мне не очень подходит, т.к. копироваться могут тысячи ячеек, содержащих 9 символов.
2) Скопировал содержимое QPlaintTextEdit в обычный блокнот, ничего не изменяя скопировал содержимое и вставил в Excel.
Операция также прошла успешно.
Ну и на последок: для виджета QPlaintTextEdit уже реализована возможность использования Drag & Drop.
1) Если перетащить выделенный текст с табуляцией из него в Excel, то данные опять таки вставятся некорректно.
2) Если перетащить упорядоченные в ячейках данные из Excel в QPlaintTextEdit, потом их же скопировать и вставить обратно в Excel, то вставятся они уже опять некорректно.
Вопрос: можно ли каким-нибудь исправить работу QPlaintTextEdit, чтобы вставка после копирования происходила корректно? Просто не охото заморачиваться лишний раз со структурой файлов типа Excel, если, разумеется, есть альтернатива... Может быть можно даже обойтись без текстового преобразвания (как я понял, если копировать выделенные ячейки из QTableWidget, то при вставке в Excel вставится только та, которая находилась в фокусе. в теории нужно изменить опцию копирования, если таковая есть, но я не нашел). Не удивлюсь, если вопрос решится включением какой-нибудь одной галочки, но на форум я захожу только после часов/дней неудачных попыток решить проблему собственными силами
.
Заранее благодарен.