工作中突然要操作一堆Excel表格,就想着能否用Python来处理,这一篇就学习一下Python操作Excel表。

我需要在一个内网环境安装python开发环境,在网上下载了pycharm2018,好像再新的版本没有windows 32位的版本了。

安装:

安装步骤:先下载安装python3.8,然后安装第三方库openpyxl,openpyxl需要下载openpyxl-3.0.7-py2.py3-none-any.whl,安装还需要其jdcal和et_xmlfile库的支持,下载jdcal-1.4.1-py2.py3-none-any.whl,et_xmlfile-1.1.0-py3-none-any.whl。

将这三个文件放在一个文件夹中,命令窗口切换至这个文件夹,执行pip命令进行安装,前提是在环境变量path中增加了python的路径,能够找到pip命令,pip命令在python目录下的scripts子目录下。

pip install jdcal-1.4.1-py2.py3-none-any.whl

pip install et_xmlfile-1.1.0-py3-none-any.whl

pip install openpyxl-3.0.7-py2.py3-none-any.whl

然后安装pycharm,安装成功后,有一个问题,虽然前面安装openpyxl成功了,但是在pycharm中还是没有,需要在pycharm的python console中重新执行一遍前面的三条pip命令。

使用:

首先要有一个概念的体系结构,对excel的操作,最大的对象就是工作簿,即Workbook,然后是工作表,即Sheet,最后是单元格,即Cell。

创建一个新的工作簿:使用openpyxl.Workbook,这相当于调用openpyxl.workbook.Workbook

这就生成了一个工作簿对象,这个工作簿里面还没有工作表,这跟我们操作excel是打开excel自动会创建3个默认工作表不一样,需要手工创建工作表:

 然后是单元格:

 生成了一个单元格对象。操作单元格

 保存工作簿,就是在磁盘中生成保存excel文件。最后关闭工作簿

打开新生成的文件:

 可以看到在创建的工作表之外,还有一个默认创建的Sheet表。

操作已有表:就使用已创建的test1111.xlsx,修改一下:

打开已有excel文件,使用:

load_workbook()第一个参数是打开的工作簿的文件名称,后面的参数主要注意data_only选项,这个选项控制读取的单元格内容,如果单元格里是一个公式,那么使用这个选项,读取出来的就是公式计算后的值,否则,读取的是公式本身。

获取工作表:

可以看到,get_sheet_by_name方法也不被建议使用,直接使用工作簿加工作表的索引来引用相应的工作表:

 读取单元格:

跟获得工作表类似,使用索引的方法,中括号中是要读取单元格的地址,但是获得的是单元格对象,要获取其值,需要使用value属性:

pycharm没有提示出来:

读取C2单元格试一下:

读取的是公式本身

修改一下:

此时读取的是公式计算后的值。

做一个测试:wb对象能够弹出data_only属性,

打开工作簿后,不能再次设置data_only。 

对于取一个区域的单元格,其返回的是一个嵌套的元组,里面的元组是以同一行的多列单元格为元素。

具体项目1:有多个考核明细表,编程实现将多个明细表的数据汇总到一个表中。

明细表、汇总表的结构:

程序:

