Вставка из внешней программы в файл Excel

Извиняюсь, если на этот вопрос был дан ответ - я только что потратил последний час или около того на поиск определенного метода и не смог его найти.

Я получаю данные из программы создания отчетов с помощью эмуляции клавиатуры с помощью pynput - в программе есть специальные меню для копирования данных и выбора того, что на самом деле копируется.

Мне удалось скопировать данные в буфер обмена, а затем вызвать openpyxl для загрузки выбранной книги. Чего я не могу понять, как это сделать, так это как выбрать конкретную ячейку, а затем вставить данные, которые я уже скопировал, начиная с этой ячейки.

Параметры копирования из программы создания отчетов копируют данные таким образом, чтобы они были правильно вставлены в Excel (ячейка за ячейкой), поэтому я знаю, что он не будет пытаться вставить все данные в одну ячейку. Я просто не могу определить правильный метод выбора ячейки и вставки ее.

Заранее благодарю за любую помощь.

В качестве примечания, я НЕВЕРОЯТНО новичок в python - я хорошо разбираюсь в VBA, но я пытаюсь расшириться, поэтому прошу прощения, если я сказал что-то неправильно.


person visualnotsobasic    schedule 13.11.2018    source источник


Ответы (1)


Имея данные, уже скопированные в буфер обмена, вы можете использовать python pandas DataFrames для их обработки. Ниже приведен метод, который принимает данные, скопированные из буфера обмена, и преобразует их в DataFrame.

pandas.read_clipboard(sep='\\s+', **kwargs)

Теперь вы можете выбрать любой столбец из DataFrame и, используя метод to_csv, записать его в файл Excel.

DataFrame.to_csv()

Ознакомьтесь с документацией:

read_clipboard() — https://pandas.pydata.org/pandas-docs/stable/generated/pandas.read_clipboard.html

to_csv() — https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.to_csv.html Пример кода:

import pandas as pd
data = pd.read_clipboard(sep='\\s+')
print(data)
person Sanchit Kumar    schedule 13.11.2018
comment
Спасибо за ответ - я пытался выбрать ячейку и использовать pyperclip для вставки, но это не сработало. Простите, а параметры в считанных скобках для чего? Нужно ли их чем-то заменить? У меня есть небольшое знание регулярных выражений, но я немного смущен. - person visualnotsobasic; 13.11.2018
comment
И поскольку параметр столбцов является необязательным, будет ли его игнорирование записывать все данные? - person visualnotsobasic; 13.11.2018
comment
read_clipboard() имеет параметр sep, который указывает разделитель, например, если ваши данные разделены запятыми, укажите его как sep = ','. - person Sanchit Kumar; 13.11.2018
comment
что касается части to_csv(), она будет записывать полные данные, если вы не укажете параметр столбцов. Если вы укажете его для столбцов = ['a', 'b'], он будет записывать только столбцы a и b в csv. - person Sanchit Kumar; 13.11.2018
comment
Итак, извините, я просто ДЕЙСТВИТЕЛЬНО запутался. Можете ли вы объяснить, что здесь не так? [КОД] import pandas from pandas import DataFrame data = pandas.read_clipboard(sep='\\s+').values ​​print(data) [/CODE] ПОЖАЛУЙСТА, прости мою глупость - как, черт возьми, я обозначаю код в этом поле для комментариев . - person visualnotsobasic; 13.11.2018
comment
проверьте пример кода в ответе. Не думай, что ты тупой. Задавать вопросы — признак обучения. - person Sanchit Kumar; 13.11.2018
comment
Мне удалось распечатать его в оболочке - когда я пытаюсь записать его в CSV, он говорит мне, что объект «str» не имеет атрибута «столбцы», хотя печатный вывод кажется разделенным пробелами и апострофами - person visualnotsobasic; 13.11.2018
comment
Вставьте свой вывод и соответствующее сообщение об ошибке. - person Sanchit Kumar; 13.11.2018
comment
Вывод выглядит следующим образом [['110618P' 'TILX305812' 1 ... nan 886577 '11/6/2018'] Ошибка: файл *PATH to pandas formats*\csvs.py, строка 71, в init self.has_mi_columns = (isinstance(obj.columns, MultiIndex) и AttributeError: объект 'str' не имеет атрибута 'columns' - person visualnotsobasic; 13.11.2018
comment
Можете ли вы предоставить мне код, как вы пишете его в csv. - person Sanchit Kumar; 13.11.2018
comment
Мне удалось выполнить эту работу: импортировать панды из панд, импортировать DataFrame из панд, импортировать ExcelWriter data = pandas.read_clipboard(sep='\\s+').values ​​print(data) df = pandas.DataFrame(data) Writer = pandas. ExcelWriter('SAMPLECARS.xlsx', engine='xlsxwriter') df.to_excel(писатель, имя_листа='Лист1') Writer.save() - person visualnotsobasic; 13.11.2018
comment
Однако он удаляет строку заголовка и вместо этого нумерует как столбцы, так и строки. - person visualnotsobasic; 13.11.2018
comment
Хорошо, теперь мне удалось сохранить первую строку, установив заголовок = Нет, но он по-прежнему создает как столбец, так и строку с числами. - person visualnotsobasic; 13.11.2018
comment
Наконец, я заставил его работать с: import pandas from pandas import DataFrame from pandas import ExcelWriter data = pandas.read_clipboard(sep='\\s+',header = None) писатель = pandas.ExcelWriter('SAMPLECARS.xlsx', engine='xlsxwriter') df.to_excel(писатель, имя_листа='Лист1', индекс = False, заголовок = 0) Writer.save() - person visualnotsobasic; 13.11.2018