由于很难在一个地方找到包含枚举、值和扩展的列表,所以我就是这样做的。棘手的部分是让枚举工作(参见代码)
import win32com
from os.path import splitext
XlFileFormats = [
'xlAddIn' , # Microsoft Excel 97-2003 Add-In
'xlAddIn8' , # Microsoft Excel 97-2003 Add-In
'xlCSV' , # CSV
'xlCSVMac' , # Macintosh CSV
'xlCSVMSDOS' , # MSDOS CSV
'xlCSVWindows' , # Windows CSV
'xlCurrentPlatformText' , # Current Platform Text
'xlDBF2' , # DBF2
'xlDBF3' , # DBF3
'xlDBF4' , # DBF4
'xlDIF' , # DIF
'xlExcel12' , # Excel12
'xlExcel2' , # Excel2
'xlExcel2FarEast' , # Excel2 FarEast
'xlExcel3' , # Excel3
'xlExcel4' , # Excel4
'xlExcel4Workbook' , # Excel4 Workbook
'xlExcel5' , # Excel5
'xlExcel7' , # Excel7
'xlExcel8' , # Excel8
'xlExcel9795' , # Excel9795
'xlHtml' , # HTML format
'xlIntlAddIn' , # International Add-In
'xlIntlMacro' , # International Macro
'xlOpenDocumentSpreadsheet' , # OpenDocument Spreadsheet
'xlOpenXMLAddIn' , # Open XML Add-In
'xlOpenXMLTemplate' , # Open XML Template
'xlOpenXMLTemplateMacroEnabled', # Open XML Template Macro Enabled
'xlOpenXMLWorkbook' , # Open XML Workbook
'xlOpenXMLWorkbookMacroEnabled', # Open XML Workbook Macro Enabled
'xlSYLK' , # SYLK
'xlTemplate' , # Template
'xlTemplate8' , # Template 8
'xlTextMac' , # Macintosh Text
'xlTextMSDOS' , # MSDOS Text
'xlTextPrinter' , # Printer Text
'xlTextWindows' , # Windows Text
'xlUnicodeText' , # Unicode Text
'xlWebArchive' , # Web Archive
'xlWJ2WD1' , # WJ2WD1
'xlWJ3' , # WJ3
'xlWJ3FJ3' , # WJ3FJ3
'xlWK1' , # WK1
'xlWK1ALL' , # WK1ALL
'xlWK1FMT' , # WK1FMT
'xlWK3' , # WK3
'xlWK3FM3' , # WK3FM3
'xlWK4' , # WK4
'xlWKS' , # Worksheet
'xlWorkbookDefault' , # Workbook default
'xlWorkbookNormal' , # Workbook normal
'xlWorks2FarEast' , # Works2 FarEast
'xlWQ1' , # WQ1
'xlXMLSpreadsheet' , # XML Spreadsheet
]
xl = win32com.client.gencache.EnsureDispatch( "Excel.Application")
'''if you use Dispatch( 'Excel.Application') without having run makepy first,
the constants from XlFileFormats will not be available.
See
http://docs.activestate.com/activepython/2.4/pywin32/html/com/win32com/HTML/GeneratedSupport.html
http://docs.activestate.com/activepython/2.4/pywin32/html/com/win32com/HTML/QuickStartClientCom.html
'''
app = xl.Application
app.Visible = 1
book = app.Workbooks.Add(); book.Activate()
print 'DefaultSaveFormat:', app.DefaultSaveFormat
# you cannot access the constants until AFTER you have dispatched excel
constants = win32com.client.constants
print
app.DisplayAlerts = False
for formatName in XlFileFormats:
formatNum = getattr( constants, formatName)
print '%-35s: %5d,' % ( formatName, formatNum),
try: book.SaveAs( r'C:\excel_file_formats\xlbook', formatNum)
except Exception: print 'could not save this format'
else:
wbname, wbext = splitext( book.Name)
print '"%s"' % ( wbext)
del wbname, wbext
#~ raw_input( ' paused')
app.Quit()
这是输出:
DefaultSaveFormat: 51
xlAddIn : 18, ".xls"
xlAddIn8 : 18, ".xls"
xlCSV : 6, ".csv"
xlCSVMac : 22, ".csv"
xlCSVMSDOS : 24, ".csv"
xlCSVWindows : 23, ".csv"
xlCurrentPlatformText : -4158, ".txt"
xlDBF2 : 7, could not save this format
xlDBF3 : 8, could not save this format
xlDBF4 : 11, could not save this format
xlDIF : 9, ".dif"
xlExcel12 : 50, ".xlsb"
xlExcel2 : 16, could not save this format
xlExcel2FarEast : 27, could not save this format
xlExcel3 : 29, could not save this format
xlExcel4 : 33, could not save this format
xlExcel4Workbook : 35, could not save this format
xlExcel5 : 39, ".xls"
xlExcel7 : 39, ".xls"
xlExcel8 : 56, ".xls"
xlExcel9795 : 43, could not save this format
xlHtml : 44, ".htm"
xlIntlAddIn : 26, could not save this format
xlIntlMacro : 25, could not save this format
xlOpenDocumentSpreadsheet : 60, ".ods"
xlOpenXMLAddIn : 55, ".ods" !!! this one is not right !!!
xlOpenXMLTemplate : 54, ".xltx"
xlOpenXMLTemplateMacroEnabled : 53, ".xltm"
xlOpenXMLWorkbook : 51, ".xlsx"
xlOpenXMLWorkbookMacroEnabled : 52, ".xlsm"
xlSYLK : 2, ".slk"
xlTemplate : 17, ".xlt"
xlTemplate8 : 17, ".xlt"
xlTextMac : 19, ".txt"
xlTextMSDOS : 21, ".txt"
xlTextPrinter : 36, ".prn"
xlTextWindows : 20, ".txt"
xlUnicodeText : 42, ""
xlWebArchive : 45, ".mht"
xlWJ2WD1 : 14, could not save this format
xlWJ3 : 40, could not save this format
xlWJ3FJ3 : 41, could not save this format
xlWK1 : 5, could not save this format
xlWK1ALL : 31, could not save this format
xlWK1FMT : 30, could not save this format
xlWK3 : 15, could not save this format
xlWK3FM3 : 32, could not save this format
xlWK4 : 38, could not save this format
xlWKS : 4, could not save this format
xlWorkbookDefault : 51, ".xlsx"
xlWorkbookNormal : -4143, ".xls"
xlWorks2FarEast : 28, could not save this format
xlWQ1 : 34, could not save this format
xlXMLSpreadsheet : 46, ".xml"
我不知道为什么它无法保存某些格式;但它们似乎不是非常常见或有用的。
此外,xlOpenXMLAddIn 格式也很奇怪。它报告和扩展“.ods”——但这并不是它实际保存的内容。如果您删除已创建的任何文件,则将代码更改为使用 xlOpenXMLAddIn 格式仅运行一次
import win32com
from os.path import splitext
from time import sleep
xl = win32com.client.gencache.EnsureDispatch( "Excel.Application")
app = xl.Application
app.Visible = 1
book = app.Workbooks.Add(); book.Activate()
constants = win32com.client.constants
formatName = 'xlOpenXMLAddIn'
formatNum = getattr( constants, formatName)
print 'test_file_format: %s > %s' % ( formatName, formatNum)
app.DisplayAlerts = False
try: book.SaveAs( r'C:\excel_file_formats\xlbook', formatNum)
except Exception: print 'could not save this format'
else:
wbname, wbext = splitext( book.Name)
print '"%s" > "%s"' % ( wbname, wbext)
你得到这个:
test_file_format: xlOpenXMLAddIn > 55
"Book1" > ""
它创建的文件将命名为“xlbook.xlam”;但 excel 的标题栏显示“Book1 - Microsoft Excel”。所以我不确定这是怎么回事。无论如何,这似乎不是一种非常有用的格式。