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中degrees()方法的使用
May 18 Python
简单了解Python下用于监视文件系统的pyinotify包
Nov 13 Python
python获取网页中所有图片并筛选指定分辨率的方法
Mar 31 Python
Python对象转换为json的方法步骤
Apr 25 Python
利用python numpy+matplotlib绘制股票k线图的方法
Jun 26 Python
pytorch 输出中间层特征的实例
Aug 17 Python
django使用F方法更新一个对象多个对象字段的实现
Mar 28 Python
2020版Python学习路线图(附学习资料)
Sep 15 Python
python 爬虫爬取京东ps4售卖情况
Dec 18 Python
python基于opencv实现人脸识别
Jan 04 Python
linux系统下pip升级报错的解决方法
Jan 31 Python
Pytorch 如何实现LSTM时间序列预测
May 17 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实现让页面只能被百度gogole蜘蛛访问的方法
2009/12/29 PHP
php 截取字符串并以零补齐str_pad() 函数
2011/05/07 PHP
PHP header函数分析详解
2011/08/06 PHP
主流PHP框架的优缺点对比分析
2014/12/25 PHP
详解no input file specified 三种解决方法
2019/11/29 PHP
json格式化/压缩工具 Chrome插件扩展版
2010/05/25 Javascript
jquery下onpropertychange事件的绑定方法
2010/08/01 Javascript
Node.js中使用jQuery的做法
2016/08/17 Javascript
微信小程序 保留小数(toFixed)详细介绍
2016/11/16 Javascript
JS DOMReady事件的六种实现方法总结
2016/11/23 Javascript
概述jQuery中的ajax方法
2016/12/16 Javascript
Vue 通过自定义指令回顾v-内置指令(小结)
2018/09/03 Javascript
详解vue使用$http服务端收不到参数
2019/04/19 Javascript
在微信小程序中使用图表的方法示例
2019/04/25 Javascript
Vue表单之v-model绑定下拉列表功能
2019/05/14 Javascript
JavaScript函数式编程(Functional Programming)纯函数用法分析
2019/05/22 Javascript
解决vue打包后刷新页面报错:Unexpected token
2019/08/27 Javascript
JavaScript中数组去重的5种方法
2020/07/04 Javascript
Vue中keep-alive组件的深入理解
2020/08/23 Javascript
在vscode 中设置 vue模板内容的方法
2020/09/02 Javascript
Python 对象中的数据类型
2017/05/13 Python
使用python将图片格式转换为ico格式的示例
2018/10/22 Python
Django-Rest-Framework 权限管理源码浅析(小结)
2018/11/12 Python
Python matplotlib画图与中文设置操作实例分析
2019/04/23 Python
python使用递归的方式建立二叉树
2019/07/03 Python
Snapfish英国:在线照片打印和个性化照片礼品
2017/01/13 全球购物
露营世界:Camping World
2017/02/02 全球购物
本科生的职业生涯规划范文
2014/01/09 职场文书
《孔子拜师》教学反思
2014/02/24 职场文书
平安工地建设方案
2014/05/06 职场文书
学生实习证明模板汇总
2014/09/25 职场文书
房屋租赁合同解除协议书
2014/10/11 职场文书
放弃继承权公证书
2015/01/23 职场文书
二审答辩状范文
2015/05/22 职场文书
解决jupyter notebook启动后没有token的坑
2021/04/24 Python
Linux中一对多配置日志服务器的详细步骤
2022/07/23 Servers