九、Python (openpyxl)操作excel写支持xlsx格式(二)
python使用openpyxl库读写Excel表格的方法(增删改查操作)

python使⽤openpyxl库读写Excel表格的⽅法(增删改查操作)⽬录⼀、前⾔⼆、安装openpyxl三、openpyxl的使⽤四、结束语⼀、前⾔嗨,⼤家好,我是新发。
最近需要做个⼩⼯具,可以通过python来读写Excel,实现增删改查操作。
以前⽤的是xlrd和xlwt这两个python库,今天我要讲的是openpyxl库,我觉得openpyxl⽐xlrd和xlwt更强⼤更好⽤,话不多说,开始吧。
⼆、安装openpyxl可以直接通过命令⾏安装pip install openpyxl不过如果你下载了openpyxl,因为openpyxl还依赖了et_xmlfile库,所以你还得下载个et_xmlfile。
如果是⽤命令⾏pip install openpyxl,则会⾃动下载依赖。
安装完毕后,在python中执⾏import openpyxl如果没有报错,则说明安装成功了。
三、openpyxl的使⽤1、创建Excel⽂件演⽰代码:import openpyxlbook = openpyxl.Workbook()book.save(u'我的表格.xlsx')运⾏效果如下,⽣成了⼀个excel表格。
2、加载已存在的Excel⽂件上⾯已经创建了⼀个表格,我们可以直接加载它。
演⽰代码:import openpyxlbook = openpyxl.load_workbook(u'我的表格.xlsx')# ...book.close()3、创建sheet演⽰代码:import openpyxlbook = openpyxl.load_workbook(u'我的表格.xlsx')sheet = book.create_sheet('我的Sheet')book.save(u'我的表格.xlsx')book.close()运⾏效果如下:4、判断某个sheet是否存在演⽰代码:import openpyxlbook = openpyxl.load_workbook(u'我的表格.xlsx')if None != book[u'我的Sheet']:print('我的Sheet 存在')book.close()运⾏结果:我的Sheet 存在5、遍历所有Sheet的名称演⽰代码:import openpyxlbook = openpyxl.load_workbook(u'我的表格.xlsx')for sheet_name in book.sheetnames:print(sheet_name)book.close()运⾏结果:Sheet我的Sheet6、写⼊单元格演⽰代码:import openpyxlbook = openpyxl.load_workbook(u'我的表格.xlsx')sheet = book['Sheet']sheet.cell(1,1).value = 'name'sheet.cell(2,1).value = '姓名'sheet.cell(3,1).value = '林新发'book.save(u'我的表格.xlsx')book.close()运⾏效果7、获取单元格的各个属性值为了演⽰,我在我名字那⾥加个批注:演⽰代码:import openpyxlbook = openpyxl.load_workbook(u'我的表格.xlsx') sheet = book['Sheet']cell = sheet.cell(3,1)# 获取单元格的值print('value:%s'%cell.value)# 获取⾏号、列号print('row: %d, col: %d'%(cell.row, cell.column)) # 获取列名print('column_letter: %s'%cell.column_letter)# 单元格的坐标print('coordinate: %s'%cell.coordinate)# 单元格数据格式,n: 数字,s:字符串,d: ⽇期print('data_type: %s'%cell.data_type)# 单元格编码格式print('encoding: %s'%cell.encoding)# 单元格样式print('style: %s'%cell.style)# 单元格批注print('comment: %s'%ment)book.close()运⾏结果:value:林新发row: 3, col: 1column_letter: Acoordinate: A3data_type: sencoding: utf-8style: 常规comment: Comment: linxinfa:多才多艺 by linxinfa8、遍历单元格为了演⽰,我加多⼀写数据:⼀⾏⼀⾏遍历,演⽰代码:import openpyxlbook = openpyxl.load_workbook(u'我的表格.xlsx')sheet = book['Sheet']# ⼀⾏⼀⾏遍历for one_row in sheet.rows:for cell in one_row:print(cell, cell.value)book.close()运⾏结果:<Cell 'Sheet'.A1> name<Cell 'Sheet'.B1> profession<Cell 'Sheet'.C1> hobby<Cell 'Sheet'.A2> 姓名<Cell 'Sheet'.B2> 职业<Cell 'Sheet'.C2> 爱好<Cell 'Sheet'.A3> 林新发<Cell 'Sheet'.B3> Unity3D游戏开发⼯程师<Cell 'Sheet'.C3> 吉他、钢琴、画画、猫猫、写博客⼀列⼀列遍历,演⽰代码:import openpyxlbook = openpyxl.load_workbook(u'我的表格.xlsx')sheet = book['Sheet']# ⼀列⼀列遍历for one_col in sheet.columns:for cell in one_col:print(cell, cell.value)book.close()运⾏结果:<Cell 'Sheet'.A1> name<Cell 'Sheet'.A2> 姓名<Cell 'Sheet'.A3> 林新发<Cell 'Sheet'.B1> profession<Cell 'Sheet'.B2> 职业<Cell 'Sheet'.B3> Unity3D游戏开发⼯程师<Cell 'Sheet'.C1> hobby<Cell 'Sheet'.C2> 爱好<Cell 'Sheet'.C3> 吉他、钢琴、画画、猫猫、写博客9、最⼤⾏最⼤列为了演⽰,再加点数据。
python用openpyxl操作excel

