Как скопировать таблицу из офисных приложений и вставить в QTableView?

Третью неделю занимаюсь изучением Python3 & PyQt5 и столкнулся с проблемой, которая просто ошеломила своей беспощадностью. Подозреваю, что это из-за своей неискушённости в python, но тем не менее.

Задача

Требуется скопировать таблицу из офисных приложений (MS Office, LibreOffice) и вставить её GUI, реализованный посредством PyQt5 и QTableView в частности. C определённой степенью подробности изучил примеры для пионеров в интернете, однако моя задача чуть сложнее. Модель, которую я взял - это скопировать квадрат чисел 1, 2, 3, 4, окружённый одним рядом пустых ячеек:

Модель

Собственно, скопироваться фрагмент должен вместе и с цифрами, и с пустыми ячейками.

Что пробовал

В лоб Ctrl+C Ctrl+V не сработало, поэтому начал извращаться.

QtWidget.QApplication.clipboard().text()

Начал с самого простого - с текстового содержимого QtWidget.QApplication.clipboard(). Тут наблюдается полный разброд и шатание в зависимости от источника. Зачастую информация о пустых ячейках просто теряется. Ниже приведено текстовое содержимое буфера.

   MS Office Excel: '\t\t\n\t1\t2\n\t3\t4\n'
  LibreOffice Calc: '1\t2\n3\t4\n'
    MS Office Word: '\t\t\t\n\t1\t2\t\n\t3\t4\t\n\t\t\t\n'
LibreOffice Writer: '\n\n\n\n\n1\n2\n\n\n3\n4\n\n\n\n\n\n'

QtWidget.QApplication.clipboard().text("html")

Вывод содержимого буфера в html-формате, в принципе, проблему решил, но очень корявым способом, т.к. html пришлось тщательно вычищать от всяких мусорных тэгов, которыми особенно грешил Word. Долго, геморройно, нет уверенности, что с изменением версий офисных программ не придётся переписывать алгоритм.

pandas.read_clipboard(header=None)

Подумал, что может помочь pandas, но в моих руках он мне не помог. Вот, что выдал вышеозначенный метод в зависимости от источника

MS Excel:
           2
0   1       
NaN NaN  NaN
    1.0  2.0
    3.0  4.0

LibreOffice Calc:
   0  1
0  1  2
1  3  4

MS Word:
              3
0   1   2      
NaN NaN NaN NaN
    1.0 2.0 NaN
    3.0 4.0 NaN
    NaN NaN NaN

LibreOffice Writer:
   0
0  1
1  2
2  3
3  4

Вопрос

Навыки кодинга - это очень хорошо, но мучает вопрос: как решить поставленную задачу правильно? :)


Ответы (0 шт):