Python Excel 操作
# Python Excel 操作 # 当你从odoo附件中读取excel的时候需要做base64转码,因为odoo中存储的附件都是经过转码的 company = self.env['res.company'].sudo().browse(cid) if not company.excel_file: return True # 解析文件后缀 filename = company.excel_file_name suffix = splitext(filename)[-1] # 将文件内容写入临时文件中 fp = tempfile.NamedTemporaryFile(delete= False,suffix=".xlsx") fp.write(binascii.a2b_base64(company.excel_file)) fp.seek(0) file_name = fp.name fp.close() # 本文只涉及xls、xlsx、csv后缀的Excel文件 # xls是2003年的版本 # xlsx是2007年至今一直的版本,和xls的区别是,表格中插入了图片的话,xlsx对图片进行了压缩处理,所以一样的内容xls会比xlsx大很多。 # csv以逗号分隔的文本文件,便于兼容其他程序,只保存活动工作表 # 涉及模块 # xlrd 用于读取Excel文件,无写功能。仅支持xls格式 pip3 install xlrd # xlwt 用于写Excel文件,无读功能。仅支持xls格式。当你只需要修改excel表格的时候,你调用保存你会发现图片丢失了。因为你用xlrd读取出来的内容只有文字并没有图片。图片还需你自己处理(还没研究) pip3 install xlwt # xlutils 用于读写Excel文件。仅支持xls格式。它只是集成了xlrd和xlwt两个模块。 pip3 install xlutils # csv 用于读写csv后缀的Excel文件。和xlwt一样,只是修改的话会丢失图片 pip3 install csv # 好像自带就有 # openpyxl 用于读取/写入 Excel xlsx/xlsm 文件。该模块修改excel不会丢失图片 pip3 install openpyxl # pandas 该模块是做数据分析用的,非常强大。修改excel表格的话也会丢失图片。但是好用的是,它支持所有excel格式 pip3 insytall pandas # 例子: # xlrd import xlrd book = xlrd.open_workbook("myfile.xls") print("The number of worksheets is {0}".format(book.nsheets)) print("Worksheet name(s): {0}".format(book.sheet_names())) sh = book.sheet_by_index(0) print("{0} {1} {2}".format(sh.name, sh.nrows, sh.ncols)) print("Cell D30 is {0}".format(sh.cell_value(rowx=29, colx=3))) for rx in range(sh.nrows): print(sh.row(rx)) # xlwt import xlwt from datetime import datetime style0 = xlwt.easyxf('font: name Times New Roman, color-index red, bold on', num_format_str='#,##0.00') style1 = xlwt.easyxf(num_format_str='D-MMM-YY') wb = xlwt.Workbook() ws = wb.add_sheet('A Test Sheet') ws.write(0, 0, 1234.56, style0) ws.write(1, 0, datetime.now(), style1) ws.write(2, 0, 1) ws.write(2, 1, 1) ws.write(2, 2, xlwt.Formula("A3+B3")) wb.save('example.xls') # xlutils import xlrd import xlwt from xlutils.copy import copy as xlscopy workbook = xlrd.open_workbook(file_name, formatting_info=True) writeworkbook = xlscopy(workbook) # writeworkbook.save('/home/pc1/odoo14/local_shequ/python3/test123.xls') for sheet_index in workbook.sheet_names(): sheet_page = workbook.sheet_by_name(sheet_index) write_sheet_page = writeworkbook.get_sheet(sheet_index) rowMax = sheet_page.nrows colMax = sheet_page.ncols for row in range(rowMax): if row == 0: continue else: rows = sheet_page.row_values(row) for col in range(colMax): te_result = '修改的值' if te_result: write_sheet_page.write(row,col,te_result) writeworkbook.save(file_name) # csv import csv file_reader = [] csv_reader = csv.reader(data_file, delimiter=',') file_reader.extend(csv_reader) for i in range(len(file_reader)): field = list(map(str, file_reader[i])) values = dict(zip(keys, field)) if values: if i == 0: continue else: values.update({ 'Part Type' : field[0], }) lvalues.append(values) # openpyxl # 文档:https://openpyxl.readthedocs.io/en/stable/ # 1 from openpyxl import load_workbook wb = load_workbook(file_name) for sheet_name in wb.sheetnames: ws = wb[sheet_name] for row in ws.rows: for cell in row: te_result = '你要修改的值' if te_result: cell.value = te_result wb.save(file_name) # 2 from openpyxl import Workbook wb = Workbook() # grab the active worksheet ws = wb.active # Data can be assigned directly to cells ws['A1'] = 42 # Rows can also be appended ws.append([1, 2, 3]) # Python types will automatically be converted import datetime ws['A2'] = datetime.datetime.now() # Save the file wb.save("sample.xlsx")
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?