python⽤openpyxl操作excelpython操作excel⽅法1)⾃⾝有Win32 COM操作office但讲不清楚,可能不⽀持夸平台,linux是否能⽤不清楚,其他有专业处理模块,如下2)xlrd:(读excel)表,xlrd读⼤表效率⾼于openpyxl3)xlwt:(写excel)表,xlrd和xlwt对版本上兼容不太好,很多新版excel有问题。
新版excel处理:openpyxl(可读写excel表)专门处理Excel2007及以上版本产⽣的xlsx⽂件,xls和xlsx之间转换容易注意:如果⽂字编码是“gb2312” 读取后就会显⽰乱码,请先转成Unicode安装openpyxl1)下载openpyxl模块:https:///pypi/openpyxl2)解压到指定⽂件⽬录:tar -xzvf openpyxl.tar.gz3)进⼊⽬录,找到setup.py⽂件,执⾏命令:python setup.py install如果报错No module named setuptools 就使⽤命令“easy_install openpyxl”,easy_install for win32,会⾃动安装setuptools。
这⾥注意,如果不能⾃动安装,基本上python的模块都通过命令 python 模块名.py install 来安装,如果setuptools模块没有,直接去官⽹下载,然后前⾯命令安装就可以了4)处理图⽚还需要安装pillow(PIL)To be able to include images (jpeg, png, bmp,...) into an openpyxl file, you will also need the “pillow” library that can be installed with:pip install pillowpthon学习资料python 学习⼩组/group/show/368/page/4官⽹:https:///pypi/openpyxlhttp://openpyxl.readthedocs.io/en/default/good:/suofiya2008/article/details/6284208/zzukun/article/details/49946147/topics/0/501/501962.htmlopenpyxl的使⽤openpyxl定义多种数据格式最重要的三种:NULL空值:对应于python中的None,表⽰这个cell⾥⾯没有数据。
python使用openpyxl来写数据到excel表格

