前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >用python批量处理Excel表格,处理结果又快又好,做办公室最靓的那个仔

用python批量处理Excel表格,处理结果又快又好,做办公室最靓的那个仔

作者头像
菜鸟小白的学习分享
发布2020-07-14 18:10:08
4.3K0
发布2020-07-14 18:10:08
举报

使用python批量处理Excel数据

  • 让你根据Excel上所有人的身份证号码,提取出公司员工的生日
  • 让你每个月都将公司所有人的考勤数据整理一下

类似这样的格式化的重复操作,你还在每次都使用的人工去逐条查询处理么?下次再遇到这种情况,请一定不要再傻傻地每次都手动查询处理。可以快速整理出一个python脚本来批量处理Excel数据,周期性处理的数据更是一了百了哦。

首先我们需要安装一个xlrd和xlwt的python,其中xlrd是用来读取Excel表格数据,xlwt是用来写Excel表格数据的。具体python安装可以参考python学习三——库安装。

xlrd

首先我们学习一下Excel表格读写库——xlrd

  • 打开excel文件并获取所有sheet
代码语言:javascript
复制
import xlrd
# 打开Excel文件读取数据
data = xlrd.open_workbook('联系人.xls')
 
sheet_name = data.sheet_names()  # 获取所有sheet名称
print(sheet_name) # ['sheet1', 'sheet2']
  • 根据sheet索引或者名称获取sheet内容,同时获取sheet名称、行数、列数
代码语言:javascript
复制
# 根据sheet索引或者名称获取sheet内容,同时获取sheet名称、列数、行数
sheet2 = data.sheet_by_index(1)
print('sheet2名称:{}\nsheet2列数: {}\nsheet2行数: {}'.format(sheet2.name, sheet2.ncols, sheet2.nrows))
# sheet2名称:sheet2
# sheet2列数: 7
# sheet2行数: 5

  • 获取指定单元格的内容
代码语言:javascript
复制
# 获取指定单元格的内容
print(sheet1.cell(1,0).value)  # 第2 行1列内容:机构名称
print(sheet1.cell_value(1,0))  # 第2 行1列内容:机构名称
print(sheet1.row(1)[0].value)  # 第2 行1列内容:机构名称

xlwt

接下来我们我们在看看xlwt,其实两个库的使用方法都是差不多的。具体代码如下:

代码语言:javascript
复制
import  xlwt
#创建一个Excel对象
write_book = xlwt.Workbook()
#在对象中添加一个sheet1表
write_sheet = xlwt.Workbook.add_sheet(write_book,sheetname='cainiaoxiaobai')
#在第二行第三列的单元格插入数据(默认从0开始计数)
write_sheet.write(1,2,"菜鸟小白的学习分享")
#保存Excel对象为test.xls
write_book.save(filename_or_stream='test.xls')

运行产生的Excel表格如下

看到这你是不是以为就结束了,当然不会大家更加方便的完成表格处理,我这边将常见的模块,直接进行调用就能够满足常用的Excel表格数据的批量处理。

代码语言:javascript
复制
#   _*_coding=utf-8_*_
import xlwt
import xlrd


class WriteExcel:
    def __init__(self, sheet_name=None):
        """初始化写表格对象

        :param sheet_name: 写表格的sheet名,默认为cainiaoxiaobai
        """
        if sheet_name:
            self.sheetname = sheet_name
        else:
            self.sheetname = "cainiaoxiaobai"
        self.workbook = xlwt.Workbook()
        self.worksheet = self.workbook.add_sheet(sheetname=self.sheetname)

    def write_values(self, row, col, values):
        """向目标sheet的某个行列写入值
        :param row: 目标行
        :param col: 目标列
        :param values: 想要写入的值
        """
        self.worksheet.write(row, col, values)

    def save_file(self, filename=None):
        """保存表格

        :param filename: 保存的文件名
        """
        if filename:
            self.filename = filename
        else:
            self.filename = "菜鸟小白的学习分享.xls"
        self.workbook.save(self.filename)


class OpenExcel:

    def __init__(self, file_name=None, sheet_id=None):
        """初始化读取Excel表格

        :param file_name: 需要读取的表格名
        :param sheet_id: 需要读取的表格sheet
        """
        if file_name:

            self.file_name = file_name

            self.sheet_id = sheet_id

        else:

            self.file_name = '菜鸟小白.xlsx'

            self.sheet_id = 0

        self.data = self.get_data()

    def get_data(self):
        """读取表格数据

        :return: 返回读取的表格数据
        """
        data = xlrd.open_workbook(self.file_name)
        tables = data.sheets()[self.sheet_id]
        return tables

    def get_lines(self):
        """读取表格总行数

        :return: 返回表格总行数
        """
        tables = self.data
        return tables.nrows

    def get_cols(self):
        """读取表格总行数

        :return: 返回表格总列数
        """
        tables = self.data
        return tables.ncols


    def get_value(self, row, col):
        """读取表格中具体的行、列对应的值

        :param row: 目标行
        :param col: 目标列
        :return: 返回目标行、列的值
        """
        return self.data.cell_value(row, col)

这个模块支持的功能和参数作用直接见程序批注。使用方法就只需新建一个主程序进行调用就好了。

代码语言:javascript
复制
import ReadAndWriteExcel
openexcel = ReadAndWriteExcel.OpenExcel(file_name="菜鸟小白.xls",sheet_id=0)
write_excel = ReadAndWriteExcel.WriteExcel()

for i in range(1,openexcel.get_lines()):
    #将目标表格的姓名拷贝在整理的表格中
    write_excel.write_values(i, 0, openexcel.get_value(i,0))
    #将身份证号码中的生日提取出来
    birthday = openexcel.get_value(i,1)[6:13]
    #将生日写入到目标表格中
    write_excel.write_values(i,1,birthday)

write_excel.save_file(filename="菜鸟小白的学习分享.xls")

实现效果如下:

后面你们在遇到需要反复批量处理Excel表格的事情,就直接使用这个模块,自己建一个数据处理的主程序,一次搞定后面所有的重复工作。是不是非常地简单呢?

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-06-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 菜鸟小白的学习分享 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档