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 相关文章推荐
wxpython 最小化到托盘与欢迎图片的实现方法
Jun 09 Python
Python通过DOM和SAX方式解析XML的应用实例分享
Nov 16 Python
Python文件操作基本流程代码实例
Dec 11 Python
基于python中theano库的线性回归
Aug 31 Python
Python使用pymongo库操作MongoDB数据库的方法实例
Feb 22 Python
Python实现KNN(K-近邻)算法的示例代码
Mar 05 Python
Win10系统下安装labelme及json文件批量转化方法
Jul 30 Python
Python Pandas 转换unix时间戳方式
Dec 07 Python
Selenium常见异常解析及解决方案示范
Apr 10 Python
python与c语言的语法有哪些不一样的
Sep 13 Python
如何使用pycharm连接Databricks的步骤详解
Sep 23 Python
Python性能测试工具Locust安装及使用
Dec 01 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用户注册时常用的检验函数实例总结
2014/12/22 PHP
浅析PHP中的 inet_pton 网络函数
2019/12/16 PHP
2020最新版 PhpStudy V8.1版本下载安装使用详解
2020/10/30 PHP
设置下载不需要倒计时cookie(倒计时代码)
2008/11/19 Javascript
javascript setTimeout和setInterval 的区别
2009/12/08 Javascript
Extjs中使用extend(js继承) 的代码
2012/03/15 Javascript
js之ActiveX控件使用说明 new ActiveXObject()
2014/03/03 Javascript
在HTML中插入JavaScript代码的示例
2015/06/03 Javascript
微信小程序实现团购或秒杀批量倒计时
2020/11/01 Javascript
JavaScript中filter的用法实例分析
2019/02/27 Javascript
小程序:授权、登录、session_key、unionId的详解
2019/05/15 Javascript
Vue 自定义指令实现一键 Copy功能
2019/09/16 Javascript
Android应用开发中Action bar编写的入门教程
2016/02/26 Python
详解Python之unittest单元测试代码
2018/01/24 Python
python+opencv识别图片中的圆形
2020/03/25 Python
对Python 内建函数和保留字详解
2018/10/15 Python
pandas 快速处理 date_time 日期格式方法
2018/11/12 Python
对python以16进制打印字节数组的方法详解
2019/01/24 Python
django页面跳转问题及注意事项
2019/07/18 Python
Python 写入训练日志文件并控制台输出解析
2019/08/13 Python
python lambda表达式(匿名函数)写法解析
2019/09/16 Python
Python print不能立即打印的解决方式
2020/02/19 Python
Python爬虫爬取、解析数据操作示例
2020/03/27 Python
Python同时处理多个异常的方法
2020/07/28 Python
8款精美的CSS3表单设计(登录表单/下拉选择/按钮附演示及源码)
2013/02/04 HTML / CSS
澳大利亚领先的女性运动服品牌:Lorna Jane
2020/06/19 全球购物
应届毕业生求职信
2013/11/30 职场文书
2014机关党员干部“正风肃纪”思想汇报
2014/09/15 职场文书
2014学习十八届四中全会精神思想汇报范文
2014/10/23 职场文书
劳动仲裁撤诉申请书
2015/05/18 职场文书
银行文明优质服务培训心得体会
2016/01/09 职场文书
读《茶花女》有感:山茶花的盛开与凋零
2020/01/17 职场文书
浅谈react useEffect闭包的坑
2021/06/08 Javascript
详细了解java监听器和过滤器
2021/07/09 Java/Android
Vertica集成Apache Hudi重磅使用指南
2022/03/31 Servers
windows server2016安装oracle 11g的图文教程
2022/07/15 Servers