从 .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)