python读写excel进阶应用(解决解码问题tcy)

python读写excel进阶应用(解决解码问题tcy)python win32com 操作 excel tcy 这个功能强大 但是效率低 最近在整理期货数据 发现很多老数据读取解码报错 许多不能识别 特此更改 面向具体应用 能将未知编码的 csv excel 文件正确读取数据 应该叫版本 2 吧 def is excel cls file str

大家好,我是讯享网,很高兴认识大家。

 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}) # 设置日期格式 
小讯
上一篇 2025-01-18 07:41
下一篇 2025-02-26 20:29

相关推荐

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