Поставяне от външна програма в 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
Добре, извинете, просто съм НАИСТИНА объркан. Можете ли да обясните какво не е наред тук? [CODE] 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 към 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(writer, sheet_name='Sheet1') writer.save() - person visualnotsobasic; 13.11.2018
comment
Той обаче премахва заглавния ред и вместо това номерира както колоните, така и редовете - person visualnotsobasic; 13.11.2018
comment
добре, сега успях да го накарам да запази първия ред, като зададох header=None, но все пак създава както колона, така и ред с числа - person visualnotsobasic; 13.11.2018
comment
Накарах го да работи най-накрая с: import pandas от pandas import DataFrame от pandas import ExcelWriter data = pandas.read_clipboard(sep='\\s+',header = None).values ​​print(data) df = pandas.DataFrame(data) writer = pandas.ExcelWriter('SAMPLECARS.xlsx', engine='xlsxwriter') df.to_excel(writer, sheet_name='Sheet1', index = False, header = 0) writer.save() - person visualnotsobasic; 13.11.2018