Python Excel vlookup函数实现过程解析


Posted in Python onJune 22, 2020

用法:注意是用英文的逗号",",且之间没有空格。

文件名,[工作表名称,不写则默认当前激活的表],[从第几行开始,不写则默认第二行,因为很多表第一行是title],列名(第一列是要查找的元素,列名可以不连续,比如“ade”)

脚本会自动把要查找的第一列进行大小写变换,去除空格等操作,下面的例子中,第一列的名字有的是大写,有的小写,前后还有空格,脚本会默认它们相同

现有Sheet1,内容如下

Python Excel vlookup函数实现过程解析

Sheet2内容如下

Python Excel vlookup函数实现过程解析

想把 Sheet1 的 B,C 列的信息复制到 Sheet2 的 B,C列上,执行脚本:

Source fileName,[sheetName],[row],columns:
vlookup.xlsx,Sheet1,1,abc
Target fileName,[sheetName],[row],columns:
vlookup.xlsx,Sheet2,1,abc
{'name': ['Lao Wang', 'Zhang San'], 'age': [23, 25], 'id': [23429234, None], 'phone': ['18292942422', '1000101010'], 'addr': ['BeiJIng', None]}
{'addr': [None, None], 'phone': [None, None], 'id': [None, None], 'age': [None, None], 'name': [None, None]}
Processing...
Done.

然后Sheet2的内容就变成了:

Python Excel vlookup函数实现过程解析

import openpyxl

def read_Excel(path,sheetName,row,*col):
  # 默认从第二行开始,因为很多表都有表头
  if row == '':
    row = 2
  else:
    row = int(row)
  workbook = openpyxl.load_workbook(path)
  # 默认打开当前激活的工作表
  if sheetName == "":
    sheet0 = workbook.active # 获取当前激活的工作表
  else:
    sheet0 = workbook[sheetName] # 如果制定了工作表,就打开指定的工作表
  highest = sheet0.max_row
  case_list = {}
  # title 所在列,对比的那一列,假设A列
  title = col[0]
  for i in range(row,highest+1): # 遍历行
    value_list = []
    if sheet0[title+str(i)].value == None: # 如果A5是空的,pass
      pass
    else:
      v1 = sheet0[title+str(i)].value.lower().strip() # 忽略大小写和前后空格
      # 除去 title的其他列
      for j in range(1,len(col)):
        v2 = sheet0[col[j]+str(i)].value
        value_list.append(v2)
      case_list[v1] = value_list
  print(case_list)
  return case_list

def write_Excel(dict,path,sheetName,row,*col):
  # 将处理好的数据再次写入excel
  if row == "":
    row = 2
  else:
    row = int(row)
  workbook = openpyxl.load_workbook(path)
  if sheetName == "":
    sheet0 = workbook.active # 获取当前激活的工作表
  else:
    sheet0 = workbook[sheetName]
  highest = sheet0.max_row
  # case title 所在列
  title = col[0]
  for i in range(row,highest+1):
    if sheet0[title + str(i)].value != None:
      v1 = sheet0[title + str(i)].value.lower().strip() # 忽略大小写和前后空格
      for key in dict:
        if key == v1:
          for j in range(1,len(col)):
            v2 = sheet0[col[j]+str(i)]
            v2.value = dict[key][j-1]
  workbook.save(path)

def process(r1,r2):
  # 对比处理两次读取的内容,然后更新r2的内容
  print('Processing...')
  for key in r1:
    if key in r2:
      length = len(r1[key])
      if length > 0:
        for i in range(0, len(r1[key])):
          # 如果想要不想覆盖原有的数值,可以取消注释,然后删除下面那行
          # if r2[key][i] == None:
            # r2[key][i] = r1[key][i]
          r2[key][i] = r1[key][i]
    else:
      pass
  
  return r2

def manual():
  info1 = input('Read from fileName,[sheetName],[row],columns:\n')
  file1,sheetName1,row1,list1 = info1.split(',')
  
  info2 = input('Write into fileName,[sheetName],[row],columns:\n')
  file2,sheetName2,row2,list2 = info2.split(',')

  r1 = read_Excel(file1,sheetName1,row1,*list1)
  r2 = read_Excel(file2,sheetName2,row2,*list2)

  r3 = process(r1,r2)
  write_Excel(r3,file2,sheetName2,row2,*list2)

  print('Done.')

