使用Python编写和修改现有工作簿

3

我是一名新手Python程序员,并且正在从事一个与股票数据相关的项目,需要您的帮助。我试图修改现有的Excel工作簿以便比较股票数据。幸运的是,在网上找到了一个程序,它能够检索到我所需的所有数据,我成功地将这些数据提取并写入了一个新的Excel文件中。然而,我的目标是将数据提取出来并放入一个现有的Excel文件中。此外,我需要覆盖现有文件中的单元格值。我相信xlwings能够实现这一点,而且我认为我的代码走在了正确的轨道上,但是我遇到了一个意外的错误。我收到的错误信息是:

com_error: (-2147023174, 'The RPC server is unavailable.', None, None)  

我想知道有没有人知道为什么出现了这个错误?还有,有人知道如何修复它吗?它是可以修复的吗?我的代码有误吗?任何帮助或指导都将不胜感激。谢谢。

import good_morning as gm
import pandas as pd
import xlwings as xw

#import income statement, balance sheet, and cash flow of AAPL
fd = gm.FinancialsDownloader()
fd_frames = fd.download('AAPL')

#Creates a DataFrame for only the balance sheet
df1 = pd.DataFrame(list(fd_frames.values())[0])

#connects to workbook I want to modify
wb = xw.Book  (r'C:/Users/vince/OneDrive/Documents/Python/Project/spreadsheet.xlsm')

#sheet I would like to modify
sht = wb.sheets[1]

#modifies & overwrites values in my spreadsheet (this is where I get the commerror)
sht.range('M6').value = df1 
2个回答

0
你得到的错误消息元组表明你尝试连接的RPC服务器不可用。如果RPC服务器离线或者你的程序无法连接到RPC服务器所在的网络,就会发生这种故障。
The RPC server is unavailable.

RPC(远程过程调用)是指远程过程调用。RPC服务器通常是位于网络中的另一台计算机,或者是您所连接的网络中的其他位置。通过RPC接口,您可以向服务器发送带有参数的函数请求,服务器将为您执行这些请求并返回适当的答案。它模拟了在本地计算机上进行常规函数调用的方式,不同之处在于这些函数调用是在远程RPC服务器上执行的。

根据您在问题解释中所写的内容,我推测您并没有打算联系远程服务器来完成必要的任务。我建议删除或替换掉试图通过代码连接到远程服务的代码,而是使用能够在本地计算机上正常工作的代码。

这行代码指向一个目录结构,该目录结构引用了一个名为OneDrive的目录。这是一个远程目录吗?尝试将您的电子表格放置在您确定用户运行程序时可以访问且不是远程目录的文件夹中。

#connects to workbook I want to modify
wb = xw.Book  (r'C:/Users/vince/OneDrive/Documents/Python/Project/spreadsheet.xlsm')

以下几行代码的意思也暗示了与互联网的连接,仅从字面上来看。我对你使用的库不熟悉,所以这可能只是一些奇怪的函数命名。我只是想说,我不确定。
#import income statement, balance sheet, and cash flow of AAPL
fd = gm.FinancialsDownloader()
fd_frames = fd.download('AAPL')

感谢您回答我的问题,因为我真的很困惑。我仍然感到困惑,因为我并不打算联系远程服务器,也不知道为什么会联系到远程服务器。我一直在网上研究如何覆盖现有的xlsx或xlsm工作簿,但我找到的唯一解决方案是使用xlwings。说实话,我不知道是否可以用更好的函数替换代码。您有任何建议或想法吗?再次感谢您的帮助。 - vdub32
看@Nicholiae的答案。我也会扩展我的答案,以指出你代码中的问题行;) - nuiun
谢谢你的帮助。我采纳了你的建议,将文件放在存储在我的电脑上的目录中。新的代码行看起来像这样:wb = xw.Book(r'C:/Users/vince/Project/Spreadsheet.xlsm')。然而,现在我遇到了一个新的错误。新的错误显示为:com_error: (-2147352570, 'Unknown name.', None, None)。我不知道这个错误是什么意思,在网上也找不到太多关于这个错误的信息。你知道这个错误是什么意思吗?所有的引用和拼写都是正确的。 - vdub32
@vdub32,你还记得(-2147352570, 'Unknown name.', None, None)错误的解决方法是什么吗?我遇到了同样的问题。 - Dervissss

0

你的问题是程序无法访问目录中引用的OneDrive。这可能由多种原因造成:凭据不正确、OneDrive关闭,或者简单地说,OneDrive不允许程序访问而只允许用户访问。试着下载你想要读写的文件,并将其保存到计算机上的一个目录中,然后将程序指向新的目录,看看会发生什么。


当你加入负责通信的程序时,云存储和计算机之间的通信变得有些复杂。通常会遇到许多问题,比如将不正确的凭据硬编码到程序中,以及云存储(OneDrive)是否具有适当的接收器来显示对受信任用户授予了访问权限。安全措施可以防止程序和用户进行未经信任的访问。即使用户有访问权限,也并不意味着同一系统上的程序也有该权限,因为它们在安全措施下被视为两个不同用户的访问权限。 - Nicholas Shaffer
谢谢你的帮助。我采纳了你的建议,将文件放在存储在我的电脑上的目录中。新的代码行看起来像这样:wb = xw.Book(r'C:/Users/vince/Project/Spreadsheet.xlsm')。然而,现在我遇到了一个新的错误。新的错误信息如下:com_error: (-2147352570, '未知名称。', None, None)。我不知道这个错误是什么意思,在网上也找不到太多关于这个错误的信息。你知道这个错误是什么意思吗?一切引用和拼写都是正确的。 - vdub32
试着将文件放在与程序相同的文件夹中,并指示程序使用该文件。看看是否仍然出现相同的错误。还有,你是否导入了任何模块? - Nicholas Shaffer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接