Как мне скопировать содержимое двумерного списка в буфер обмена, отформатированный для Excel? - PullRequest
0 голосов
/ 26 июня 2018

У меня есть двумерный список в утилите Python, которая записывает в таблицу с помощью PyQt. Я также хочу скопировать все данные из этого списка в буфер обмена с оговоркой о том, что они должны быть отформатированы для вставки в документ Excel или таблицу в Word (как это обычно происходит с данными в формате Excel).

Тогда вопрос состоит из двух частей: 1) Как мне отформатировать данные по строкам, чтобы они соответствовали стандартам Excel, и 2) как мне скопировать их в буфер обмена?

Из того, что я понимаю, данные в формате Excel, если их рассматривать непосредственно как открытый текст, каким-то образом отформатированы в формате XML, но я не знаю, как точно определить, как выглядит этот XML. Я не нашел текстового редактора, который копирует информацию о форматировании после вставки; все они просто отбрасывают форматирование и вставляют содержимое ячейки в виде открытого текста. Думаю, копирование в буфер обмена после этого должно быть довольно простым.

Ответы [ 2 ]

0 голосов
/ 27 июня 2018

Самый простой способ - использовать значения, разделенные табуляцией, например:

15.117  0.681   39.871      533.47
14.771  0.755   47.559      652.65
11.849  0.682   47.561      660.76
10.92   0.63    46.908      658.26
10.087  0.613   47.649      676.23

Хорошо вставляется в Word и Excel (однако в приведенном выше примере вкладки заменяются пробелами - выберите «редактировать», чтобы скопировать образцы данных).

Для реальной таблицы в Word вы можете отформатировать данные в виде HTML-таблицы.

Также можно поместить несколько форматов в буфер обмена, но я не уверен, как это будет сделано в Python.


Ответ Марка Рэнсома использует Windows API для копирования в буфер обмена. Это позволяет вам установить формат буфера обмена.

См. это для стандартных форматов.

Для формата HTML вам нужно добавить некоторые данные заголовка .

0 голосов
/ 26 июня 2018

На самом деле вы задаете два вопроса, поэтому я ограничусь первым вопросом о буфере обмена. Возможно, вам следует задать еще один вопрос о поведении Excell, поскольку он совершенно не связан с Python.

Кажется, что лучший способ отправить текст в буфер обмена - это Tk, так как обычно он поставляется с Python, поэтому он более переносим:

from Tkinter import Tk
r = Tk()
r.withdraw()
r.clipboard_clear()
r.clipboard_append('i can has clipboardz?')
r.update() # now it stays on the clipboard after the window is closed
r.destroy()

Этот код был написан атомайзером здесь

Я также предлагаю вам поискать немного больше, прежде чем спрашивать. До сих пор я понятия не имел, как это сделать.

Удачи с вещью Excell!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...