python使⽤openpyxl来写数据到excel表格使⽤openpyxl写execl确实很⽅便。
我先介绍⽤到的相关模块与函数Workbook:⼯作簿模块,在内存创建⼀个⼯作簿。
ExcelWriter:使⽤它向exel中写数据。
get_column_letter:给⼀个数字得到⼀个列名,如A,B,C模块安装:pip install openpyxl -i https:///simple 数据写⼊到EXCEL表格#!/usr/bin/env python# _*_ coding:utf-8 _*_from openpyxl.workbook import Workbookfrom openpyxl.writer.excel import ExcelWriterdata = [['序号', '组号', '申报单位', '姓名', '准考号', '考试分数(卷⾯分)'], ['1', '1', '新民采油⼚', '刘铁', '2012051224', '67.834'], ['2', '1', '吉林油⽥总医院', '吕册', '2012120214', '66.776'], ['3', '1', '吉林油⽥总医院', '王彦苏', '2012120718', '66.683'], ['4', '1', '农业开发公司', '刘化峰', '2012060120', '66.664'], ['5', '1', '油区教育处', '沙丽珊', '2012020817', '66.657'], ['6', '1', '油区教育处', '王志会', '2012020914', '66.545'], ['7', '1', '扶余采油⼚', '姜波', '2012041210', '66.355'], ['8', '2', '红岗采油⼚', '王昕', '2012021226', '66.3'], ['9', '2', '通信公司', '彭莉', '2012121014', '66.17'], ['10', '2', '前郭矿区', '⽶云龙', '2012070121', '65.313'], ['11', '2', '油区教育处', '秦勤', '2012022620', '65.061'], ['12', '2', '储运销售公司', '许华', '2012130406', '64.95'], ['13', '2', '江南物业', '兰庆伟', '2012030620', '64.869'], ['14', '2', '滨江物业', '佟冬蕾', '2012110417', '64.652'], ['15', '2', '农业开发公司', '曹宽', '2012061025', '64.564'], ['16', '2', '农业开发公司', '孙成伟', '2012060318', '64.462'], ['17', '3', '红岗采油⼚', '张⼤勇', '2012020112', '64.384'], ['18', '3', '储运销售公司', '刘贤宇', '2012130721', '64.378'], ['19', '3', '建设公司', '李⽉', '2012010316', '64.029'], ['20', '3', '客运公司', '姚佳媛', '2012130613', '63.914'], ['21', '3', '物资供应处', '张丽', '2012110925', '63.883'], ['22', '3', '江北物业', '益长虹', '2012100222', '63.723'], ['23', '3', '建设公司', '张雁冰', '2012013327', '63.630'], ['24', '3', '公⽤事业管理公司', '王涵', '2012022214', '63.522']]# 在内存创建⼀个⼯作簿objwb = Workbook()ws = wb.activews.title = u'招录⼈员名单'# 向第⼀个sheet页写数据吧i = 1r = 1for line in data:for col in range(1, len(line) + 1):ColNum = rws.cell(row=r, column=col).value = line[col - 1]i += 1r += 1# ⼯作簿保存到磁盘wb.save('test.xlsx') 效果图: 数据第⼆列是组号,数字相同的组号放在⼀个单元格中,怎么办呢?#!/usr/bin/env python# _*_ coding:utf-8 _*_from openpyxl.workbook import Workbookfrom openpyxl.writer.excel import ExcelWriterdata = [['序号', '组号', '申报单位', '姓名', '准考号', '考试分数(卷⾯分)'], ['1', '1', '新民采油⼚', '刘铁', '2012051224', '67.834'], ['2', '1', '吉林油⽥总医院', '吕册', '2012120214', '66.776'], ['3', '1', '吉林油⽥总医院', '王彦苏', '2012120718', '66.683'], ['4', '1', '农业开发公司', '刘化峰', '2012060120', '66.664'], ['5', '1', '油区教育处', '沙丽珊', '2012020817', '66.657'], ['6', '1', '油区教育处', '王志会', '2012020914', '66.545'], ['7', '1', '扶余采油⼚', '姜波', '2012041210', '66.355'], ['8', '2', '红岗采油⼚', '王昕', '2012021226', '66.3'], ['9', '2', '通信公司', '彭莉', '2012121014', '66.17'], ['10', '2', '前郭矿区', '⽶云龙', '2012070121', '65.313'], ['11', '2', '油区教育处', '秦勤', '2012022620', '65.061'], ['12', '2', '储运销售公司', '许华', '2012130406', '64.95'], ['13', '2', '江南物业', '兰庆伟', '2012030620', '64.869'], ['14', '2', '滨江物业', '佟冬蕾', '2012110417', '64.652'], ['15', '2', '农业开发公司', '曹宽', '2012061025', '64.564'], ['16', '2', '农业开发公司', '孙成伟', '2012060318', '64.462'], ['17', '3', '红岗采油⼚', '张⼤勇', '2012020112', '64.384'], ['18', '3', '储运销售公司', '刘贤宇', '2012130721', '64.378'], ['19', '3', '建设公司', '李⽉', '2012010316', '64.029'], ['20', '3', '客运公司', '姚佳媛', '2012130613', '63.914'], ['21', '3', '物资供应处', '张丽', '2012110925', '63.883'], ['22', '3', '江北物业', '益长虹', '2012100222', '63.723'], ['23', '3', '建设公司', '张雁冰', '2012013327', '63.630'], ['24', '3', '公⽤事业管理公司', '王涵', '2012022214', '63.522']]# 在内存创建⼀个⼯作簿objwb = Workbook()ws = wb.activews.title = u'招录⼈员名单'# 向第⼀个sheet页写数据吧i = 1r = 1for line in data:for col in range(1, len(line) + 1):ColNum = rws.cell(row=r, column=col).value = line[col - 1]i += 1r += 1# =========合并单元格区===========Li = []tmp1 = []tmp2 = []tmp3 = []for line in data: # 枚举法,总共三组数据,求出每组数据的数量v = line[1]if v == '1':tmp1.append(v)if v == '2':tmp2.append(v)if v == '3':tmp3.append(v)Li.append(tmp1)Li.append(tmp2)Li.append(tmp3)# 定义合并单元格的开始位置start_row = 2end_row = 2start_column = 2end_column = 2for each in Li:end_row = start_row + len(each) - 1ws.merge_cells(start_row=start_row, end_row=end_row, start_column=start_column, end_column=end_column) start_row = end_row + 1# =========合并单元格区===========# ⼯作簿保存到磁盘wb.save('test.xlsx') 效果图: 我想再创建⼀个sheet页# 再创建⼀个sheet页ws = wb.create_sheet(title=u'第⼆个Sheet页')。
python中openpyxl和xlsxwriter对Excel的操作方法

