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解析xml成对应的html示例分享
Apr 02 Python
Python实现的Google IP 可用性检测脚本
Apr 23 Python
django admin添加数据自动记录user到表中的实现方法
Jan 05 Python
python 文件转成16进制数组的实例
Jul 09 Python
python递归实现快速排序
Aug 18 Python
对python的unittest架构公共参数token提取方法详解
Dec 17 Python
用Python从0开始实现一个中文拼音输入法的思路详解
Jul 20 Python
Pycharm中Python环境配置常见问题解析
Jan 16 Python
基于pygame实现童年掌机打砖块游戏
Feb 25 Python
Python之Matplotlib文字与注释的使用方法
Jun 18 Python
Python利用zhdate模块实现农历日期处理
Mar 31 Python
Python中tqdm的使用和例子
Sep 23 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
php中json_encode不兼容JSON_UNESCAPED_UNICODE的解决方案
2016/05/31 PHP
PHP二维数组去重实例分析
2016/11/18 PHP
php如何实现数据库的备份和恢复
2020/11/30 PHP
XHTML-Strict 内允许出现的标签
2006/12/11 Javascript
jquery 无限级联菜单案例分享
2013/03/26 Javascript
JS连接SQL数据库与ACCESS数据库的方法实例
2013/11/21 Javascript
javascript不同类型数据之间的运算的转换方法
2014/02/13 Javascript
JavaScript获取当前日期是星期几的方法
2015/04/06 Javascript
jQuery插件开发精品教程(让你的jQuery更上一个台阶)
2015/11/07 Javascript
JS面向对象(3)之Object类,静态属性,闭包,私有属性, call和apply的使用,继承的三种实现方法
2016/02/25 Javascript
AngularJS 自定义指令详解及示例代码
2016/08/17 Javascript
关于js函数解释(包括内嵌,对象等)
2016/11/20 Javascript
Nuxt.js开启SSR渲染的教程详解
2018/11/30 Javascript
Vue源码解析之Template转化为AST的实现方法
2018/12/14 Javascript
详解微信小程序缓存--缓存时效性
2019/05/02 Javascript
Vue实现背景更换颜色操作
2020/07/17 Javascript
[03:55]显微镜下的DOTA2特别篇——430灰烬之灵神级操作
2014/06/24 DOTA
python实现自动重启本程序的方法
2015/07/09 Python
Python计算已经过去多少个周末的方法
2015/07/25 Python
python对excel文档去重及求和的实例
2018/04/18 Python
解决nohup执行python程序log文件写入不及时的问题
2019/01/14 Python
Python 实现王者荣耀中的敏感词过滤示例
2019/01/21 Python
python实现AES加密解密
2019/03/28 Python
对python3.4 字符串转16进制的实例详解
2019/06/12 Python
使用 Supervisor 监控 Python3 进程方式
2019/12/05 Python
Django中使用Json返回数据的实现方法
2020/06/03 Python
Python如何实现感知器的逻辑电路
2020/12/25 Python
雪花秀美国官方网站:韩国著名草本护肤化妆品品牌
2016/10/19 全球购物
Ibood荷兰:互联网每日最佳在线优惠
2019/02/28 全球购物
IMPORT的选项IGNORE有什么作用?缺省是什么设置?
2015/09/17 面试题
狼和鹿教学反思
2014/02/05 职场文书
销售员岗位职责
2014/06/09 职场文书
励志演讲稿600字
2014/08/21 职场文书
农村文化建设标语
2014/10/07 职场文书
2014年化妆品销售工作总结
2014/12/01 职场文书
css3新特性的应用示例分析
2022/03/16 HTML / CSS