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列表计数及插入实例
Dec 17 Python
python使用BeautifulSoup分析网页信息的方法
Apr 04 Python
python append、extend与insert的区别
Oct 13 Python
Python 2.x如何设置命令执行的超时时间实例
Oct 19 Python
pandas中去除指定字符的实例
May 18 Python
Django 配置多站点多域名的实现步骤
May 17 Python
解决python明明pip安装成功却找不到包的问题
Aug 28 Python
使用Pandas的Series方法绘制图像教程
Dec 04 Python
pytorch查看torch.Tensor和model是否在CUDA上的实例
Jan 03 Python
在Tensorflow中实现梯度下降法更新参数值
Jan 23 Python
matplotlib 画双轴子图无法显示x轴的解决方法
Jul 27 Python
matplotlib教程——强大的python作图工具库
Oct 15 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函数之日期时间函数date()使用详解
2013/09/09 PHP
根据ip调用新浪api获取城市名并转成拼音
2014/03/07 PHP
CI(CodeIgniter)框架配置
2014/06/10 PHP
php连接oracle数据库及查询数据的方法
2014/12/29 PHP
php打印一个边长为N的实心和空心菱型的方法
2015/03/02 PHP
php判断是否为ajax请求的方法
2016/11/29 PHP
PHP简单实现合并2个数字键数组值的方法
2017/05/30 PHP
浅析PHP中的 inet_pton 网络函数
2019/12/16 PHP
PHP数组访问常用方法解析
2020/09/05 PHP
利用javascript查看html源文件
2006/11/08 Javascript
表头固定(利用jquery实现原理介绍)
2012/11/08 Javascript
javascript继承之为什么要继承
2012/11/10 Javascript
浅谈jQuery中hide和fadeOut的区别 show和fadeIn的区别
2016/08/18 Javascript
JavaScript 输出显示内容(document.write、alert、innerHTML、console.log)
2016/12/14 Javascript
vue主动刷新页面及列表数据删除后的刷新实例
2018/09/16 Javascript
vue 项目地址去掉 #的方法
2018/10/20 Javascript
解决node终端下运行js文件不支持ES6语法
2020/04/04 Javascript
Python实现在线程里运行scrapy的方法
2015/04/07 Python
Python实现批量修改文件名实例
2015/07/08 Python
Python进阶篇之字典操作总结
2016/11/16 Python
Python使用arrow库优雅地处理时间数据详解
2017/10/10 Python
从pandas一个单元格的字符串中提取字符串方式
2019/12/17 Python
使用python-pptx包批量修改ppt格式的实现
2020/02/14 Python
Django Admin设置应用程序及模型顺序方法详解
2020/04/01 Python
基于Python测试程序是否有错误
2020/05/16 Python
python3中布局背景颜色代码分析
2020/12/01 Python
详解Python中的GIL(全局解释器锁)详解及解决GIL的几种方案
2021/01/29 Python
英国助听器购物网站:Hearing Direct
2018/08/21 全球购物
如何估计一张表的大小(假设该表中有1万条数据)
2016/03/27 面试题
请介绍一下WSDL的文档结构
2013/03/17 面试题
事假请假条范文
2014/04/11 职场文书
2014年个人委托书范本
2014/10/13 职场文书
大学毕业生个人总结
2015/02/28 职场文书
导游词之江南周庄
2019/12/06 职场文书
《我在为谁工作》:工作的质量往往决定生活的质量
2019/12/27 职场文书
MySQL的安装与配置详细教程
2021/06/26 MySQL