python中openpyxl和xlsxwriter对Excel的操作⽅法前⼏天,项⽬中有个⼩需求:提供Excel的上传下载功能,使⽤模块:openpyxl和xlsxwriter,这⾥简单记录⼀下。
1.简介Python中操作Excel的库⾮常多,为开发者提供了多种选择,如:xlrd、xlwt、xlutils、xlwings、pandas、win32com、openpyxl、xlsxwriter等等。
其中:前三个⼀般混合使⽤,对Excel读写操作,适合旧版Excel,仅⽀持 xls ⽂件;win32com库功能丰富,性能强⼤,适⽤于Windows;xlwings稍次于前者,但同样功能丰富;pandas适合处理⼤量数据;xlsxwriter适合⼤量数据的写操作,⽀持图⽚/表格/图表/筛选/格式/公式等;openpyxl读写均可,简单易⽤,功能⼴泛,可插⼊图表等,类似前者。
以下主要描述⼀下后两种(openpyxl、xlsxwriter)的简单使⽤2.Excel库的使⽤2.1.⽬标2.2.openpyxl的使⽤2.2.1.安装pip install openpyxl2.2.2.写⼊Excelimport osfrom openpyxl import Workbookfrom openpyxl.styles import Alignment, Font, colors, PatternFillfrom openpyxl.utils import get_column_letterFILE_PATH = os.path.join(os.path.dirname(__file__), 'files/')def write_test():wb = Workbook()filename = FILE_PATH + '/openpyxl_test.xlsx'# 活动sheetws1 = wb.activews1.title = "Test-1"# 列表追加for row in range(1, 10):ws1.append(range(9))# 创建sheetws2 = wb.create_sheet(title="Test-2")# 合并单元格ws2.merge_cells('F5:I5')# 拆分# ws2.unmerge_cells('F5:I5')# 单元赋值ws2['F5'] = 'hello world'# 居中ws2['F5'].alignment = Alignment(horizontal='center', vertical='center')# sheet标签颜⾊ws2.sheet_properties.tabColor = '1072BA'# 字体样式bold_itatic_12_font = Font(name='仿宋', size=12, italic=True, color=BLUE, bold=True)ws2['F5'].font = bold_itatic_12_font# 背景颜⾊bg_color = PatternFill('solid', fgColor='1874CD')ws2['F5'].fill = bg_color# ⾏⾼列宽ws2.row_dimensions[5].height = 40 # 第 5 ⾏ws2.column_dimensions['F'].width = 30 # F 列ws3 = wb.create_sheet(title="Test-3")for row in range(10, 20):for col in range(10, 20):ws3.cell(column=col, row=row, value="0}".format(get_column_letter(col)))print(ws3['S10'].value)# 保存wb.save(filename)2.2.3.读取Excelfrom openpyxl import load_workbookdef read_test(filename):wb = load_workbook(filename)print('取得所有⼯作表的表名 :')print(wb.sheetnames, '\n')print('取得某张⼯作表 :')# sheet = wb['Sheet1']# sheet = wb.worksheets[0]sheet = wb[wb.sheetnames[0]]print(type(sheet))print('表名: ' + sheet.title, '\n')print('取得活动⼯作表 :')active_sheet = wb.activeprint('表名: ' + active_sheet.title, '\n')print('获取⼯作表的⼤⼩:')print('总⾏数: ' + str(active_sheet.max_row))print('总列数: ' + str(active_sheet.max_column))print('\n获取单元格数据:')for row in range(sheet.max_row):for col in range(sheet.max_column):print(f"第 {row + 1} ⾏ {col + 1} 列:", sheet.cell(row=row + 1, column=col + 1).value) print('\n获取⾏数据:')for i, cell_object in enumerate(list(sheet.rows)):cell_lst = [cell.value for cell in cell_object]print(f'第 {i + 1} ⾏:', cell_lst)2.2.4.案例demo 数据源格式# contents数据contents=[{"uid": "1281948912","group_name": "测试群-5","domain": "","user_area": [{"num": 1024,"region": "中国","percent": 33.33},{"num": 1022,"region": "中国⾹港","percent": 33.33},{"num": 1021,"region": "新加坡","percent": 33.33}],"gf_area": [{"num": 5680,"region": "中国⾹港","percent": 97.8},{"num": 60,"region": "新加坡","percent": 0.8},{"num": 55,"region": "美西","percent": 0.8}],"sip_area": {"waf_ip":[""],"sip":["13.75.120.253","18.163.46.57"],"isp_region":[{"country": "中国⾹港","isp": ""},{"country": "中国⾹港","isp": ""}]}},]写⼊Excelimport osimport timefrom openpyxl import Workbook, load_workbookfrom openpyxl.styles import Alignment, Font, colors, PatternFillFILE_PATH = os.path.join(os.path.dirname(__file__), 'files/')# 颜⾊BLACK = colors.COLOR_INDEX[0]WHITE = colors.COLOR_INDEX[1]RED = colors.COLOR_INDEX[2]DARKRED = colors.COLOR_INDEX[8]BLUE = colors.COLOR_INDEX[4]DARKBLUE = colors.COLOR_INDEX[12]GREEN = colors.COLOR_INDEX[3]DARKGREEN = colors.COLOR_INDEX[9]YELLOW = colors.COLOR_INDEX[5]DARKYELLOW = colors.COLOR_INDEX[19]def export_gf_excel_test(filename=None, sheetName=None, contents=None): filename = filename if filename else 'openpyxl_Test.xlsx'sheetName = sheetName if sheetName else '测试'contents = contents if contents else []# 新建⼯作簿wb = Workbook()ws = wb.worksheets[0]# 设置sheet名称ws.title = sheetName# sheet标签颜⾊ws.sheet_properties.tabColor = '1072BA'# 居中pos_center = Alignment(horizontal='center', vertical='center')# 字体样式bold_12_font = Font(name='仿宋', size=12, italic=False,color=BLACK, bold=True)# 背景颜⾊bg_color = PatternFill('solid', fgColor='4DCFF6')# 设置标题# 合并merge_lst = ['A1:A3', 'B1:B3', 'C1:C3', 'D1:R1', 'S1:AA1', 'AB1:AE1','D2:F2', 'G2:I2', 'J2:L2', 'M2:O2', 'P2:R2', 'S2:U2', 'V2:X2','Y2:AA2', 'AB2:AB3', 'AC2:AC3', 'AD2:AD3', 'AE2:AE3'][ws.merge_cells(c) for c in merge_lst]# 填充字段title_dic = {'A1': 'UID', 'B1': '钉钉群', 'C1': '域名','D1': '⽤户区域', 'S1': '⾼防区域', 'AB1': '源站区域','D2': 'TOP1', 'G2': 'TOP2', 'J2': 'TOP3', 'M2': 'TOP4', 'P2': 'TOP5','S2': 'TOP1', 'V2': 'TOP2', 'Y2': 'TOP3','AB2': 'WAF IP', 'AC2': '源站IP', 'AD2': '源站IP区域', 'AE2': '运营商'}line3_v = ['物理区域', '请求量', '占⽐'] * 8line3_k = [chr(i) + '3' for i in range(68, 91)] + ['AA3']title_dic.update(dict(zip(line3_k, line3_v)))for k, v in title_dic.items():ws[k].value = vws[k].font = bold_12_fontws[k].alignment = pos_centerws[k].fill = bg_color# 列宽width_dic = {'A': 30, 'B': 30, 'C': 30,'AB': 16, 'AC': 16, 'AD': 16, 'AE': 16}for k, v in width_dic.items():ws.column_dimensions[k].width = v# 内容for i, dic in enumerate(contents):user_gf_mod = {'region': '', 'num': '', 'percent': ''}user_area = dic['user_area']gf_area = dic['gf_area']sip_area = dic['sip_area']# UID+域名data = [dic['uid'], dic['group_name'], dic['domain']]# ⽤户区域if not user_area:user_area = [user_gf_mod] * 5else:user_area = list(map(lambda item: {'region': item['region'], 'num': item['num'], 'percent': item['percent']}, user_area))[user_area.append(user_gf_mod) for _ in range(5 - len(user_area))][data.extend(user_area[u].values()) for u in range(len(user_area))]# ⾼防区域if not gf_area:gf_area = [user_gf_mod] * 3else:gf_area = list(map(lambda item: {'region': item['region'], 'num': item['num'], 'percent': item['percent']}, gf_area))[gf_area.append(user_gf_mod) for _ in range(3 - len(gf_area))][data.extend(gf_area[g].values()) for g in range(len(gf_area))]# 源站区域waf_ip = sip_area['waf_ip']sip = sip_area['sip']isp_region = sip_area['isp_region']data.append(','.join(waf_ip)) if waf_ip else data.append('')data.append(','.join(sip)) if sip else data.append('')if not isp_region:data.extend([''] * 2)else:try:country = ','.join(map(lambda item: item['country'], isp_region))isp = ','.join(map(lambda item: item['isp'] if item['isp'] else '暂未查到', isp_region))data.append(country)data.append(isp)except Exception as e:print(e)print(isp_region)# 写⼊Excelws.append(data)# 保存⽂件wb.save(filename=filename)if __name__ == "__main__":curTime = ''.join(map(lambda i: str(i) if len(str(i)) >= 2 else '%02d' % i, [i for i in time.localtime()[:-4]])) filename = os.path.join(FILE_PATH, 'openpyxl_Test_{}.xlsx'.format(curTime))export_gf_excel_test(filename, contents=contents)2.3.xlsxwriter的使⽤2.3.1.安装pip install XlsxWriter2.3.2.写⼊Excelimport osimport timeimport jsonimport xlsxwriterFILE_PATH = os.path.join(os.path.dirname(__file__), 'files/')def export_gf_excel_test(filename=None, sheetName=None, contents=None):filename = filename if filename else 'xlsxwriter_Test.xlsx'sheetName = sheetName if sheetName else '测试'contents = contents if contents else []# 新建wb = xlsxwriter.Workbook(filename)ws = wb.add_worksheet(name=sheetName)# 设置风格style1 = wb.add_format({"bold": True,'font_name': '仿宋','font_size': 12,# 'font_color': '#217346','bg_color': '#4DCFF6',"valign": 'vcenter','text_wrap': 1})style2 = wb.add_format({# "bold": True,# 'font_name': '仿宋','font_size': 11,'font_color': '#217346','bg_color': '#E6EDEC',"align": 'center',"valign": 'vcenter',# 'text_wrap': 1})# 标题ws.set_column('A1:AE1', None, style1)# 合并单元格: first_row, first_col, last_row, last_col# 第 1 ⾏ws.merge_range(0, 0, 2, 0, 'UID')ws.merge_range(0, 1, 2, 1, '钉钉群')ws.merge_range(0, 2, 2, 2, '域名')ws.merge_range(0, 3, 0, 17, '⽤户区域')ws.merge_range(0, 18, 0, 26, '⾼防区域')ws.merge_range(0, 27, 0, 30, '源站区域')# 第 2 ⾏user_tl2 = ['TOP' + str(i) for i in range(1, 6)]gf_tl2 = user_tl2[:3][ws.merge_range(1, 3 * (i + 1), 1, 3 * (i + 2) - 1, name) for i, name in enumerate(user_tl2 + gf_tl2)] # 第 3 ⾏user_gf_tl3 = ['物理区域', '请求量', '占⽐'] * 8sip_tl3 = ['WAF IP', '源站IP', '源站IP区域', '运营商'][ws.write(2, 3 + i, name) for i, name in enumerate(user_gf_tl3)][ws.merge_range(1, 27 + i, 2, 27 + i, name) for i, name in enumerate(sip_tl3)]# ws.write(11, 2, '=SUM(1:10)') # 增加公式# ws.set_default_row(35) # 设置默认⾏⾼# 设置列宽ws.set_column(0, 2, 30)ws.set_column(3, 26, 10)ws.set_column(27, 30, 16)# 内容for i, dic in enumerate(contents):user_gf_mod = {'region': '', 'num': '', 'percent': ''}user_area = dic['user_area']gf_area = dic['gf_area']sip_area = dic['sip_area']# UID+域名data = [dic['uid'], dic['group_name'], dic['domain']]# ⽤户区域if not user_area:user_area = [user_gf_mod] * 5else:user_area = list(map(lambda item: {'region': item['region'], 'num': item['num'], 'percent': item['percent']}, user_area))[user_area.append(user_gf_mod) for _ in range(5 - len(user_area))][data.extend(user_area[u].values()) for u in range(len(user_area))]# ⾼防区域if not gf_area:gf_area = [user_gf_mod] * 3else:gf_area = list(map(lambda item: {'region': item['region'], 'num': item['num'], 'percent': item['percent']}, gf_area))[gf_area.append(user_gf_mod) for _ in range(3 - len(gf_area))][data.extend(gf_area[g].values()) for g in range(len(gf_area))]# 源站区域waf_ip = sip_area['waf_ip']sip = sip_area['sip']isp_region = sip_area['isp_region']data.append(','.join(waf_ip)) if waf_ip else data.append('')data.append(','.join(sip)) if sip else data.append('')if not isp_region:data.extend([''] * 2)else:try:country = ','.join(map(lambda item: item['country'], isp_region))isp = ','.join(map(lambda item: item['isp'] if item['isp'] else '暂未查到', isp_region))data.append(country)data.append(isp)except Exception as e:print(e)# 写⼊Excelws.write_row('A' + str(i + 4), data, style2)# 保存关闭⽂件wb.close()if __name__ == '__main__':curTime = ''.join(map(lambda i: str(i) if len(str(i)) >= 2 else '%02d' % i, [i for i in time.localtime()[:-4]]))filename = os.path.join(FILE_PATH, 'xlsxwriter_Test_{}.xlsx'.format(curTime))export_gf_excel_test(filename, contents=contents)以上是两个库操作Excel的简单实现。
python处理excel文件(xls和xlsx)

