我正在使用openpyxl写入工作簿。但是为了编辑它,需要关闭该工作簿。是否有一种方法可以写入打开的Excel文件? 我想要一个按钮来运行一个Python代码,并填充单元格。
我目前构建的流程是使用VBA关闭文件,然后Python将其编写并重新打开文件。 但是这是低效的。这就是为什么我需要一种方法来写入打开的文件的原因。
我正在使用openpyxl写入工作簿。但是为了编辑它,需要关闭该工作簿。是否有一种方法可以写入打开的Excel文件? 我想要一个按钮来运行一个Python代码,并填充单元格。
我目前构建的流程是使用VBA关闭文件,然后Python将其编写并重新打开文件。 但是这是低效的。这就是为什么我需要一种方法来写入打开的文件的原因。
import win32com.client
import pandas as pd
# Create an instance of the Excel Application & make it visible.
ExcelApp = win32com.client.GetActiveObject("Excel.Application")
ExcelApp.Visible = True
# Open the desired workbook
workbook = ExcelApp.Workbooks.Open(r"<FILE_PATH>")
# Take the data frame object and convert it to a recordset array
rec_array = data_frame.to_records()
# Convert the Recordset Array to a list. This is because Excel doesn't recognize
# Numpy datatypes.
rec_array = rec_array.tolist()
# It will look something like this now.
# [(1, 'Apple', Decimal('2'), 4.0), (2, 'Orange', Decimal('3'), 5.0), (3, 'Peach',
# Decimal('5'), 5.0), (4, 'Pear', Decimal('6'), 5.0)]
# set the value property equal to the record array.
ExcelApp.Range("F2:I5").Value = rec_array
再次强调,我们需要考虑很多事情,比如我们想要把它粘贴到哪里,数据的格式以及其他一系列问题。 然而,在一天结束时,如果你是Windows用户,使用Python可以向打开的Excel文件写入数据是可行的。
workbook = ExcelApp.Workbooks.Open(r"")
你可以这样写:workbook = ExcelApp.ActiveWorkbook
这代表了活动工作簿,或者换句话说,就是你当前光标所在的工作簿。 - areed1192通常情况下,不应让两个不同的进程向同一个文件写入内容,否则将导致同步问题。
一种更好的方法是,在父进程(即VBA代码)中关闭现有文件,并将工作簿的位置传递给Python脚本。
Python脚本将打开它并在单元格中写入内容,然后退出。
不可能实现这一点,因为Excel文件不支持并发访问。
wb = openpyxl.load_workbook(filename='meanwhile.xlsm', read_only=False, keep_vba=True)
...
wb.save('meanwhile.xlsm')
按顺序打开您的主要Excel文件:
在“数据”选项卡上,使用“同时”工作簿创建连接,然后在“连接”组中,单击“刷新”旁边的箭头,再单击“连接属性”。
单击“使用情况”选项卡。
选择“定期刷新”复选框,然后输入每次刷新操作之间的分钟数。
from kiteconnect import KiteConnect
import xlwings as xw
wb = xw.Book('winwin_safe_trader_youtube_watchlist.xlsx')
sht = wb.sheets['Sheet1']
stocks_list = sht.range('A2').expand("down").value
watchlist = []
time.sleep(10)
for name in stocks_list:
symbol = "NSE:" + name
watchlist.append(symbol)
print(datetime.datetime.today().time())
data = kite.quote(watchlist)
df = pd.DataFrame(data).transpose()
df = df.drop(['depth', 'ohlc'], 1)
print(df)
sht.range('B1').value = df
time.sleep(1)
wb.save('winwin_safe_trader_youtube.xlsx')