admin 管理员组

文章数量: 1184232

我正在尝试编写和使用python和pywin32创建excel文件的应用程序,我想使用默认格式和扩展名保存该文件,无论用户使用的是哪个版本的excel.根据excel的版本,它们使用的默认格式可以是使用“ .xlsx”扩展名的“ Open XML Workbook”.其他时候,它可能是基本的excel格式和“ .xls”扩展名.另外,用户可以将excel配置为使用其他默认格式.

我知道如何找到默认格式(Application.DefaultSaveFormat)-但我不知道如何确定该格式的默认扩展名.问题的部分原因是我的文件名甚至在扩展名之前都包含句点:

基本文件名是“ filename.BOM”,因此实际文件名应为“ filename.BOM.xls”或“ filename.BOM.xlsx”,具体取决于默认格式.

如果我在文件名中没有加倍号,那一切都会好的.

因此,如果默认格式为“ Open XML Workbook”,则Workbook.SaveAs(“ filename”)将创建一个名为“ filename.xlsx”的文件.但是,Workbook.SaveAs(“ filename.BOM”)创建的文件名为“ filename.BOM”.当在文件名中看到句点时,Excel不会添加默认扩展名.

我唯一能弄清楚的是保存一个临时文件,从中获取扩展名,然后删除该临时文件-但这似乎很麻烦.有人有更好的解决方案吗?

from tempfile import mktemp

from os import path

from os import remove as delfile

class excel:

def __init__( self):

self.app = DispatchEx( "Excel.Application" )

def saveas_default_ext_format( self, workbook, filename):

# filename - file name with path but without extension

tmpname = mktemp()

alerts = self.app.DisplayAlerts

self.app.DisplayAlerts = False

workbook.SaveAs( tmpname)

self.app.DisplayAlerts = alerts

tmpname = self.app.ActiveWorkbook.FullName

x, ext = path.splitext( tmpname)

fullname = filename + ext

workbook.SaveAs( fullname)

delfile( tmpname)

return fullname

本文标签: 扩展名 使用 认格式