python处理excel⽂件(xls和xlsx)转载 https:///Forever77/p/11135124.html⼀、xlrd和xlwt使⽤之前需要先安装,windows上如果直接在cmd中运⾏python则需要先执⾏pip3 install xlrd和pip3 install xlwt,如果使⽤pycharm则需要在项⽬的解释器中安装这两个模块,File-Settings-Project:layout-Project Interpreter,点击右侧界⾯的+号,然后搜索xlrd和xlwt,然后点击Install Package进⾏安装。
对于excel来说,整个excel⽂件称为⼯作簿,⼯作簿中的每个页称为⼯作表,⼯作表⼜由单元格组成。
对于xlrd和xlwt,⾏数和列数从0开始,单元格的⾏和列也从0开始,例如sheet.row_values(2)表⽰第三⾏的内容,sheet.cell(1,2).value表⽰第⼆⾏第三列单元格的内容。
1.xlrd模块读取excel⽂件使⽤xlrd模块之前需要先导⼊import xlrd,xlrd模块既可读取xls⽂件也可读取xlsx⽂件。
获取⼯作簿对象:book = xlrd.open_workbook('excel⽂件名称')获取所有⼯作表名称:names = book.sheet_names(),结果为列表根据索引获取⼯作表对象:sheet = book.sheet_by_index(i)根据名称获取⼯作表对象:sheet = book.sheet_by_name('⼯作表名称')获取⼯作表⾏数:rows = sheet.nrows获取⼯作表列数:cols = sheet.ncols获取⼯作表某⼀⾏的内容:row = sheet.row_values(i) ,结果为列表【sheet.row(i),列表】获取⼯作表某⼀列的内容:col = sheet.col_values(i) 结果为列表【sheet.col(i),列表】获取⼯作表某⼀单元格的内容:cell = sheet.cell_value(m,n)、 sheet.cell(m,n).value、sheet.row(m)[n].value,sheet.col(n)[m].value,结果为字符串或数值【sheet.cell(0,0),xlrd.sheet.Cell对象】⽰例:假设在py执⾏⽂件同层⽬录下有⼀fruit.xls⽂件,有三个sheet页Sheet1、Sheet2、Sheet3,其中Sheet1内容如下:xlrd读取excel⽰例可以看出通过sheet.row(i)、sheet.col(i)也可获取⾏或列的内容,并且结果也是⼀个列表,但是列表中的每⼀项类似字典的键值对,形式为数据类型:值。
python2.7的openpyxl用法

