python win32com 操作excel (tcy) 这个功能强大,但是效率低
最近在整理期货数据,发现很多老数据读取解码报错,许多不能识别,特此更改,面向具体应用。
能将未知编码的.csv,excel文件正确读取数据。
应该叫版本2吧。
def is_excel(cls, file: str) -> bool: 用途:是否是excel文件 def saveas(cls, file, newfile, fileformat=51): 用途:excel文件格式相互转换 def get_wsnames(cls, file) -> list: 获取工作表名 def get_file_encoding(cls, file): """获取文件编码""" def to_excel(cls, srcfile, dstfile=None, xlfmt='.xlsx', overlay=False): 用途:excel文件格式相互转换(.csv,.xls,.xlsx..xlsm) def read(cls, file, header=0, delimiter=None, encoding=None, kws): """读取.txt,.csv,.xls,.xlsx文件;返回list""" def write(cls, file, datas, wsnames=None, kws): 将数据写入excel文件
讯享网
实现:
讯享网# -*- coding: utf-8 -*-
"""
@Project:TcyQuant
@File: _excel.py
@Auth: tcy
@Date: 2023/12/4 23:42
@Desc:
@Ver : 0.0.1
@Emial: 3615693665@.com
@City: China Shanghai Songjiang Yexie
"""
import os.path
import chardet
import pandas as pd
import win32com.client as win32
from tool.file.file import File
class _FileFormat(object):
"""
名称 值 说明 扩展名
xlAddIn 18 Microsoft Excel 97-2003 外接程序 *.xla
xlAddIn8 18 Microsoft Excel 97-2003 外接程序 *.xla
xlCSV 6 CSV *.csv
xlCSVMac 22 Macintosh CSV *.csv
xlCSVMSDOS 24 MSDOS CSV *.csv
xlCSVUTF8 62 UTF8 CSV *.csv
xlCSVWindows 23 Windows CSV *.csv
xlCurrentPlatformText -4158 当前平台文本 *.txt
xlDBF2 7 Dbase 2 格式 *.dbf
xlDBF3 8 Dbase 3 格式 *.dbf
xlDBF4 11 Dbase 4 格式 *.dbf
xlDIF 9 数据交换格式 *.dif
xlExcel12 50 Excel 二进制工作簿 *.xlsb
xlExcel2 16 Excel 版本 2.0 (1987) *.xls
xlExcel2FarEast 27 Excel 版本 2.0 中文 (1987) *.xls
xlExcel3 29 Excel 版本 3.0 (1990) *.xls
xlExcel4 33 Excel 版本 4.0 (1992) *.xls
xlExcel4Workbook 35 Excel 版本 4.0工作簿格式(1992) *.xlw
xlExcel5 39 Excel 版本 5.0 (1994) *.xls
xlExcel7 39 Excel 95(版本 7.0) *.xls
xlExcel8 56 Excel 97-2003 工作簿 *.xls
xlExcel9795 43 Excel 版本 95 和 97 *.xls
xlHtml 44 HTML 格式 .htm;.html
xlIntlAddIn 26 国际外接程序 无文件扩展名
xlIntlMacro 25 国际宏 无文件扩展名
xlOpenDocumentSpreadsheet 60 OpenDocument 电子表格 *.ods
xlOpenXMLAddIn 55 Open XML 外接程序 *.xlam
xlOpenXMLStrictWorkbook 61 (&H3D) Strict Open XML 文件 *.xlsx
xlOpenXMLTemplate 54 Open XML 模板 *.xltx
xlOpenXMLTemplateMacroEnabled 53 启用 Open XML 模板宏 *.xltm
xlOpenXMLWorkbook 51 Open XML 工作簿 *.xlsx
xlOpenXMLWorkbookMacroEnabled 52 启用Open XML 工作簿宏 *.xlsm
xlSYLK 2 符号链接格式 *.slk
xlTemplate 17 Excel 模板格式 *.xlt
xlTemplate8 17 模板 8 *.xlt
xlTextMac 19 Macintosh 文本 *.txt
xlTextMSDOS 21 MSDOS 文本 *.txt
xlTextPrinter 36 打印机文本 *.prn
xlTextWindows 20 Windows 文本 *.txt
xlUnicodeText 42 Unicode 文本 无文件扩展名;*.txt
xlWebArchive 45 Web 档案 .mh;.mhtml
xlWJ2WD1 14 日语 1-2-3 *.wj2
xlWJ3 40 日语 1-2-3 *.wj3
xlWJ3FJ3 41 日语 1-2-3 格式 *.wj3
xlWK1 5 Lotus 1-2-3 格式 *.wk1
xlWK1ALL 31 Lotus 1-2-3 格式 *.wk1
xlWK1FMT 30 Lotus 1-2-3 格式 *.wk1
xlWK3 15 Lotus 1-2-3 格式 *.wk3
xlWK3FM3 32 Lotus 1-2-3 格式 *.wk3
xlWK4 38 Lotus 1-2-3 格式 *.wk4
xlWKS 4 Lotus 1-2-3 格式 *.wks
xlWorkbookDefault 51 默认工作簿 *.xlsx
xlWorkbookNormal -4143 常规工作簿 *.xls
xlWorks2FarEast 28 Microsoft Works 2.0 两端对齐格式 *.wks
xlWQ1 34 Quattro Pro 格式 *.wq1
xlXMLSpreadsheet 46 XML 电子表格 *.xml
"""
xlsuffixs = [
'.xls', # Microsoft Excel 97-2003 文件
'.xlsx', # Microsoft Excel文件
'.xlsm', # 启用宏的工作簿
'.xlt', # Microsoft Excel 97-2003 模板文件
'.xltx', # Excel模板
'.xltm', # 启用宏的模板'
]
xlfmt = {
'xlAddIn': 18, # .xla Microsoft Excel 97-2003 外接程序
'xlAddIn8': 18, # .xla Microsoft Excel 97-2003 外接程序
'xlCSV': 6, # .csv CSV
'xlCSVMac': 22, # .csv Macintosh CSV
'xlCSVMSDOS': 24, # .csv MSDOS CSV
'xlCSVUTF8': 62, # .csv UTF8 CSV
'xlCSVWindows': 23, # .csv Windows CSV
'xlCurrentPlatformText': -4158, # .txt 当前平台文本
'xlDBF2': 7, # .dbf Dbase 2 格式
'xlDBF3': 8, # .dbf Dbase 3 格式
'xlDBF4': 11, # .dbf Dbase 4 格式
'xlDIF': 9, # .dif 数据交换格式
'xlExcel12': 50, # .xlsb Excel 二进制工作簿
'xlExcel2': 16, # .xls Excel 版本 2.0 (1987)
'xlExcel2FarEast': 27, # .xls Excel 版本 2.0 中文 (1987)
'xlExcel3': 29, # .xls Excel 版本 3.0 (1990)
'xlExcel4': 33, # .xls Excel 版本 4.0 (1992)
'xlExcel4Workbook': 35, # .xlw Excel 版本 4.0 工作簿格式 (1992)
'xlExcel5': 39, # .xls Excel 版本 5.0 (1994)
'xlExcel7': 39, # .xls Excel 95(版本 7.0)
'xlExcel8': 56, # .xls Excel 97-2003 工作簿
'xlExcel9795': 43, # .xls Excel 版本 95 和 97
'xlHtm': 44, # .htm HTML 格式
'xlHtml': 44, # .html HTML 格式
'xlIntlAddIn': 26, # ' 国际外接程序-无文件扩展名
'xlIntlMacro': 25, # ' 国际宏-无文件扩展名
'xlOpenDocumentSpreadsheet': 60, # .ods OpenDocument 电子表格
'xlOpenXMLAddIn': 55, # .xlam Open XML 外接程序
'xlOpenXMLStrictWorkbook': 61, # (&H3D) .xlsx Strict Open XML 文件
'xlOpenXMLTemplate': 54, # .xltx Open XML 模板
'xlOpenXMLTemplateMacroEnabled': 53, # .xltm 启用 Open XML 模板宏
'xlOpenXMLWorkbook': 51, # .xlsx Open XML 工作簿
'xlOpenXMLWorkbookMacroEnabled': 52, # .xlsm 启用 Open XML 工作簿宏
'xlSYLK': 2, # .slk 符号链接格式
'xlTemplate': 17, # .xlt Excel 模板格式
'xlTemplate8': 17, # .xlt 模板 8
'xlTextMac': 19, # .txt Macintosh 文本
'xlTextMSDOS': 21, # .txt MSDOS 文本
'xlTextPrinter': 36, # .prn 打印机文本
'xlTextWindows': 20, # .txt Windows 文本
'xlUnicodeText': 42, # .txt Unicode 文本-无文件扩展名或txt
'xlWebArchive': 45, # .mh Web 档案
'xlWebArchive2': 45, # .mhtml Web 档案
'xlWJ2WD1': 14, # .wj2 日语 1-2-3
'xlWJ3': 40, # .wj3 日语 1-2-3
'xlWJ3FJ3': 41, # .wj3 日语 1-2-3 格式
'xlWK1': 5, # .wk1 Lotus 1-2-3 格式
'xlWK1ALL': 31, # .wk1 Lotus 1-2-3 格式
'xlWK1FMT': 30, # .wk1 Lotus 1-2-3 格式
'xlWK3': 15, # .wk3 Lotus 1-2-3 格式
'xlWK3FM3': 32, # .wk3 Lotus 1-2-3 格式
'xlWK4': 38, # .wk4 Lotus 1-2-3 格式
'xlWKS': 4, # .wks Lotus 1-2-3 格式
'xlWorkbookDefault': 51, # .xlsx 默认工作簿
'xlWorkbookNormal': -4143, # .xls 常规工作簿
'xlWorks2FarEast': 28, # .wks Microsoft Works 2.0 两端对齐格式
'xlWQ1': 34, # .wq1 Quattro Pro 格式
'xlXMLSpreadsheet': 46, # .xml XML 电子表格
'.csv': 62, # .csv UTF8 CSV
'.htm': 44, # .htm HTML 格式
'.html': 44, # .html HTML 格式
'.txt': 42, # .txt Unicode 文本-无文件扩展名或txt
'.xla': 18, # .xla Microsoft Excel 97-2003 外接程序
'.xls': 56, # .xls Excel 97-2003 工作簿
'.xlsb': 50, # .xlsb Excel 二进制工作簿
'.xlsm': 52, # .xlsm 启用 Open XML 工作簿宏
'.xlsx': 51, # .xlsx 默认工作簿
'.xlt': 17, # .xlt Excel 模板格式
'.xlw': 35, # .xlw Excel 版本 4.0 工作簿格式 (1992)
}
xltype = {
'': [26, 25, 42],
'.csv': [6, 22, 24, 62, 23, 62],
'.dbf': [7, 8, 11],
'.dif': [9],
'.htm': [44],
'.html': [44],
'.mh': [45],
'.mhtml': [45],
'.ods': [60],
'.prn': [36],
'.slk': [2],
'.txt': [-4158, 19, 21, 20, 42, 42],
'.wj2': [14],
'.wj3': [40, 41],
'.wk1': [5, 31, 30],
'.wk3': [15, 32],
'.wk4': [38],
'.wks': [4, 28],
'.wq1': [34],
'.xla': [18],
'.xlam': [55],
'.xls': [16, 27, 29, 33, 39, 56, 43, -4143],
'.xlsb': [50],
'.xlsm': [52],
'.xlsx': [51, 61],
'.xlt': [17],
'.xltm': [53],
'.xltx': [54],
'.xlw': [35],
'.xml': [46],
}
class Excel(object): @classmethod def is_excel(cls, file: str) -> bool: """用途:是否是excel文件""" suffix = os.path.splitext(file)[1] if not suffix: return False return suffix in _FileFormat.xlsuffixs @classmethod def saveas(cls, file, newfile, fileformat=51): # type:(str,str,int)->NoneType """ 用途:excel文件格式相互转换saveas 参数: file: str newfile:str fileformat:str or int='.xlsx' FileFormat=51,表示xlsx扩展文件; FileFormat=56,表示xls扩展文件; FileFormat=52,表示xlsm扩展文件; FileFormat=23,表示csv扩展文件; """ excel = win32.gencache.EnsureDispatch('Excel.Application') wb = excel.Workbooks.Open(file) wb.SaveAs(newfile, FileFormat=fileformat) wb.Close() excel.Application.Quit() @classmethod def get_wsnames(cls, file) -> list: if file.endswith('.csv'): return [File.get_name(file)] exl = pd.ExcelFile(file) wsnames = exl.sheet_names exl.close() return wsnames @classmethod def _get_file_encoding_(cls, file): """获取文件编码""" with open(file, 'rb') as f: text = f.read() encoding = chardet.detect(text) if not encoding: return None return encoding['encoding'] @classmethod def get_file_encoding(cls, file): """获取文件编码""" return cls._get_file_encoding_(file) @classmethod def to_excel(cls, srcfile, dstfile=None, xlfmt='.xlsx', overlay=False): # type:(str,str,str,bool)->None """ 用途:excel文件格式相互转换(.csv,.xls,.xlsx..xlsm) 参数: file: str dst:str=None 新路径文件夹或文件 默认在原来的位置创建出xxx.xlsx文件 FileFormat=51,表示xlsx扩展文件; FileFormat=56,表示xls扩展文件; FileFormat=52,表示xlsm扩展文件; overlay:bool=False 是否覆盖或更名(默认)同名xxx.xlsx文件 True覆盖原文件 False为连接符,后跟数字1,2,...,如xxx_1.xlsx """ if dstfile is None: if srcfile.endswith('.xlsx'): return dir1, suffix = os.path.splitext(srcfile) dstfile = dir1 + '.xlsx' dstfile = File.get_unfile(dstfile) d = {'.xlsx': 51, '.xls': 56, '.xlsm': 52} cls.saveas(srcfile, dstfile, d[xlfmt]) if overlay: File.del_file(srcfile) File.rename(dstfile, srcfile) @classmethod def _readcsv_(cls, file, kws): try: return pd.read_csv(file, kws) except Exception: try: encoding = cls._get_file_encoding_(file) kws['encoding'] = encoding return pd.read_csv(file, kws) except Exception: pass newfile = File.get_unfile(file) cls.saveas(newfile, 62) encoding = cls._get_file_encoding_(newfile) kws['encoding'] = encoding df = pd.read_csv(newfile, kws) df.to_csv(file, index=False) File.del_file(newfile) return df @classmethod def read(cls, file, header=0, delimiter=None, encoding=None, kws): """读取.txt,.csv,.xls,.xlsx文件;返回list""" def readtxt(file): try: return pd.read_table(file, kws) except Exception: encoding = cls._get_file_encoding_(file) kws['encoding'] = encoding return pd.read_table(file, kws) kws['header'] = header if file.endswith('.txt'): kws['delimiter'] = delimiter kws['encoding'] = encoding return [readtxt(file)] elif file.endswith('.csv'): kws['delimiter'] = delimiter kws['encoding'] = encoding return [cls._readcsv_(file, kws)] else: datas = [] wsnames = cls.get_wsnames(file) for name in wsnames: datas.append(pd.read_excel(file, name, kws)) return datas # df[combine_cells] = df[combine_cells].fillna(method='ffill') @classmethod def write(cls, file, datas, wsnames=None, kws): def get_uncol(cols, wsname='wsname'): if wsname not in cols: return wsname i = 0 while True: tmp = r'%s_%s' % (wsname, i) if tmp not in cols: return tmp i += 1 if wsnames is None: if len(datas) == 1: wsnames = [File.get_name(file)] else: wsnames = ['Sheet%s' % i for i in range(len(datas))] if file.endswith('.csv'): cols = [] for df in datas: cols += df.columns.to_list() wsname = get_uncol(cols, wsname='wsname') df = pd.DataFrame() for df1, _wsname in zip(datas, wsnames): df2 = df1.copy() df2.insert(loc=0, column=wsname, value=_wsname) df = pd.concat([df, df2], ignore_index=True) df.to_csv(file, index=False) else: with pd.ExcelWriter(file, engine="openpyxl") as xlwriter: for df, name in zip(datas, wsnames): df.to_excel(xlwriter, sheet_name=name, index=False)
讯享网def test(a=Excel): path = r'C:\Users\Administrator\Desktop' filexlsx = path + r'\tmp.xlsx' filexls = path + r'\tmp.xls' filecsv = path + r'\tmp.csv' d1 = { 'Item': ['Boy', pd.NA, 'Girl', pd.NA], 'Name': ['Tom', 'Bob', 'Alice', 'Amila'], 'Age': [10, 20, 30, 40], 'Grade': ['a', 'b', 'c', 'd'], } d2 = { 'Name': ['Tom', 'Bob', 'Alice', 'Amila'], 'Bool': [True, False, False, True], 'Comment': [pd.NA, pd.NA, pd.NA, pd.NA], 'Date': ['2022-01-02', '2022-01-03', '2022-01-04', '2022-01-05'], } df1 = pd.DataFrame(d1) df2 = pd.DataFrame(d2) datas = [df1, df2] # a.write(filecsv,datas) # a.write(filexls, datas) # a.write(filexlsx, datas) datas = a.read(filecsv) print(datas) datas = a.read(filexls) print(datas) datas = a.read(filexlsx) print(datas) print(a.get_wsnames(filecsv)) print(a.get_wsnames(filexls)) print(a.get_wsnames(filexlsx)) newfile = File.get_unfile(filexlsx) a.saveas(filexls, newfile) files = [filecsv, filexls, filexlsx, newfile] for file in files: File.del_file(file) if __name__ == '__main__': test()
以下为老版本:
1.1.ExcelWriter : 用途:用于将 DataFrame 对象写入 Excel 工作表的类
讯享网1.2.to_excel( excel_writer, 文件路径或现有ExcelWriter sheet_name='Sheet1', 工作表名 startrow=0, 左上角单元格 startcol=0, 左上角单元格 columns=None, 要写入的列 str or list header=True, 写出列名 index=True, 写入行名 na_rep='', 缺失数据表示 float_format=None, 浮点数格式化str index_label=None, 如需要,可用索引列的列标签 engine=None , 写入引擎 merge_cells=True, encoding=None, 文件编码 inf_rep='inf', 表示无穷大 verbose=True, 显示更多信息 freeze_panes=None 冻结最底行和最右列 ) 用途:将对象写入 Excel 工作表. 说明: * 将单个对象写入 Excel.xlsx文件,只需指定目标文件名. * 写入多个工作表,需创建具有目标文件名“ExcelWriter”对象,并在文件中指定要写入的工作表. * 通过指定唯一的“sheet_name”可以写入多个工作表. * 将所有数据写入文件后,必须保存更改 注意: * 使用已存在的文件名创建“ExcelWriter”对象将导致现有文件的内容被删除.
参数: excel_writer : str,ExcelWriter文件路径或现有ExcelWriter sheet_name :='Sheet1' str, 工作表名 na_rep :='' str,缺失数据表示 float_format : str,可选 浮点数格式化str;如="%.2f"将0.1234格式化为0.12 columns :str序列或列表,可选 要写入的列. header :=true bool,[str],写出列名.如[str]则假定它是列名的别名. index :=true bool,写入行名(索引) index_label : =None str 或序列,如需要,可用索引列的列标签. * 如未指定,且'header'=true;'index'=True,则使用索引名称. * 如果数据文件使用多索引则需使用序列 startrow : =0int,左上角单元格行转储数据帧. startcol :=0 int,左上角单元格列转储数据帧. engine:str,可选的要使用的写入引擎,“openpyxl”或“xlsxwriter”. * 还可通过选项 io.excel.xlsx.writer,io.excel.xls.writer,io.excel.xlsm.writer进行设置. merge_cells :=true bool,将MultiIndex和Hierarchical Rows写入合并单元格. encoding :=None str, 可选生成的excel文件编码(仅xlwt需要,其他编写器本机支持unicode) inf_rep :='inf' str,表示无穷大(Excel中没有无穷大的本机表示). verbose : =true bool,在错误日志中显示更多信息. freeze_panes :=None int 元组(长度为 2),可选指定要冻结的基于1的最底行和最右列. 备注: * 为了与 :meth:'~DataFrame.to_csv' 兼容,to_excel 在写入之前将列表和字典序列化为字符串. * 一旦保存工作簿,就不可能在不重写整个工作簿的情况下写入更多数据.
讯享网2.示例: 实例1.0:创建,写入和保存工作簿: df = pd.DataFrame([['Tom',21], ['Bob',30]],index=[10,11],columns=['name', 'age']) df.to_excel("output.xlsx") #df数据写excel-sheet1 df.to_excel(" output.xlsx",sheet_name='Sheet_name_1') #df数据写excel-指定工作表名 df.to_excel('output1.xlsx', engine='xlsxwriter') #df数据写excel-自动选择默认引擎
实例1.1:必须指定 ExcelWriter 对象: df2 = df.copy() with pd.ExcelWriter('output.xlsx') as writer: df1.to_excel(writer, sheet_name='sheet1') df2.to_excel(writer , sheet_name='sheet2') 实例1.2:ExcelWriter可用于附加到现有Excel文件: with pd.ExcelWriter('output.xlsx',mode='a') as writer: df.to_excel(writer , sheet_name='Sheet_name_3') 实例1.3:指定日期格式 with ExcelWriter('path_to_file.xlsx',date_format='YYYY-MM-DD', datetime_format='YYYY-MM-DD HH:MM:SS') as writer: df.to_excel(writer)
讯享网实例2.1:读写 df=pd.DataFrame({'No':[1001 ,1002,1003],'Name':['Tom','Bob','Jim'],'Weight':[20,30,40]}) df.to_excel('foo.xlsx', sheet_name=' Sheet1') pd.read_excel('foo.xlsx', 'Sheet1', index_col=None, na_values=['NA']) 无姓名权重 0 1001 Tom 20 1 1002 Bob 30 2 1003 Jim 40
实例2.2:df保存至excel文件 import pandas as pd import os,xlsxwriter from win32com.client import Dispatch def close_excel_file(file = 'output.xlsx'): xlApp = Dispatch('Excel.Application') xlApp.DisplayAlerts = False # 设置不显示警告和消息框 #xlBook = xlApp.Workbooks.Open(file) workbooks_n = xlApp.Workbooks.Count if workbooks_n > 0:return for i in range(1, workbooks_n + 1):# 工作簿索引从1开始 path_ = xlApp.Workbooks(i).Path name_ = xlApp.Workbooks(i).Name path = path_+ "\\backup_" + name_ if(file in path): # xlApp.Workbooks(i).Close() #关闭当前打开的文件,不保存文件 xlApp.Workbooks(i).Activate() xlApp.Workbooks(i).SaveAs(path) xlApp.Workbooks(path).Close() # xlApp.Quit() #关闭所有打开的excel文件 del xlApp def write_excel(file = 'output.xlsx'): df1 = pd.DataFrame([[10, 'Tom', 22], [11, 'Bob', 32], [12, 'Jim', 3]], index=[0, 1, 2], columns=['no', 'name', 'age']) df2 = pd.DataFrame([[20, 'Aim', 1.71], [21, 'Mark', 1.58], [22, 'Smith', 1.68]], index=[0, 1, 2], columns=['no', 'name', 'height']) with pd.ExcelWriter(file) as fw: df1.to_excel(fw, sheet_name='sheet1') df2.to_excel(fw, sheet_name='sheet2') workbook = fw.book worksheet = fw.sheets['sheet2'] # fw.cur_sheet='sheet1' print('1.1.fw.book=', fw.book) print('1.2.fw.cur_sheet=', fw.cur_sheet) print('1.3.dict=', fw.__dict__) for i, v in enumerate([10,11,12,13]): print('i=', i, 'v=', v) worksheet.write(i + 4, 4, 1000 + i) if __name__ == '__main__': close_excel_file() write_excel()
讯享网实例2.3:保存至excel文件 def df_write_excel(filename,sheet_name,df): fw = pd.ExcelWriter(filename) df.to_excel(fw, sheet_name=sheet_name, encoding='utf8', header=False, index=False, startcol=0, startrow=2) workbook = fw.book worksheet = fw.sheets[sheet_name] date_fmt1 = workbook.add_format({'bold': True, 'font_size': 10, 'font_name': u'微软雅黑', 'num_format': 'yyyy-mm-dd', 'bg_color': '#9FC3D1','valign': 'vcenter', 'align': 'center'}) for col_num, value in enumerate(df.columns.values): worksheet.write(1, col_num, value, date_fmt1) set_format(workbook,worksheet,df) fw.save()# 保存 def set_format(workbook,worksheet,df): # 设置格式 fmt = workbook.add_format({"font_name": u"微软雅黑"}) percent_fmt = workbook.add_format({'num_format': '0.00%'}) amt_fmt = workbook.add_format({'num_format': '#,0'}) border_format = workbook.add_format({'border': 1}) note_fmt = workbook.add_format({'bold': True, 'font_name': u'微软雅黑', 'font_color': 'red', 'align': 'left', 'valign': 'vcenter'}) date_fmt = workbook.add_format({'bold': False, 'font_name': u'微软雅黑', 'num_format': 'yyyy-mm-dd'}) highlight_fmt = workbook.add_format({'bg_color': '#FFD7E2', 'num_format': '0.00%'}) # 生效单元格格式 l_end = len(df.index) + 2 worksheet.merge_range('A1:B1', u'测试情况统计表', note_fmt)# 增加个表格说明 worksheet.set_column('A:E', 15, fmt)# 设置列宽 worksheet.conditional_format('B3:E%d' % l_end, {'type': 'cell', 'criteria': '>=', 'value': 1, 'format': amt_fmt}) # 有条件设定表格格式:金额列 worksheet.conditional_format('E3:E%d' % l_end,{'type': 'cell', 'criteria': '<=', 'value': 0.1, 'format': percent_fmt}) # 有条件设定表格格式:百分比 worksheet.conditional_format('E3:E%d' % l_end,{'type': 'cell', 'criteria': '>', 'value': 0.1, 'format': highlight_fmt})# 有条件设定表格格式:高亮百分比 worksheet.conditional_format('A1:E%d' % l_end, {'type': 'no_blanks', 'format': border_format})# 加边框 worksheet.conditional_format('A3:A62', {'type': 'no_blanks', 'format': date_fmt}) # 设置日期格式

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/126073.html