我创建了一个Python脚本,该脚本从计算机上的文件夹中提取.xlsx格式的文件,并将该文件上传到Google云端硬盘中的特定文件夹。这是在Python中使用pydrive软件包。该脚本运行没有问题,并且文件已按预期上传。但是,由于某种原因,当下载并重新打开上载的Google云端硬盘文件时,Excel会显示以下错误消息:
Excel无法打开文件...,因为文件格式或文件扩展名无效。验证文件未损坏,并且文件扩展名与文件格式匹配。
当我直接在计算机上打开文件时,它可以正常打开,没有任何问题。当我手动将文件拖动/上传到Google云端硬盘文件夹中,然后重新下载该文件时,它可以正常打开。转换似乎来自我的Python脚本(请参见下文)。
有人可以在这里提供任何帮助吗?我一直在尝试不同的方法,并且得到的结果相同。如果需要,我可以提供更多信息。
已更新以添加完整的Python脚本:
from pydrive.auth import GoogleAuth
from pydrive.drive import GoogleDrive
import glob,os,shutil
import datetime
os.chdir(os.path.dirname(os.path.abspath(__file__)))
gauth = GoogleAuth()
#gauth.LocalWebserverAuth()
# Try to load saved client credentials
gauth.LoadCredentialsFile("mycreds.txt")
if gauth.credentials is None:
# Authenticate if they're not there
gauth.LocalWebserverAuth()
elif gauth.access_token_expired:
# Refresh them if expired
gauth.Refresh()
else:
# Initialize the saved creds
gauth.Authorize()
# Save the current credentials to a file
gauth.SaveCredentialsFile("mycreds.txt")
drive = GoogleDrive(gauth)
#Google Drive Folder ID
fid = '[FOLDER ID PLACEHOLDER]'
#Check to see if today's folder is created on PC
date = datetime.date.today()
today = date.strftime('%Y-%m-%d')
starting_folder = '[FOLDER PLACEHOLDER]'
if not os.path.exists(starting_folder + "/" + today):
os.makedirs(starting_folder + "/" + today)
destination_folder = starting_folder + "/" + today
#Change directory to the folder where the bulk bid tools are stored
os.chdir("[FOLDER PLACEHOLDER]")
for file in glob.glob("*.xlsx"):
try:
print(file)
with open(file,"r") as f:
fn = os.path.basename(f.name)
file_drive = drive.CreateFile({'parents':[{'kind':"drive#parentReference",'id':fid}],'title':fn})
file_drive.Upload()
print("The file: " + fn + " has been uploaded.")
shutil.move(starting_folder + "/" + fn,destination_folder + "/" + fn)
except:
pass
print("All files have been uploaded")
您实际上没有将文件的信息传递给请求。意思是,您实际上并没有将该文件的“字节”上传到云端硬盘。只需在该文件夹中创建一个具有相同名称的文件。
[如果您查看documentation for pyDrive,您会看到调用CreateFile
后,他们会使用SetContentFile
。
从文档中复制,您可以看到类似这样的示例:
SetContentFile