python2.7的openpyxl用法openpyxl是一个用于读写Excel文件的Python库,支持Excel 2010及以上版本的xlsx文件格式。
下面我将详细介绍openpyxl的用法,包括如何创建、读取和写入Excel文件,以及其他一些常用的操作。
1. 安装openpyxl:要使用openpyxl,首先需要安装它。
可以使用pip命令来安装openpyxl,命令如下:pip install openpyxl2. 导入openpyxl:安装完成后,在Python脚本中导入openpyxl库,如下所示:pythonfrom openpyxl import Workbookfrom openpyxl import load_workbook3. 创建和保存Excel文件:使用openpyxl可以创建一个Excel文件,并将数据保存到文件中。
下面是一个简单的示例:python# 创建一个工作簿对象wb = Workbook()# 获取默认的工作表ws = wb.active# 在A1单元格中写入数据ws['A1'] = 'Hello, World!'# 保存工作簿到文件wb.save('example.xlsx')这个示例创建了一个Workbook对象,然后获取默认的工作表(索引为0),在A1单元格中写入了数据,并将工作簿保存到名为example.xlsx的文件中。
4. 加载和读取Excel文件:openpyxl可以加载已存在的Excel文件,并读取其中的数据。
下面是一个示例:python# 加载Excel文件wb = load_workbook('example.xlsx')# 获取默认的工作表ws = wb.active# 读取A1单元格的值value = ws['A1'].valueprint(value)这个示例加载了之前创建的example.xlsx文件,获取了默认的工作表,并读取了A1单元格中的值。
python利用openpyxl库操作Excel来读取、修改、写入测试数据

