最新消息: USBMI致力于为网友们分享Windows、安卓、IOS等主流手机系统相关的资讯以及评测、同时提供相关教程、应用、软件下载等服务。

Python,批量修改Excel的数据

IT圈 admin 46浏览 0评论

Python,批量修改Excel的数据

一、引言

        本文解决的问题:批量修改Excel中的数据。  学会使用xlrd和openpyxl。最后用一个批量修改Excel的数值作为案例实现。

二、需要用到的库和函数使用方法。

(1)openpyxl;

①读取Excel文件

xlsx_path = u'Excel文件路径'
wb = openpyxl.load_workbook(xlsx_path)

②获取Excel文件中某个sheet页

ws = wb.worksheets[0] #获取第一页sheet

③获取当前sheet页中有效的行和列

cols = ws.max_column #获取有效的数据的最大列数
rows = ws.max_row  #最大行数

④获取单元格的内容,并进行修改

#ws就是之前获取的sheet;
ws.cell(row=row,column=col).value    #获取(row,col)单元格的值
ws.cell(row=row,column=col).value = random.randint(1,5) #将(row,col)单元格的值 变成一个[1,5]的随机整数#此处有一个注意事项
#cell(r,c)中的行r和列c 是从1开始。而不是0。  例如A11则是ws.cell(1,1),不是ws.cell(0,0)

⑤保存Excel文件

#wb = openpyxl.load_workbook(xlsx_path)
wb.save("./2.xlsx") #设置保存的路径 和保存的文件名:2.xlsx

(2)xlrd,与上一个介绍的差不多。只是库函数用法有点区别。

就不单独介绍,会用同一个案例,不同的库去实现。详情直接看代码即可。

三、案例实现:

将一张表中的所有的数值 进行 随机上下波动。

在Python3的环境下,并且用pip install openpyxl/xlrd安装好库

 一,使用openpyxl。

# -*- coding: GBK -*-
#  -*- coding:gbk -*-
import openpyxl
import re
import traceback
import os
import randomxlsx_path = u'./1.xlsx'
wb = openpyxl.load_workbook(xlsx_path) #打开Excel
num = 0 #初始化num#获取所有sheet页
#sheet_list = wb.sheetnames  #可以自己加个遍历,一次性处理多个sheet页。
#此处只做一个sheet页的数字随机更改ws = wb.worksheets[0] #直接获取sheet的第一页;cols = ws.max_column #获取有效数据的最大列
rows = ws.max_row #获取有效数据的最大行print('cols:'+str(cols)+'____rows:'+str(rows)) #查看有效行数和列数
#开始遍历最大有效行数和列数 内的每一个 单元格;
for row in range(1,rows+1):for col in range(1,cols+1):content = ws.cell(row=row,column=col).value   #获取该行该列单元格的内容contentif(content !=None):  # 如果该单元格内容不为空if(isinstance(content, int)): #如果该内容  为  整数#if type(content).__name__ == 'int': #用这个判断也可以。效果相同if content>0 and content<=5:ws.cell(row=row,column=col).value = random.randint(1,5) #进行数值更改if content>5 and content<=10:ws.cell(row=row,column=col).value = random.randint(5,10)if content>10 and content<=20:ws.cell(row=row,column=col).value = random.randint(10,20)if content>20 and content<=50:ZF = random.choice((-1, 1)) #随机选择 +1或者-1ran_num = random.randint(1,7) #随机出现 [1,7]的正整数num = content + (ZF*ran_num) #num是[-7,7]之间的数print(str(content)+'....'+str(num))ws.cell(row=row,column=col).value = num #原数字上下波动范围是7if content>50 and content<=200:ZF = random.choice((-1, 1))ran_num = random.randint(1,15)num = content + (ZF*ran_num)print(str(content)+'....'+str(num))ws.cell(row=row,column=col).value = numif content>200 and content<=500:ZF = random.choice((-1, 1))ran_num = random.randint(1,35)num = content + (ZF*ran_num)print(str(content)+'....'+str(num))ws.cell(row=row,column=col).value = numif content>500 and content<=1000:ZF = random.choice((-1, 1))ran_num = random.randint(1,55)num = content + (ZF*ran_num)print(str(content)+'....'+str(num))ws.cell(row=row,column=col).value = numif content>1000 and content<=10000:ZF = random.choice((-1, 1))ran_num = random.randint(1,115)num = content + (ZF*ran_num)print(str(content)+'....'+str(num))ws.cell(row=row,column=col).value = numif content>10000 and content<=50000:ZF = random.choice((-1, 1))ran_num = random.randint(1,515)num = content + (ZF*ran_num)print(str(content)+'....'+str(num))ws.cell(row=row,column=col).value = numif content>50000 :ZF = random.choice((-1, 1))ran_num = random.randint(1,2000)num = content + (ZF*ran_num)print(str(content)+'....'+str(num))ws.cell(row=row,column=col).value = num	
wb.save("./2.xlsx")  #保存文件