#!/usr/bin/env python3
# -*- coding:utf-8 -*-
import openpyxl
import osmxfiles = os.listdir('excelmx')  # 获取全部明细考核表文件
hzfile = '考核汇总表.xlsx'   # 汇总表文件wbhz = openpyxl.load_workbook(hzfile)  #打开汇总表工作簿
wshz = wbhz['Sheet1']   # 获得汇总的工作表
hzrowstart = 4   # 汇总表的开始行号
# 下面的while语句判断汇总表开始写入数据的行号,汇总表中可能有前期的数据了
# 判断的依据就是B列从第4行开始往下的第一个空单元格开始插入数据
while True:celltemp = 'B' + str(hzrowstart)if wshz[celltemp].value == None:breakhzrowstart += 1# 下面的for循环遍历每个明细表,将数据一条一条插入汇总表
for mxfile in mxfiles:mxfile_t = 'excelmx\\' + mxfile    # mxfile需要加上子目录,形成excelmx\xxxx.xlsx形式完整名n = 1wbmx = openpyxl.load_workbook(mxfile_t)wsmx = wbmx['Sheet1']    # 明细表固定在Sheet1工作表上while True:# 组合明细表和汇总表对应拷贝的单元格,明细表中的B4拷贝到汇总表中的B4,C4到C4。。。hzcellb = 'B' + str(hzrowstart)mxcellb = 'B' + str(n+3)hzcellc = 'C' + str(hzrowstart)mxcellc = 'C' + str(n + 3)hzcelld = 'D' + str(hzrowstart)mxcelld = 'D' + str(n + 3)hzcelle = 'E' + str(hzrowstart)mxcelle = 'E' + str(n + 3)hzcellf = 'F' + str(hzrowstart)mxcellf = 'F' + str(n + 3)hzcellg = 'G' + str(hzrowstart)mxcellg = 'G' + str(n + 3)hzcellh = 'H' + str(hzrowstart)mxcellh = 'H' + str(n + 3)hzcelli = 'I' + str(hzrowstart)mxcelli = 'I' + str(n + 3)if wsmx[mxcellb].value == None:    # 判断如果明细表数据为空了,就结束wbmx.close()breakwshz[hzcellb] = wsmx[mxcellb].valuewshz[hzcellc] = wsmx[mxcellc].valuewshz[hzcelld] = wsmx[mxcelld].valuewshz[hzcelle] = wsmx[mxcelle].valuewshz[hzcellf] = wsmx[mxcellf].valuewshz[hzcellg] = wsmx[mxcellg].valuewshz[hzcellh] = wsmx[mxcellh].valuewshz[hzcelli] = wsmx[mxcelli].valuehzrowstart += 1n += 1
wbhz.save(hzfile)
wbhz.close()

具体项目2:上面的汇总明细表,以前四项为唯一值,即作为一个考核汇总项,形成一个新的考核表,将汇总明细表中不同的考核人+考核说明填到这个考核表的考核说明中,如单位名称1+1月+ 基础工作+小项1共有2个人考核,有两个说明,要把这个两个人的说明合并填写到这个表的一个单元格中。实际工作中有二十多个考核人,并且每个考核人考核的项也不相同,每个人按照不同的分工对自己负责的一部分进行考核打分,用excel本身实现合并很麻烦。编程实现。

解决思路:

#!/usr/bin/env python3
# -*- coding:utf-8 -*-
import openpyxldestfile = '考核汇总表.xlsx'wb = openpyxl.load_workbook(destfile)wshz = wb['Sheet1']     #汇总工作表对象
wskh = wb['Sheet2']     #考核工作表对象khrow = 4               #考核表数据开始行号
while True:cell_tmp = 'B' + str(khrow)if wskh[cell_tmp].value == None:breakkhrow += 1           #while语句判断考核表数据的行数,最后一行数据的行号为khrow-1hzrow = 4     #汇总表数据也从第4行开始
while True:cellhz_temp = 'B' + str(hzrow)if wshz[cellhz_temp].value == None:breakhzrow += 1#计算汇总表数据范围cellrange = 'B4:E' + str(hzrow-1)   #选择汇总表的前前四列数据
wshz_tmp = wshz[cellrange]
wshz_list = []
for temp in wshz_tmp:s = ''for temp1 in temp:s = s + temp1.valuewshz_list.append(s)# for语句将汇总表的前四列合并然后添加到wskh_list,形成一个列表for k in range(4,khrow):s1 = ''match_temp = ''khcellb,khcellc,khcelld,khcelle = 'B' + str(k),'C' + str(k),'D' + str(k),'E' + str(k)s1 = s1 + wskh[khcellb].value + wskh[khcellc].value + wskh[khcelld].value + wskh[khcelle].valuei = 0while i < len(wshz_list):if s1 == wshz_list[i]:cell_h = 'H' + str(i + 4)cell_i = 'I' + str(i + 4)match_temp = match_temp + wshz[cell_h].value + ':' + wshz[cell_i].value + '|'i += 1wskh['H'+str(k)] = match_tempwb.save(destfile)
wb.close()

以上是最简单的excel使用,只是从功能上实现了工作中需求,性能上因为个人刚学习,水平所限,无法判断好坏,如有高手希望指点一二,谢谢。