python利⽤openpyxl库操作Excel来读取、修改、写⼊测试数据⼀、openpyxl模块介绍1、openpyxl是读写Excel的python库,是⼀个⽐较综合的⼯具,能够同时读取和修改Excel⽂档2、openpyxl中有三个不同层次的类,每⼀个类都有各⾃的属性和⽅法:Workbook是⼀个excel⼯作表Worksheet是⼯作表中的表单,如图Cell就是表单中的⼀个格3、操作Excel的⼀般场景:打开或者创建⼀个Excel需要创建⼀个Workbook对象获取⼀个表则需要先创建⼀个Workbook对象,然后使⽤该对象的⽅法来得到⼀个Worksheet对象4、Workbook对象⼀个Workbook对象代表⼀个Excel⽂档,因此在操作Excel之前,都应该先创建⼀个Workbook对象。
对于⼀个已经存在的Excel⽂档,可以使⽤openpyxl模块的load_workbook函数进⾏读取,该函数包涵多个参数,但只有filename参数为必传参数。
filename 是⼀个⽂件名,也可以是⼀个打开的⽂件对象。
⼆、安装openpyxl模块在cmd命令⾏下输⼊命令:pip install openpyxl三、代码实现(在Pycharm中编写代码)1、本地新建⼀个Excel表test_case.xlsx2、复制test_case.xlsx到Pycharm:3、⽤python操作excel导⼊load_workbook库from openpyxl import load_workbook第⼀步:打开excelworkbook1=load_workbook('test_case.xlsx')第⼆步:定位表单(test_data)sheet=workbook1['test_data']第三步:操作excel的test_data表单1、定位单元格(cell),根据⾏列读取测试数据data=sheet.cell(3,2).valueprint(data)特殊说明:定位C2单元格数据{'mobilephone':'135********','pwd':'123456'}data=sheet.cell(2,3).value查看C2单元格数据类型为,但实际为dict类型print(type(data)) 输出str将str类型转化为他原来的类型dict:eval(data)print(type(eval(data))) 输出dict综上可得:excel 存储的数据,数字还是数字:int—>int、 float—>float 、其他类型—>str使⽤eval(数据) 将str类型转换为他原来的类型2、定位单元格(cell),根据⾏列值,更改原有的数据、写⼊新的测试数据,sheet.cell(3,2).value='妮妮' #更改已经存在的测试数据sheet.cell(6,3).value='⼩⼩' #在空的单元格写⼊新的测试值workbook1.save('test_case.xlsx') #保存修改3、统计⾏和列(参考上图)max_row=sheet.max_rowmax_cow = sheet.max_columnprint('最⼤的⾏值:',max_row) #输出6print('最⼤的列值:',max_cow) #输出7从excel中读取测试⽤例:1#读取每⼀条测试⽤⽤例分别保存到字典中,然后再将所有⽤例保存到列表中,如[{⽤例1},{⽤例2},{⽤例3}] 2def read_case():3 workbook1=load_workbook('test_case.xlsx')4 sheet=workbook1['test_data']5 max_row=sheet.max_row6 test_case=[]7for row in range(2,max_row+1):8 sub_data={}9 sub_data['case_id']=sheet.cell(row,1).value10 sub_data['title']=sheet.cell(row,2).value11 sub_data['data']=sheet.cell(row,3).value12 sub_data['method']=sheet.cell(row,4).value13 sub_data['expected']=sheet.cell(row,5).value14 test_case.append(sub_data)15print("读取到的所有测试⽤例:",test_case)1617 read_case()read_case。
python使用openpyxl操作Excel表格-工作簿与工作表的创建

