zoukankan      html  css  js  c++  java
  • 处理Excel

    一、模块xlrd-读取excel

    1.1 打开excel

    import xlrd                                                 #导入xlrd模块
    myWorkbook=xlrd.open_workbook('D:\Daisy\testData.xls')    #打开excel

    1.2 打开sheet

    # 以下方法之一
    mySheets = myWorkbook.sheets()            #获取工作列表,获取表格中所有sheet,通过索引顺序获取 mySheet = mySheets[0] #所有sheet中的第一个sheet mySheet = myWorkbook.sheet_by_index(0)      #通过索引顺序获取,获取到表格中第一个sheet mySheet = myWorkbook.sheet_by_name(u'Sheet1')  #通过名称获取,获取到表格中的sheet名称为Sheet1的sheet

    1.3 读取 - 行/列数

    nrows = mySheet.nrows  #获取sheet中的行数
    ncols = mySheet.ncols   #获取sheet中的列数

    1.4 读取 - 一行/列数据

    myrow = mySheet.row_values(i)    #i为行数,从0开始计数,返回list对象
    mycol = mySheet.col_values(i)    #i为列数,从0开始计数,返回list对象

    1.5 读取 - 单元格数据

    mycellvalue = mySheet.cell(i,j).value           #获取单元格的数据,i为行数,j为列数
    myCellValue = mySheet.cell_value(i, j)           #直接获取单元格数据
    value=mySheet.cell_value(1,0).encode('utf-8')      #以utf-8格式读取

    二、模块xlwt-生成excel

    2.1 创建excel

    import xlwt                    #导入xlwt模块
    myWorkbook=xlwt.Workbook()     #创建工作表

    2.2 添加sheet

    mySheet = myWorkbook.add_sheet('Sheet'Name)    #添加工作表

    2.3 cell写入值

    mySheet.write(i, j, 'abcdefg')    #在i行j列写入值abcdefg

    2.4 保存excel

    myWorkbook.save('excelFile.xls')

    注意:xlrd和xlwt处理的是xls文件,单个sheet最大行数是65535,如果有更大需要的,建议使用openpyxl函数,最大行数达到1048576

    三、模块xlsxwriter-生成excel

    3.1 创建excel

    import xlsxwriter                              #导入模块
    workbook = xlsxwriter.Workbook('hello.xlsx')   #生成表名及路径

    3.2 添加sheet

    worksheet = workbook.add_worksheet()  #方法里可以写入sheet名字,但不能含中文

    3.3 按行写入

    worksheet.write_row('A1', ['a','b','c'], bold)  #从A1处开始写入一行列表,并加粗处理
    worksheet.write_row(i, j, ['a','c','d']) #从i行j列写入一行列表,行列都是从0开始的

    3.4 写入cell值

    worksheet.write('B5', 'hello world')
    worksheet.write(i, j, 'hello world')

    3.5 关闭表

    workbook.close()

    四、模块xlutils-更改表内容

    4.1 拷贝表

    import xlrd
    from xlutils.copy import copy
    wb = copy(xlrd.open_workbook('weng.xls'))  #拷贝表

    4.2 获取表单

    ws = wb.get_sheet(0)                   #获取第一个表单

    4.3 改变cell值

    ws.write(0, 0, 'changed!')             #改变(0,0)的值

    4.4 保存文件

    wb.save('weng.xls')                    #保存文件

    五、模块openpyxl-读取并修改excel

    5.1 获得/创建excel

    import openpyxl
    excel = openpyxl.Workbook()                     #创建新的excel,默认创建一个sheet
    excel = openpyxl.load_workbook("hello.xlsx")    #导入已经存在的excel

    5.2 获取sheet

    sheet = excel['sheetname']             #获取sheet
    sheet = excel.worksheets[0] #返回第一个sheet sheet = create_sheet(title,index) #创建一个空的表格,index=0插入到开头,返回sheet对象 sheet = excel.active #获取当前活跃的Worksheet,返回sheet对象
    excel.remove_sheet(excel["mysheet"]) #删除sheet excel.copy_worksheet(excel["mysheet"]) #在workook内拷贝表格 excel.worksheets #以列表形式返回所有worksheet,返回sheet对象列表 excel.sheetnames #获取工作簿中的表(列表),返回sheet名字列表
    sheet.title = "mysheet" #给sheet重命名

     5.3 获取行/列数

    max_row = sheet.max_row    #返回表格的最大行数
    min_row = sheet.min_row     #返回表格的最小行数
    max_col = sheet.max_column   #返回表格的最大列数
    min_col = sheet.min_column   #返回表格的最小列数

    5.4 按行/列获取数据

    col_content = sheet['C']     #返回C列的内容,也是元祖形式Cell对象
    col_content = sheet['A:C']   #返回A列到C列(包含C列)的Cell对象,元祖形式,一列一列取值
    row_content = sheet[10]      #返回第10行数据
    row_content = sheet[10:12]    #返回第10行到第12行数据
    all_row_obj = sheet.rows          #按行获取所有对象,返回对象格式:((x,x),(x,x),(x,x))
    all_col_obj = sheet.columns       #按列获取所有对象
    for i in all_row_obj:
        for j in i:
            print j.value
     
    iter_rows(min_row=1,max_row=4,min_col=2,max_col=4)       #按行获取固定数量的对象
    iter_columns(min_row=1,max_row=4,min_col=2,max_col=4)    #按列获取固定数量的对象
    for i in iter_rows(1,2,1,2)
        for j in i:
            print j.value

    5.5 表格末尾添加数据

    sheet.append([1,1,1])   #在表格最后一行后面添加一行数据

    5.6 获取cell值

    #单个cell的值
    sheet['A1'].value
    sheet.cell(row=1,column=2).value
    
    #多个cell的值
    cell_range = sheet['A1':'C2']    返回一个元祖,元祖内容是两行三列Cell对象,而非cell的value

    5.7 获取cell行/列号

    excel['sheet1'].cell(row=1,column=2).row    #返回行号1
    excel['sheet1'].cell(row=1,column=2).column  #返回列名B
    excel['sheet1'].cell(row=1,column=2).coordinate  #返回坐标B1

    5.8 给cell赋值

    sheet[“A3”] = "ABC" 
    sheet["A3"].value = "ABC"
    sheet.cell(row=1,column=2).value = "ABC" 

    5.9 保存excel

    excel.save("test.xlsx")

     5.10 设置样式

    a.设置字体

    from openpyxl.styles import Font
    font = Font(name=u'宋体',size = 11,bold=True,italic=True,strike=True,color='000000')
    sheet['A1'].font = font
    
    #name:字体名称
    #size:字体大小
    #bold:是否加粗
    #italic:是否倾斜
    #strike:是否有删除线
    #color:字体颜色

    b.背景填充

    from openpyxl.styles import PatternFill
    fill = PatternFill(fill_type = 'solid',start_color='FFFFFF',end_color='000000')
    sheet['B1'].fill = fill
    
    #fill_type:若没有特别指定类型,则后续的参数都无效
    #start_color: 前景色,
    #end_color: 背景色
    #纯色填充的话可以用'solid',然后令前景色为你需要的颜色即可,其他选择有'none'、'solid'、'darkDown'、'darkGray'、'darkGrid'、'darkHorizontal'、'darkTrellis'、'darkUp'、'darkVertical'、'gray0625'、'gray125'、'lightDown'、'lightGray'、'lightGrid'、'lightHorizontal'、'lightTrellis'、'lightUp'、'lightVertical'、'mediumGray'
     

    c.边框设置

    from openpyxl.styles import Border,Side
    right=Side(border_style='thin',color='000000')
    top=Side(border_style='thin',color='000000')
    bottom=Side(border_style='thick',color='000000'))
    left=Side(border_style='thin',color='000000'))
    border = Border(left=left,right=right,top=top,bottom=bottom)
    sheet['C1'].border = border
    
    #需要导入Border和Side两个函数
    #border_style的选择有'dashDot','dashDotDot','dashed','dotted','double','hair','medium','mediumDashDot','mediumDashDotDot','mediumDashed','slantDashDot','thick','thin'

    d.对齐方式

    from openpyxl.styles import Alignment
    align = Alignment(horizontal='left',vertical='center',wrap_text=True)
    sheet['D1'].alignment = align
    
    #horizontal代表水平方向,可以左对齐left,还有居中center和右对齐right,分散对齐distributed,跨列居中centerContinuous,两端对齐justify,填充fill,常规general
    #vertical代表垂直方向,可以居中center,还可以靠上top,靠下bottom,两端对齐justify,分散对齐distributed
    #另外还有自动换行:wrap_text,这是个布尔类型的参数,这个参数还可以写作wrapText
    #text_rotation = 0,   # 文本方向:0度

    e.表格保护

    from openpyxl.styles import Protection
    protection = Protection(locked=True,hidden = True)
    
    #合并单元格sheet.merge_cells('A2:A10')

    f.设置行高列宽

    sheet.row_dimensions[1].height = 20      #行高
    sheet.column_dimensions['A'].width = 20   #列宽

    5.11 冻结窗口

    冻结第一行那么设置A2为freeze_panes,如果要冻结第一列,freeze_panes取值为B1

    sheet.freeze_panes='A2'

    备注:chr(64) == 'A'   chr()函数中的参数为ascii码的值

    六、高级用法

    6.1 读取日期

    #方法一
    excel=xlrd.open_workbook('D:\DaisyGDCAuto\testfile\testData.xls')
    date_value=xlrd.xldate_as_tuple("cellvalue",excel.datemode)            #(1990,1,7,0,0,0)
    date(*date_value[:3])                                              #datetime.date(1990,1,7)
    date(*date_value[:3]).strftime('%Y%m%d')                             #'1990/01/07'
    
     
    #方法二
    #python读取excel中单元格的内容返回有5种类型的数据ctype
    #0:empty 1:string 2:number 3:date 4:boolean  5:error
    #即date的ctype=3
    
    if (sheet.cell(row,col).ctype == 3):
      date_value = xlrd.xldate_as_tuple(sheet.cell_value(1,3),excel.datemode)
      date_tmp = date(*date_value[:3]).strftime('%Y/%m/%d')

    6.2 读取合并单元格的内容

    只能获取合并单元格的第一个cell的行列索引,才能读到值

    读取好朋友:sheet2.col_values(4)[1]

    读取暂无:sheet2.row_values(7)[2]

    获取合并的单元格:

    读取文件的时候需要将formatting_info参数设置为True,默认是False

    workbook = xlrd.open_workbook(r'F:demo.xlsx',formatting_info=True)
    sheet2 = workbook.sheet_by_name('sheet2')
    sheet2.merged_cells          #返回[(7, 8, 2, 5), (1, 3, 4, 5), (3, 6, 4, 5)],(7, 8, 2, 5)的意思是第7行到7行,第2列到第4列合并为‘暂无’。
    sheet2.cell_value(7,2)       #返回(7, 8, 2, 5)合并的内容 ‘暂无’

    6.3 背景颜色

    workbook = xlsxwriter.Workbook('hello.xlsx')
    formatHeader=workbook.add_format()#添加一种格式
    formatHeader.set_bg_color("yellow") #背景颜色变成黄色
    formatHeader.set_bold() #把字体加粗
    formatHeader.set_font_color('blue')#字体颜色变为蓝色
    formatHeader.set_align("center")#文本居中
    formatHeader.set_align("vcenter")
    worksheet.write_row(0,0,[cat1,cat2,cat3],formatHeader)
    worksheet.freeze_panes(1,0)
  • 相关阅读:
    数据结构 括号法二叉树转化为二叉链表链式存储结构
    数据结构 二叉树的非递归遍历算法再回顾
    C语言算法 设计一个算法,将数组m个元素循环右移。要求算法空间复杂度为O(1)
    JAVA 递归输出所有可能的出栈序列
    C语言数据结构 头尾指针数组的综合应用
    C语言 重写strcmp函数
    C语言数据结构 判断出栈序列合法性
    PMD执行Java代码分析的原理
    Redis缓存和MySQL数据一致性方案详解
    mybtais 源码分析
  • 原文地址:https://www.cnblogs.com/zz27zz/p/9777639.html
Copyright © 2011-2022 走看看