Python 入门之excel数据分离成多个sheet

最近老大发了疯一样给我布置很多坑一样的任务,郁闷至极,今天这是一个非常简单的操作excel的示例。
假如你全公司的数据都在一张表格中 ,那么请用这个把它们按部门分离出来吧。

用python写一些小工具确实是简单啊。

  1. optionParser,继上一节的Entry之后,你就已经知道了怎样输入你的文本,那么通过命令行呢,这里的optionParser就是实现了这个目的。
    使用optionparser模块来解析

optionparser的执行过程:
导入optionparser : from optparse import OptionParser
构造optionparser的对象:parser = OptionParser()
往optionparser对象中增加option :parser.add_option()
调用optionparser的解析函数:(options, args) = parser.parse_args()
在options中使用解析到的options,在args中使用其他的args。

from optparse import OptionParser
import sys
import xlrd,xlwt

STRING = '部门' #按部门分离
TITLE_ROW = 0
def split_file(filename):
    workbook = xlrd.open_workbook(filename)#
    sheet = workbook.sheet_by_index(1) #通过index选择你需要分割的那个sheet    
    Title=sheet.row_values(TITLE_ROW) #
    print(Title)
    index = Title.index(STRING)#选择所需要的那一列数据
    print(index)
    all= sheet.col_values(index)
    department = list(set(all))
    department.remove(STRING) #删除Title这一个元素得到的是所有的部门了
    print(department)
    wb_result=xlwt.Workbook()
    for sub_dt in department:
        row_i =0 
        sheet_subdt=wb_result.add_sheet(sub_dt,cell_overwrite_ok=True)
        for j in range(sheet.ncols):
            sheet_subdt.write(row_i,j,sheet.row_values(TITLE_ROW)[j])
        row_i=row_i+1
        for i in range(1,sheet.nrows): #第1行是Titile,从第2行开始
            if sheet.row_values(i)[index] == sub_dt:
                for j in range(sheet.ncols):
                    sheet_subdt.write(row_i,j,sheet.row_values(i)[j])
                row_i=row_i+1
            
    wb_result.save('result-split.xls')
        
def main():
    parser = OptionParser(description="split your excel sheet to many by keywords.", usage="%prog [-f]", version="%prog 1.0")
    parser.add_option('-f', '--filename', dest='filename',
                      help="the filename that you need to split.")
    options, args = parser.parse_args(args=sys.argv[1:])
    stock = split_file(options.filename)
if __name__=='__main__':
    main()
    原文作者:python
    原文地址: https://segmentfault.com/a/1190000008070398
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