python使⽤openpyxl操作Excel表格-⼯作簿与⼯作表的创建python使⽤openpyxl操作Excel表格概念相关的库:xlrd库:从excel中读取数据,⽀持xls、xlsxxlwt库:对excel进⾏修改操作,不⽀持对xlsx格式的修改xlutils库:在xlw和xlrd中,对⼀个已存在的⽂件进⾏修改。
openpyxl:主要针对xlsx格式的excel进⾏读取和编辑。
Excel中的对象:WorkBook:⼯作簿对象Sheet:表单对象Cell:表格对象安装openpyxl库:pip install openpyxl⼯作簿的创建以及⼯作表的修改# 创建⼯作簿,使⽤openpyxl的Workbook类创建实例# 从openpyxl包中导⼊Workbook⽤于创建⼯作簿from openpyxl import Workbook# 从openpyxl包中导⼊load_workbook⽤于读取已有的⼯作簿from openpyxl import load_workbook# 使⽤Workbook()实例化⼀个对象wb,默认⽣成⼀个sheet名词的⼯作表wb = Workbook()# 修改默认sheet表的名称,使⽤wb.active获取活动表,默认只有⼀个ws = wb.activeprint('默认表名称',ws)ws.title = '修改默认sheet表名称'print('修改后表名称',ws)# 在⼯作簿中新建⼀个⼯作表,使⽤create_sheet()⽅法,第⼀个参数是⼯作表的名称,第⼆个是索引位置,0表⽰第⼀个ws_1 = wb.create_sheet('第⼆个表',1)# 保存我们创建的⼯作表和⼯作簿到当前⽬录下,使⽤save()⽅法,参数为保存的⼯作簿名称wb.save('Mytest.xlsx')# 最后关闭⼯作簿,使⽤close()⽅法wb.close()。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
pip install openpyxl(写,支持xlsx格式)
新建文件
#1.新建一个Excel
wb=workbook.Workbook()
#2.创建表单的方法 创建一个自定义的表单
wb.create_sheet('info',index=0)
#3.另存为 保存工作簿
wb.save('D:\excel\pythonexcel.xlsx')
打开文件写入
#1.打开的工作簿
wb=load_workbook(filename)
#2.定位到表单
sheet=wb['info']
#3.cell(I行,J列),必须从1开始
sheet.cell(1,1).value='姓名'
#4.保存工作簿
wb.save('D:\excel\pythonexcel.xlsx')
源码
#!/usr/bin/python3
# encoding:utf‐8
import os
from openpyxl import workbook
from openpyxl import load_workbook
'''
支持xlsx格式写
'''
class excel():
def wirteExcle(self,filename,data):
#新建一个Excel
wb=workbook.Workbook()
#创建表单的方法 创建一个自定义的表单
wb.create_sheet('info',index=0)
#另存为 保存工作簿
wb.save(filename)
#打开的工作簿
wb=load_workbook(filename)
#定位到表单
sheet=wb['info']
c=1
for students in data:
#3.标题cell(i行,j列),必须1开始
sheet.cell(1,1).value='姓名'
sheet.cell(1,2).value='年龄'
#内容(行,列,值)第一行=0,第一列=0
sheet.cell(c,1).value=students['name'] sheet.cell(c,2).value=students['age'] c+=1
#将工作簿以filename命名并保存
wb.save(filename)
#5.关闭文件
wb.close()
if __name__=='__main__':
str= [{'name':'zhangshan','age':19},
{'name':'lisi','age':28},
{'name':'wangwu','age':59}]
exl = excel()
exl.wirteExcle('D:\excel\pythonexcel.xlsx',str) 打印execel内容。