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或xsl转换为html格式
Apr 08 Python
python插入排序算法实例分析
Jul 03 Python
Python数据报表之Excel操作模块用法分析
Mar 11 Python
解决python中使用PYQT时中文乱码问题
Jun 17 Python
解决Python内层for循环如何break出外层的循环的问题
Jun 24 Python
python实现串口自动触发工作的示例
Jul 02 Python
opencv实现简单人脸识别
Feb 19 Python
Django form表单与请求的生命周期步骤详解
Jun 07 Python
Python迭代器协议及for循环工作机制详解
Jul 14 Python
pandas apply多线程实现代码
Aug 17 Python
pycharm 关闭search everywhere的解决操作
Jan 15 Python
Python 一键获取电脑浏览器的账号密码
May 11 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实现的获取URL信息的类
2007/01/02 PHP
简单的PHP缓存设计实现代码
2011/09/30 PHP
深入探讨:PHP使用数据库永久连接方式操作MySQL的是与非
2013/06/05 PHP
解析PHP对现有搜索引擎的调用
2013/06/25 PHP
PHP面向对象五大原则之依赖倒置原则(DIP)详解
2018/04/08 PHP
PHP排序算法之直接插入排序(Straight Insertion Sort)实例分析
2018/04/20 PHP
zShowBox 图片放大展示jquery版 兼容性
2011/09/24 Javascript
顶部缓冲下拉菜单导航特效的JS代码
2013/08/27 Javascript
Javascript基础教程之函数对象和属性
2015/01/18 Javascript
bootstrap学习使用(导航条、下拉菜单、轮播、栅格布局等)
2016/12/01 Javascript
Bootstrap3 多选和单选框(checkbox)
2016/12/29 Javascript
jquery实现全选、全不选以及单选功能
2017/03/23 jQuery
JavaScript中常见的八个陷阱总结
2017/06/28 Javascript
JS实现微信摇一摇原理解析
2017/07/22 Javascript
js运算符的一些特殊用法
2018/07/29 Javascript
jQuery实现点击自身以外区域关闭弹出层功能完整示例【改进版】
2018/07/31 jQuery
layui table 表格模板按钮的实例代码
2019/09/21 Javascript
Vue使用Element实现增删改查+打包的步骤
2020/11/25 Vue.js
利用Python的Twisted框架实现webshell密码扫描器的教程
2015/04/16 Python
用Python抢过年的火车票附源码
2015/12/07 Python
使用Python的Flask框架表单插件Flask-WTF实现Web登录验证
2016/07/12 Python
Python 由字符串函数名得到对应的函数(实例讲解)
2017/08/10 Python
python一行sql太长折成多行并且有多个参数的方法
2018/07/19 Python
在python中实现将一张图片剪切成四份的方法
2018/12/05 Python
python中的列表与元组的使用
2019/08/08 Python
Python实现打印实心和空心菱形
2019/11/23 Python
python实现数据清洗(缺失值与异常值处理)
2019/12/02 Python
Jo Malone美国官网:祖玛珑香水
2017/03/27 全球购物
出门问问全球官方商城:Tichome音箱和TicWatch智能手表
2017/12/02 全球购物
Farnell德国:电子元器件供应商
2018/07/10 全球购物
用缩写的指针比较"if(p)" 检查空指针是否可靠?如果空指针的内部表达不是0会怎么样?
2014/01/05 面试题
介绍一下XMLHttpRequest对象的常用方法和属性
2013/05/24 面试题
人力资源管理专业学生自我评价
2013/11/20 职场文书
讲文明倡议书
2015/04/29 职场文书
2015年前台接待工作总结
2015/05/04 职场文书
2015秋季开学演讲稿范文
2015/07/16 职场文书