Я видел несколько ответов на эту проблему, но в VBA и C# --- ничего в python. В python 3 я пытаюсь сделать следующее:
- Назначить переменной строку значений в соответствующем формате "excel"
- Затем эту переменную скопировать в clipboard
- Тогда пользователь должен иметь возможность вручную CTRL + V (вставить) эту строку в Excel и разделить ее на правильные размещения строк / столбцов.
I Я использую tkinter и openpyxl для моего проекта, и благодаря тестированию я получил некоторые результаты, но это не то, чего я хочу. Самое близкое, что я получил, это ниже.
# If I first go into excel,
# and copy a few columns within a single row with different data in them,
# then I run the following code:
import tkinter as tk
root = tk.Tk()
paste = root.clipboard_get()
print(paste)
# Then I manually copy the print output to the clipboard,
# and then go back to excel and paste,
# excel gives the following warning message:
# "The data you're pasting isn't the same size as your selection. do you want to paste anyways?"
# And after pressing OK, it seems as though the data is pasted properly.
Это нормально, и строка print (paste) может помочь мне создать соответствующий формат для исходной переменной строк, которые я хочу сгенерировать, но Мне нужно решение, которое не приведет к тому, что в Excel каждый раз будет появляться этот предупреждающий знак.
Если кто-то может дать представление об этом, я был бы очень признателен. Кроме того, решение должно быть через python, а не через изменения в Excel. Во-вторых, решение заключается не в добавлении / записи данных непосредственно в Excel (через Openpyxl, et c), а в получении данных в буфер обмена в соответствующем формате (я использую Excel 2016).
Спасибо !!
Редактировать:
Я также пытался использовать "решение ctypes", представленное здесь пользователем kichik.
Кому Чтобы упростить работу с этим решением, я загрузил приложение под названием «InsideClipboard», которое позволяет мне легко видеть идентификатор формата каждого типа форматов, в который буфер «копирует» данные.
Используя решение ctype от kichik, я проверил, чтобы увидеть, если ручное копирование вывода на печать различных форматов, сохраненных в буфере обмена, позволит мне вручную нажать CTRL + V в Excel в исходном формате, но это не удалось Исходная «копия» состояла из нескольких столбцов строк в одной строке строк из Excel, а ручная «вставка» отдельных форматов обратно в Excel сохраняла все строки в одной ячейке (за исключением HTML Формат что создано несколько строк данных - тоже неправильно). Различные форматы включали CF_LOCALE (16), CF_TEXT (1), CF_OEMTEXT (7), CF_UNICODETEXT (13) и AND HTML Format (49384).
Итак, по-прежнему: решения нет.
Edit2:
Я понял, что могу создавать строки в python с фактическими вкладками, зажатыми между строкой, вместо использования \ t, он работал для создания одной строки, которая помещала бы данные в разные столбцы одной строки при вставке в Excel.
Кроме того, я понял, что если я нажму CTRL + V непосредственно в Excel (не в заголовке строки), в фактической строке, в которую я хочу вставить данные, я больше не получаю «предупреждающее сообщение» Excel. Таким образом, использование этой работы может работать. Если никто не имеет никакого вклада, то этот простой подход может быть достаточно хорошим.
Однако я хотел бы иметь возможность просто щелкнуть заголовок строки вместо первой соответствующей ячейки строки, чтобы вставить данные без всплывающего окна предупреждения Excel. Идеи все еще приветствуются, и было бы лучше, чтобы все это было сделано через python (без изменений в Excel, так как приложение может работать на разных Windows ПК с ОС).
Итак: возможное простое решение , но не идеально.
Edit3:
Итак, я разработал решение, основанное на Edit2. Всплывающее окно «Предупреждение» в Excel по-прежнему возникает, если Excel открывается как приложение на рабочем компьютере; однако, если файл Excel открывается и редактируется с помощью онлайн-процессора, пользователь может выделить заголовок строки и вставить его, не создавая всплывающее окно «Предупреждение» в Excel. Это работает в моем конкретном случае c, хотя лучшим решением было бы, чтобы скопированные данные не генерировали всплывающее окно предупреждения Excel в любой ситуации. В любом случае, если никто не знает, как предотвратить всплывающее предупреждение Excel только с помощью python, тогда я все еще могу работать с этим методом.
Вот мое решение (обратите внимание, что пробелы в длинной строке на самом деле являются «табуляциями»):
import pyperclip
# t variables are defined prior to the below code
# note: the " " parts in the data string are actually tabs
data = t1 + " " + t2 + " " + " " + t3 + " " + t4 + " " + t5 + " " + t6 + " " + t7 + " " + " " + "t8" + " " + " " + " " + " " + " " + " " + t9 + " " + t10 + " " + t11 + " " + t12 + " " + " " + " " + " " + " " + " " + t13
pyperclip.copy(data)
print("clipboard:", data)
# now manually pressing CTRL+V while inside Excel (online processor) will
# paste the various t variables in the appropriate cells designated by
# the " " tabs in between. Of note, this works for columns of a single
# row as I didn't need multiple rows of data for my task.