从 .msg 附件转换 .xls 文件而不将 .xls 作为临时文件存储在磁盘上
Convert .xls files from .msg attachments wihtout storing .xls as temporary files on disk
我正在尝试从 .msg 文件中提取所有 .xls 附件文件,然后将它们转换为 .xlsx
所以我当前的代码流程是这样的:
msg = outlook.OpenSharedItem(os.path.join(mesg_path, file))
att=msg.Attachments
for i in att:
if i.FileName.endswith('.xls'):
i.SaveAsFile(os.path.join('C:/some_path_goes_here', i.FileName))
然后我使用一些其他代码打开这些 .xls 文件并转换为 .xlsx 文件:
for file in dir_list:
if file.endswith('.xls'):
file_with_destination = os.path.join(destination_path, file)
file_with_path = os.path.join(source_path, file)
excel = win32.gencache.EnsureDispatch('Excel.Application')
wb = excel.Workbooks.Open(file_with_path)
wb.SaveAs(file_with_destination + "x", FileFormat = 51)
wb.Close(True)
excel.Application.Quit()
它完成了工作。但我很好奇在从 .msg 附件中提取 .xls 文件时是否可以转换它们,这样我就不必创建临时 .xls 文件并将其存储在磁盘上。有什么办法可以做到这一点:?
msg = outlook.OpenSharedItem(os.path.join(mesg_path, file))
att=msg.Attachments
for i in att:
if i.FileName.endswith('.xls'):
#i.SaveAsFile(os.path.join('C:/some_path_goes_here', i.FileName))
#instead of saving convert to .xlsx and save to destination folder
您可以直接读取文件并将其保存到xlsx format
中所需的位置,如下面的代码所述。只需将 file_destination
变量更新为您要保存文件的目标路径。
import io
import pandas as pd
msg = outlook.OpenSharedItem(os.path.join(mesg_path, file))
att=msg.Attachments
for i in att:
if i.FileName.endswith('.xls'):
file_content_bytes = i.content
my_file_io = io.BytesIO(file_content_bytes)
# Below goes your file name or the destination path
file_destination = "filename.xlsx"
pd.read_excel(io=my_file_io).to_excel(file_destination, index=False)
我正在尝试从 .msg 文件中提取所有 .xls 附件文件,然后将它们转换为 .xlsx 所以我当前的代码流程是这样的:
msg = outlook.OpenSharedItem(os.path.join(mesg_path, file))
att=msg.Attachments
for i in att:
if i.FileName.endswith('.xls'):
i.SaveAsFile(os.path.join('C:/some_path_goes_here', i.FileName))
然后我使用一些其他代码打开这些 .xls 文件并转换为 .xlsx 文件:
for file in dir_list:
if file.endswith('.xls'):
file_with_destination = os.path.join(destination_path, file)
file_with_path = os.path.join(source_path, file)
excel = win32.gencache.EnsureDispatch('Excel.Application')
wb = excel.Workbooks.Open(file_with_path)
wb.SaveAs(file_with_destination + "x", FileFormat = 51)
wb.Close(True)
excel.Application.Quit()
它完成了工作。但我很好奇在从 .msg 附件中提取 .xls 文件时是否可以转换它们,这样我就不必创建临时 .xls 文件并将其存储在磁盘上。有什么办法可以做到这一点:?
msg = outlook.OpenSharedItem(os.path.join(mesg_path, file))
att=msg.Attachments
for i in att:
if i.FileName.endswith('.xls'):
#i.SaveAsFile(os.path.join('C:/some_path_goes_here', i.FileName))
#instead of saving convert to .xlsx and save to destination folder
您可以直接读取文件并将其保存到xlsx format
中所需的位置,如下面的代码所述。只需将 file_destination
变量更新为您要保存文件的目标路径。
import io
import pandas as pd
msg = outlook.OpenSharedItem(os.path.join(mesg_path, file))
att=msg.Attachments
for i in att:
if i.FileName.endswith('.xls'):
file_content_bytes = i.content
my_file_io = io.BytesIO(file_content_bytes)
# Below goes your file name or the destination path
file_destination = "filename.xlsx"
pd.read_excel(io=my_file_io).to_excel(file_destination, index=False)