if __name__ == "__main__":
  manual()

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
使用Python构建Hopfield网络的教程
Apr 14 Python
Flask框架的学习指南之制作简单blog系统
Nov 20 Python
离线安装Pyecharts的步骤以及依赖包流程
Apr 23 Python
python开发利器之ulipad的使用实践
Mar 16 Python
使用pygame模块编写贪吃蛇的实例讲解
Feb 05 Python
用Python将一个列表分割成小列表的实例讲解
Jul 02 Python
python django下载大的csv文件实现方法分析
Jul 19 Python
在python3中使用shuffle函数要注意的地方
Feb 28 Python
Python开发企业微信机器人每天定时发消息实例
Mar 17 Python
Python 执行矩阵与线性代数运算
Aug 01 Python
Python实现壁纸下载与轮换
Oct 19 Python
总结python 三种常见的内存泄漏场景
Nov 20 Python
宝塔面板成功部署Django项目流程(图文)
Jun 22 #Python
python和php哪个更适合写爬虫
Jun 22 #Python
如何理解python对象
Jun 21 #Python
什么是python的必选参数
Jun 21 #Python
什么是python的自省
Jun 21 #Python
python的json包位置及用法总结
Jun 21 #Python
为什么相对PHP黑python的更少
Jun 21 #Python
You might like
Apache环境下PHP利用HTTP缓存协议原理解析及应用分析
2010/02/16 PHP
PHP时间戳与日期之间转换的实例介绍
2013/04/19 PHP
PHP扩展程序实现守护进程
2015/04/16 PHP
PHP生成随机数的方法总结
2018/03/01 PHP
Javascript insertAfter() 实现函数代码
2011/10/12 Javascript
javasciprt下jquery函数$.post执行无响应的解决方法
2014/03/13 Javascript
JavaScript格式化日期时间的方法和自定义格式化函数示例
2014/04/04 Javascript
JavaScript返回网页中锚点数目的方法
2015/04/03 Javascript
你所未知的3种Node.js代码优化方式
2016/02/25 Javascript
JavaScript的instanceof运算符学习教程
2016/06/08 Javascript
jQuery实现为LI列表前3行设置样式的方法【2种方法】
2016/09/04 Javascript
javascript字符串对象常用api函数小结(连接,替换,分割,转换等)
2016/09/20 Javascript
jQuery Validate 数组 全部验证问题
2017/01/12 Javascript
基于JavaScript实现淘宝商品广告效果
2017/08/10 Javascript
nodejs用gulp管理前端文件方法
2018/06/24 NodeJs
实例讲解JS中pop使用方法
2019/01/27 Javascript
JQuery 实现文件下载的常用方法分析
2019/10/29 jQuery
Vue 中如何将函数作为 props 传递给组件的实现代码
2020/05/12 Javascript
Vue 3.0中jsx语法的使用
2020/11/13 Javascript
Python实现快速排序和插入排序算法及自定义排序的示例
2016/02/16 Python
Python基于回溯法子集树模板解决数字组合问题实例
2017/09/02 Python
Python socket实现简单聊天室
2018/04/01 Python
python实现图片文件批量重命名
2020/03/23 Python
python线程安全及多进程多线程实现方法详解
2019/09/27 Python
Python中BeautifuSoup库的用法使用详解
2019/11/15 Python
python解析多层json操作示例
2019/12/30 Python
Kendra Scott官网:美国领先的时尚配饰品牌
2020/10/22 全球购物
行政助理的职责
2013/11/14 职场文书
校园联欢晚会主持词
2014/03/17 职场文书
私人会所最新创业计划书范文
2014/03/24 职场文书
关于青春的演讲稿800字
2014/08/22 职场文书
市贸粮局召开党的群众路线教育实践活动总结大会新闻稿
2014/10/21 职场文书
设备技术员岗位职责
2015/04/11 职场文书
承诺书模板大全
2015/05/04 职场文书
研究生论文答辩开场白
2015/05/27 职场文书
超外差式晶体管收音机的组装与统调
2021/04/22 无线电