Python基础入门自学——18--操作Excel-工作实践需求相关推荐

  1. Python基础入门自学——19--访问数据库

    继续前面的工作需求解决: 具体项目3:对于每个单位的考核结果进行分析,如果连续2个月出现红牌,要给与警告,连续3个月及以上的,要处罚,我们要实现的就是给出提示,连续2次出现红牌的月份,连续3次出现红牌 ...

  2. Python操作Excel工作簿的示例代码(.xlsx)

    前言 Excel 作为流行的个人计算机数据处理软件,混迹于各个领域,在程序员这里也是常常被处理的对象,可以处理 Excel 格式文件的 Python 库还是挺多的,比如 xlrd.xlwt.xluti ...

  3. 用python的openpyxl库实现对excel工作表的自动化操作

    用python的openpyxl库实现对excel工作表的自动化操作 用python的openpyxl库读取excel工作表,批量建立工作表,批量修改工作表标题,批量设置单元格样式,批量调整打印设置. ...

  4. 万字长文爆肝Python基础入门【巨详细,一学就会】

    目录 数据的名字和种类--变量和类型 初探数据种类 数据类型 数值运算 比较运算 变量和赋值 变量的好处 用赋值更新变量 变量和数据类型的关系 总结 数据类型 数值运算 数值比较 变量和赋值 一串数据 ...

  5. 【全网力荐】堪称最易学的Python基础入门教程

    目录 数据的名字和种类--变量和类型 初探数据种类 数据类型 数值运算 比较运算 变量和赋值 变量的好处 用赋值更新变量 变量和数据类型的关系 总结 数据类型 数值运算 数值比较 变量和赋值 一串数据 ...

  6. 全站最全面的Python 基础入门必备知识大全,学完即就业!【建议收藏仔细学习】

    前言: Python作为21世纪最火的编程语言,市面上各种学习视频层出不穷,关于Python的学习氛围也逐渐浓厚!!最近一段时间越来越多的知友们在私信我,希望我出一期python基础入门的内容,肝了N ...

  7. Python基础入门教程:Day21-30/Web前端概述

    Python基础入门教程:Web前端概述 说明:本文使用的部分插图来自 Jon Duckett 先生的*HTML and CSS: Design and Build Websites*一书,这是一本非 ...

  8. python免费入门手册-Python 基础入门教程

    Python是一种解释型.面向对象.动态数据类型的高级程序设计语言. Python由Guido van Rossum于1989年底发明,第一个公开发行版发行于1991年. <Python 基础入 ...

  9. Python基础入门笔记(二)

    前言 本文主要为 Python基础入门笔记(一)内容的补充. 一.迭代器和生成器 1.1 Python迭代器 迭代器是一个可以记住遍历的位置的对象. 迭代器对象从集合的第一个元素开始访问,直到所有的元 ...

最新文章

  1. Linux那些事儿 之 戏说USB(30)驱动的生命线(二)
  2. Android学习第一书
  3. 拿下了一个美女图片网站!
  4. 小谈React、React Native、React Web
  5. P1422 小玉家的电费--2022.03.15
  6. python调用rocketmq的api_rocketmq-python
  7. LUNA16数据集肺结节显示亲测
  8. Spring Boot 使用 Dom4j XStream 操作 Xml
  9. 112654 个招聘数据告诉你,程序员 2019 年该去哪!
  10. 横向导出excel_万能转换:R图和统计表转成发表级的Word、PPT、Excel、HTML、Latex、矢量图等...
  11. MAC上DOS常用命令操作
  12. 教你定时爬取微博热搜榜并做动态数据展示,让你不错过任何一个吃瓜热点
  13. 施耐德c语言编程软件,施耐德PLC讲座 IEC语言梯形图
  14. PC端微信打不开小程序解决
  15. PHP即充宝v3.0实例
  16. vlookup匹配的文字显示0_详解vlookup函数中{1,0}的使用方法,看完后给同事讲讲,秒变大神...
  17. oracle 10g R2数据库的安装部署
  18. DDR SDRAM原理介绍
  19. c++如何画实心的箭头
  20. linux 破壳漏洞,Bash破壳漏洞

热门文章

  1. c喱c喱是哪国语言,c喱c哩歌词。不要音译
  2. 头条号平台单月流量分成近1亿,接下来要做内容付费
  3. PPC与PC无线连接(Wi-Fi)
  4. dos版电影 (telnet towel.blinkenlights.nl的奇迹!!)-STAR WARS in ARCII
  5. 使用cookie和session实现用户的认证和授权(原生方式,不使用安全框架)
  6. 14 款命令行常用工具的替代品
  7. 视频编码之I帧、P帧、B帧
  8. 5G网速真的有理论上那么高吗?
  9. python手机端给电脑端发送数据_神途传奇 (手机端+电脑端) 数据互通 传奇来袭 www.8wf.com...
  10. MNIST手写数字识别之MLP实现