代码实现效果图:

原本的1.xlsx

 运行结果的2.xlsx

二.xlrd

代码:

 

# -*- coding: GBK -*-from xlutils.copy import copy
import xlrd
import random# 缓存原excel内容
data = xlrd.open_workbook(filename=r'./1.xlsx')
# 索引下标为1的sheet页new_excel = copy(data)sheet11 = data.sheet_by_index(0) #用于获取sheet1的最大行数和列数以及单元格数据
sheet1 = new_excel.get_sheet(0) #通过copy,sheet1;方便修改和保存cols = sheet11.ncols #有效的最大列数
rows = sheet11.nrows #有效的最大行数
#print(cols)
#print(rows)
#print(type(sheet11.cell_value(0,0))) #查看复制过来的A11的数据类型
#发现数据类型,纯数字为float ; 文字、空格、字母都是 str型;
for r in range(0,rows): #此处的单元格从(0,0)开始;区别于openpyxlfor c in range(0,cols):content = sheet11.cell_value(r,c)  #获取该行该列单元格的内容if(isinstance(content, float)): #判断是否为float#其实直接写isinstance(content, float)就行;#但是我写的时候,就想多此一举而已;T = Trueelse:T = Falseif(content !=None ):  # 如果该单元格内容不为空if(T):#if(isinstance(content, float))content = int(float(content)) #将float转化成intif content>0 and content<=5:sheet1.write(r,c,random.randint(1,5)) #采用copy的sheet1;通过wirte直接修改if content>5 and content<=10:sheet1.write(r,c,random.randint(5,10))if content>10 and content<=20:sheet1.write(r,c,random.randint(10,20))if content>20 and content<=50:ZF = random.choice((-1, 1)) #随机选择 +1或者-1ran_num = random.randint(1,7) #随机出现 [1,7]的正整数num = content + (ZF*ran_num)print(str(content)+'....'+str(num))sheet1.write(r,c,num)if content>50 and content<=200:ZF = random.choice((-1, 1))ran_num = random.randint(1,15)num = content + (ZF*ran_num)print(str(content)+'....'+str(num))sheet1.write(r,c,num)if content>200 and content<=500:ZF = random.choice((-1, 1))ran_num = random.randint(1,35)num = content + (ZF*ran_num)print(str(content)+'....'+str(num))sheet1.write(r,c,num)if content>500 and content<=1000:ZF = random.choice((-1, 1))ran_num = random.randint(1,55)num = content + (ZF*ran_num)print(str(content)+'....'+str(num))sheet1.write(r,c,num)if content>1000 and content<=10000:ZF = random.choice((-1, 1))ran_num = random.randint(1,115)num = content + (ZF*ran_num)print(str(content)+'....'+str(num))sheet1.write(r,c,num)if content>10000 and content<=50000:ZF = random.choice((-1, 1))ran_num = random.randint(1,515)num = content + (ZF*ran_num)print(str(content)+'....'+str(num))sheet1.write(r,c,num)if content>50000 :ZF = random.choice((-1, 1))ran_num = random.randint(1,2000)num = content + (ZF*ran_num)print(str(content)+'....'+str(num))sheet1.write(r,c,num)new_excel.save(r'./2.xlsx') #通过copy的excel直接保存;

代码运行效果图:2.xlsx

 四、结语

        希望对您有帮助,祝您天天开心,享受每一天!~

       

 

Python,批量修改Excel的数据

一、引言

        本文解决的问题:批量修改Excel中的数据。  学会使用xlrd和openpyxl。最后用一个批量修改Excel的数值作为案例实现。

二、需要用到的库和函数使用方法。

(1)openpyxl;

①读取Excel文件

xlsx_path = u'Excel文件路径'
wb = openpyxl.load_workbook(xlsx_path)

②获取Excel文件中某个sheet页

ws = wb.worksheets[0] #获取第一页sheet

③获取当前sheet页中有效的行和列

cols = ws.max_column #获取有效的数据的最大列数
rows = ws.max_row  #最大行数

④获取单元格的内容,并进行修改

#ws就是之前获取的sheet;
ws.cell(row=row,column=col).value    #获取(row,col)单元格的值
ws.cell(row=row,column=col).value = random.randint(1,5) #将(row,col)单元格的值 变成一个[1,5]的随机整数#此处有一个注意事项
#cell(r,c)中的行r和列c 是从1开始。而不是0。  例如A11则是ws.cell(1,1),不是ws.cell(0,0)

⑤保存Excel文件

#wb = openpyxl.load_workbook(xlsx_path)
wb.save("./2.xlsx") #设置保存的路径 和保存的文件名:2.xlsx

(2)xlrd,与上一个介绍的差不多。只是库函数用法有点区别。

就不单独介绍,会用同一个案例,不同的库去实现。详情直接看代码即可。

三、案例实现:

将一张表中的所有的数值 进行 随机上下波动。

在Python3的环境下,并且用pip install openpyxl/xlrd安装好库

 一,使用openpyxl。

# -*- coding: GBK -*-
#  -*- coding:gbk -*-
import openpyxl
import re
import traceback
import os
import randomxlsx_path = u'./1.xlsx'
wb = openpyxl.load_workbook(xlsx_path) #打开Excel
num = 0 #初始化num#获取所有sheet页
#sheet_list = wb.sheetnames  #可以自己加个遍历,一次性处理多个sheet页。
#此处只做一个sheet页的数字随机更改ws = wb.worksheets[0] #直接获取sheet的第一页;cols = ws.max_column #获取有效数据的最大列
rows = ws.max_row #获取有效数据的最大行print('cols:'+str(cols)+'____rows:'+str(rows)) #查看有效行数和列数
#开始遍历最大有效行数和列数 内的每一个 单元格;
for row in range(1,rows+1):for col in range(1,cols+1):content = ws.cell(row=row,column=col).value   #获取该行该列单元格的内容contentif(content !=None):  # 如果该单元格内容不为空if(isinstance(content, int)): #如果该内容  为  整数#if type(content).__name__ == 'int': #用这个判断也可以。效果相同if content>0 and content<=5:ws.cell(row=row,column=col).value = random.randint(1,5) #进行数值更改if content>5 and content<=10:ws.cell(row=row,column=col).value = random.randint(5,10)if content>10 and content<=20:ws.cell(row=row,column=col).value = random.randint(10,20)if content>20 and content<=50:ZF = random.choice((-1, 1)) #随机选择 +1或者-1ran_num = random.randint(1,7) #随机出现 [1,7]的正整数num = content + (ZF*ran_num) #num是[-7,7]之间的数print(str(content)+'....'+str(num))ws.cell(row=row,column=col).value = num #原数字上下波动范围是7if content>50 and content<=200:ZF = random.choice((-1, 1))ran_num = random.randint(1,15)num = content + (ZF*ran_num)print(str(content)+'....'+str(num))ws.cell(row=row,column=col).value = numif content>200 and content<=500:ZF = random.choice((-1, 1))ran_num = random.randint(1,35)num = content + (ZF*ran_num)print(str(content)+'....'+str(num))ws.cell(row=row,column=col).value = numif content>500 and content<=1000:ZF = random.choice((-1, 1))ran_num = random.randint(1,55)num = content + (ZF*ran_num)print(str(content)+'....'+str(num))ws.cell(row=row,column=col).value = numif content>1000 and content<=10000:ZF = random.choice((-1, 1))ran_num = random.randint(1,115)num = content + (ZF*ran_num)print(str(content)+'....'+str(num))ws.cell(row=row,column=col).value = numif content>10000 and content<=50000:ZF = random.choice((-1, 1))ran_num = random.randint(1,515)num = content + (ZF*ran_num)print(str(content)+'....'+str(num))ws.cell(row=row,column=col).value = numif content>50000 :ZF = random.choice((-1, 1))ran_num = random.randint(1,2000)num = content + (ZF*ran_num)print(str(content)+'....'+str(num))ws.cell(row=row,column=col).value = num	
wb.save("./2.xlsx")  #保存文件

代码实现效果图:

原本的1.xlsx

 运行结果的2.xlsx

二.xlrd

代码:

 

# -*- coding: GBK -*-from xlutils.copy import copy
import xlrd
import random# 缓存原excel内容
data = xlrd.open_workbook(filename=r'./1.xlsx')
# 索引下标为1的sheet页new_excel = copy(data)sheet11 = data.sheet_by_index(0) #用于获取sheet1的最大行数和列数以及单元格数据
sheet1 = new_excel.get_sheet(0) #通过copy,sheet1;方便修改和保存cols = sheet11.ncols #有效的最大列数
rows = sheet11.nrows #有效的最大行数
#print(cols)
#print(rows)
#print(type(sheet11.cell_value(0,0))) #查看复制过来的A11的数据类型
#发现数据类型,纯数字为float ; 文字、空格、字母都是 str型;
for r in range(0,rows): #此处的单元格从(0,0)开始;区别于openpyxlfor c in range(0,cols):content = sheet11.cell_value(r,c)  #获取该行该列单元格的内容if(isinstance(content, float)): #判断是否为float#其实直接写isinstance(content, float)就行;#但是我写的时候,就想多此一举而已;T = Trueelse:T = Falseif(content !=None ):  # 如果该单元格内容不为空if(T):#if(isinstance(content, float))content = int(float(content)) #将float转化成intif content>0 and content<=5:sheet1.write(r,c,random.randint(1,5)) #采用copy的sheet1;通过wirte直接修改if content>5 and content<=10:sheet1.write(r,c,random.randint(5,10))if content>10 and content<=20:sheet1.write(r,c,random.randint(10,20))if content>20 and content<=50:ZF = random.choice((-1, 1)) #随机选择 +1或者-1ran_num = random.randint(1,7) #随机出现 [1,7]的正整数num = content + (ZF*ran_num)print(str(content)+'....'+str(num))sheet1.write(r,c,num)if content>50 and content<=200:ZF = random.choice((-1, 1))ran_num = random.randint(1,15)num = content + (ZF*ran_num)print(str(content)+'....'+str(num))sheet1.write(r,c,num)if content>200 and content<=500:ZF = random.choice((-1, 1))ran_num = random.randint(1,35)num = content + (ZF*ran_num)print(str(content)+'....'+str(num))sheet1.write(r,c,num)if content>500 and content<=1000:ZF = random.choice((-1, 1))ran_num = random.randint(1,55)num = content + (ZF*ran_num)print(str(content)+'....'+str(num))sheet1.write(r,c,num)if content>1000 and content<=10000:ZF = random.choice((-1, 1))ran_num = random.randint(1,115)num = content + (ZF*ran_num)print(str(content)+'....'+str(num))sheet1.write(r,c,num)if content>10000 and content<=50000:ZF = random.choice((-1, 1))ran_num = random.randint(1,515)num = content + (ZF*ran_num)print(str(content)+'....'+str(num))sheet1.write(r,c,num)if content>50000 :ZF = random.choice((-1, 1))ran_num = random.randint(1,2000)num = content + (ZF*ran_num)print(str(content)+'....'+str(num))sheet1.write(r,c,num)new_excel.save(r'./2.xlsx') #通过copy的excel直接保存;

代码运行效果图:2.xlsx

 四、结语

        希望对您有帮助,祝您天天开心,享受每一天!~

       

 

发布评论

评论列表 (0)

  1. 暂无评论