python修改已存在的xlsx件 |
您所在的位置:网站首页 › openpyxl模板 › python修改已存在的xlsx件 |
python提供了很多修改excel的模块,包括xlsxWriter、xlrd&xlwt、openPyXL、Microsoft Excel API、Pandas等,其中 xlsxWriter:只支持新建excel和向excel中写入数据,并不支持对已有excel的读取和修改,只能从零开始,功能很强大,支持大文件的写入,速度还比较多;适合的场景:需要创建xlsx文件,不需要读,且数据量大; xlrd&xlwt&xlutils:对xls文件的读写和其他很多全面的功能,但是对xlsx的excel支持很差,经过这三个模块修改过的xlsx文件无法打开,显示已损坏(不知道有没有解决方法);适用的场景:要读取xls和xlsx文件中的值,最后生成xls文件,需要的功能不是很复杂可以考虑使用该种方法; 参考文档:https://blog.csdn.net/u013045749/article/details/49910695OpenPyXL:较好的支持对xlsx文件的修改,功能比较强大,适用于需要处理XLSX文件,需要修改XLSX文件中的值,最后生成xlsx。openpyxl(可读写excel表)专门处理Excel2007及以上版本产生的xlsx文件,xls和xlsx之间转换容易 注意:如果文字编码是“gb2312” 读取后就会显示乱码,请先转成Unicode。 官网上最推荐的是openpyxl:综上,所以选择使用OpenPyX来做一个修改excel的小程序。 OpenPyXL的官网参考:https://openpyxl.readthedocs.io/en/latest/usage.htmlhttps://openpyxl.readthedocs.io/en/stable/ 1、OpenPyXL模块的安装 pip install openpyxl2、快速实现xlsx文件的单元格修改 # -*- coding: utf-8 -*- from openpyxl import load_workbook file_home = 'C:\\files\\openpyxs.xlsx' wb = load_workbook(filename= file_home) sheet_ranges = wb['Sheet1'] print(sheet_ranges['A1'].value) ws = wb['Sheet1'] //根据Sheet1这个sheet名字来获取该sheet ws["A1"] = 'LJK5679842' //修改A1的值为LJK5679842 ws['D6'] = 'LKJI66666666666666' //修改D6的值为,其中D6-F6是合并后的单元格,修改数据需修改最左上角单元格数据,来替代整个merge单元格 wb.save(file_depart) //保存修改后的excel3、OpenPyXL的学习 迭代所有的行: #获取表格所有行和列,两者都是可迭代的 rows = ws.rows columns = ws.columns #迭代所有的行 for row in rows: line = [col.value for col in row] print line #通过坐标读取值 print ws.cell('A1').value # A表示列,1表示行 print ws.cell(row=1, column=1).value新建excel处理: wb = Workbook()#创建工作簿 ws = wb.active#激活工作表 ws1 = wb.create_sheet("Mysheet")#创建mysheet表 ws.title = "New Title"#表明改为New Title ws.sheet_properties.tabColor = "1072BA"#颜色 ws['A4'] = 4#赋值 d = ws.cell(row=4, column=2, value=10)#给第4行第2列赋值为10 cell_range = ws['A1':'C2']#选择单元格区域 wb.save('test.xlsx')#保存append函数在文末添加多行数据: # 添加一行,在文末 row = [1 ,2, 3, 4, 5] ws.append(row) # 附加多行,从第一列开始附加 rows = [ ['Number', 'data1', 'data2'], [2, 40, 30], [3, 40, 25], [4, 50, 30], [5, 30, 10], [6, 25, 5], [7, 50, 10], ]合并和拆分单元格 # 合并单元格, 往左上角写入数据即可 sheerge_cells('B1:G1') # 合并一行中的几个单元格 sheerge_cells('A1:C3') # 合并一个矩形区域中的单元格合并后只可以往左上角写入数据,也就是区间中:左边的坐标。 如果这些要合并的单元格都有数据,只会保留左上角的数据,其他则丢弃。换句话说若合并前不是在左上角写入数据,合并后单元格中不会有数据。 以下是拆分单元格的代码。拆分后,值回到A1位置。插入时间格式数据: import datetime #python 类型数据会被自动转换 ws['A2'] = datetime.datetime.now() #保存修改 wb.save("sample.xlsx")获取一个单元格的数据: c = ws['A4'] c = ws.cell('A4') d = ws.cell(row = 4, column = 2) cell_range = ws['A1':'C2'] //一次获取多个单元格的数据 ws['A1'] = 100 //写入值中文编码的问题: def gbk2utf(in_data , tag): if 1 == tag: return in_data.encode('gbk').decode('gbk') elif 0 == tag: return in_data.encode('gbk').decode('gbk').encode('utf8') openpyxl会自动转换为不同的类型,有些表格中会有中文出现,就需要进行相应的转码。可以写一个函数专门处理转码,需要时调用。当原始的excel文件是gbk编码时,就需要tag=0的方式去处理,因为读入后是gbk的编码,需要先encode为gbk再decode为unicode,再encode为utf8,就可以显示了。 4、openpyxl的使用 excel文件的三个对象:workbook: 工作簿,一个excel文件包含多个sheet。sheet:工作表,一个workbook有多个,表名识别,如“sheet1”,“sheet2”等。 cell: 单元格,存储数据对象 操作Excel的一般场景: 打开或者创建一个Excel需要创建一个Workbook对象 获取一个表则需要先创建一个Workbook对象,然后使用该对象的方法来得到一个Worksheet对象 如果要获取表中的数据,那么得到Worksheet对象以后再从中获取代表单元格的Cell对象 open sheet: 通过名字: ws = wb["sheet_name"] 等同于 ws2 = wb.get_sheet_by_name('sheet_name') 验证命令ws is ws2 is ws3 输出True 不知道名字用index sheet_names = wb.get_sheet_names() ws = wb.get_sheet_by_name(sheet_names[index])# index为0为第一张表 或者 ws =wb.active 等同于 ws = wb.get_active_sheet() #通过_active_sheet_index设定读取的表,默认0读第一个表活动表表名wb.get_active_sheet().title 单元格操作: c = ws['A4'] #read 等同于 c = ws.cell('A4') ws['A4'] = 4 #write #ws.cell有两种方式,行号列号从1开始 d = ws.cell(row = 4, column = 2) #行列读写 d = ws.cell('A4') 写入cell值 ws.cell(row = 4, column = 2).value = 'test' ws.cell(row = 4, column = 2, value = 'test')特别注意: get_sheet_names:获取所有表格的名称(新版已经不建议使用,通过Workbook的sheetnames属性即可获取)例: sheetnm = wb.worksheets sheet = workbook.worksheets[0] get_sheet_by_name:通过表格名称获取Worksheet对象(新版也不建议使用,通过workbook[‘sheet名‘]获取); 例:ws = wb['Sheet1']读取的文件路径为中文时的处理方法: a = "C:\\test\\test\\同址变更.xlsx" file_name = unicode(a, "utf8") 或者是:file_name = a.decode("utf-8").encode("gbk") #进行转码另外,如果被读取的excel中有图片的话,就会报如下错误:解决方法: 去掉excel中的图片,或者是将openpyxl的版本回到5.0以下。。。。暂时没找着好办法 refer to:https://stackoverflow.com/questions/48905957/cant-load-workbook-with-openpyxl-during-handling-of-the-above-exception-anoth 一些好的文档:https://blog.csdn.net/cyjs1988/article/details/75041915?locationNum=8&fps=1python 学习小组http://www.thinksaas.cn/group/show/368/page/4官网: https://pypi.python.org/pypi/openpyxl http://openpyxl.readthedocs.io/en/default/good: http://blog.csdn.net/suofiya2008/article/details/6284208 http://blog.csdn.net/zzukun/article/details/49946147 http://www.thinksaas.cn/topics/0/501/501962.html |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |