zoukankan      html  css  js  c++  java
  • python 表格处理之xlrd,xlwt, openpyxl

    xlrd:
    import xlrd
    wb = xlrd.open_workbook('test.xlsx') #打开一个workbook

    wb.sheet_names() #获取所有的sheet name
    >>> wb.sheet_names()
    [u'Sheet1', u'Sheet2', u'Sheet3']

    wb.nsheets #获取sheet 数量
    >>> wb.sheet_names()
    [u'Sheet1', u'Sheet2', u'Sheet3']

    wb.sheets() #获取所有sheet 对象
    >>> wb.sheets()
    [<xlrd.sheet.Sheet object at 0x000000000503F390>, <xlrd.sheet.Sheet object at 0x000000000503F438>, <xlrd.sheet.Sheet object at 0x000000000503F4E0>]


    wb.sheet_by_name('Sheet1') #通过sheet名字查找
    >>> wb.sheet_by_name('Sheet1')
    <xlrd.sheet.Sheet object at 0x000000000503F390>

    wb.sheet_by_index(0) #通过index查找
    >>> wb.sheet_by_index(0)
    <xlrd.sheet.Sheet object at 0x000000000503F390>


    ws = wb.sheet_by_name('Sheet1')
    ws.nrows #总行数
    ws.ncols #总列数


    ws.row_values(0,3,4) #获取第1行,第3~4列的值(不包含4)
    ws.col_values(0,1,3) #获取第1列,第1~3行的值(不包含3)

    ws.row(0)[0].value #获取第0行,第1列的值
    ws.col(0)[0].value #获取第1列,第0行的值

    ws.cell(0,2).value #获取特定单元格的值

    xlwt:
    import xlwt
    wb = xlwt.Workbook(encoding='utf-8') #新建一个workbook
    wb.save('test.xlsx') #保存


    ws = wb.add_sheet('Sheet2') #新建一个sheet2
    ws.write(0,0,'value') #向第1行,第1列写入值

    style = xlwt.XFStyle() #新建一个style
    font = xlwt.Font() #新建一个font
    font.name = 'Times New Roman' #设定字体
    font.bold = true #黑体
    font.underline = ture #下划线
    font.italic = ture #斜体
    style.font = font #设定style

    ws.write(0,0,'value',sytle) #带样式写入值


    #日期
    style = xlwt.XFStyle()

    style.num_format_str = 'M/D/YY'
    # 其它的格式还有: D-MMM-YY, D-MMM, MMM-YY, h:mm, h:mm:ss, h:mm, h:mm:ss, M/D/YY h:mm, mm:ss, [h]:mm:ss, mm:ss.0

    ws.write(0, 0, datetime.datetime.now(), style)

    #公式
    ws.write(1, 1, xlwt.Formula('SUM(A1,B1)'))

    #超连接
    ws.write(0,0,xlwt.Formula('HYPERLINK(http://www.baidu.com)'))


    合并单元格
    ws.write_merge(0,1,0,3,'value') #合并第1行,第2行的第1列,第4列,并写入值‘value’

    对齐
    alignment = xlwt.Alignment() # 新建一个 Alignment alignment.horz = xlwt.Alignment.HORZ_CENTER
    # 其它的格式还有 HORZ_GENERAL, HORZ_LEFT, HORZ_CENTER, HORZ_RIGHT, HORZ_FILLED, HORZ_JUSTIFIED, HORZ_CENTER_ACROSS_SEL, HORZ_DISTRIBUTED

    alignment.vert = xlwt.Alignment.VERT_CENTER
    #其它的格式还有 May be: VERT_TOP, VERT_CENTER, VERT_BOTTOM, VERT_JUSTIFIED, VERT_DISTRIBUTED

    style = xlwt.XFStyle()
    style.alignment = alignment
    ws.write(0, 0, 'value', style)


    边框
    borders = xlwt.Borders()
    borders.left = xlwt.Borders.DASHED
    #DASHED:虚线;NO_LINE:没有;THIN实线
    style = xlwt.XFStyle()
    style.borders = borders
    worksheet.write(0, 0, 'value', style)

    背景颜色
    pattern = xlwt.Pattern()
    pattern.pattern = xlwt.Pattern.SOLID_PATTERN
    pattern.pattern_fore_colour = 0 #前景色
    pattern.pattern_back_colour = 1 #背景色
    style = xlwt.XFStyle()
    style.pattern = pattern
    ws.write(0, 0, 'value', style)

    openpyxl:

    from openpyxl import Workbook, load_workbook


    wb = load_workbook('test.xlsx')#打开一个workbook,如果是只读的操作,最好加上data_only = True,否则,有些用函数,例如sum计算出来的值就会显示公式而不是内容
    readonly = True,否则,打开大文件的时候会很慢

    wb = Workbook() #新建一个workbook

    wb.save('C:\test.xlsx') #保存

    #操作sheet
    ws = wb.active 或者ws.get_active_sheet() #调用正在运行的工作表
    wb.sheetnames #获取所有的sheet(列表)
    ws = wb.sheetnames[0] #索引获取sheet
    ws = wb.get_sheet_by_name('Sheet1') 同ws=wb['Sheet1'] #获取指定的sheet
    ws = wb.create_sheet('mysheet',0) #创建sheet,0指定位置,默认插在指定位置的后面
    wb.remove_sheet(wb['Sheet1']) #删除sheet
    ws.title = 'New Title' 设定sheet的名字
    source = wb['Sheet1']
    target = wb.copy_worksheet(source) #复制sheet


    操作单元格
    print wb['Sheet1']['A1'].value #打印Sheet1的A1单元格的值
    print wb.sheetnames #列表打印所有的sheet的name
    ws.rows 同 ws.iter_rows() #打印所有行(生成器)
    ws.columns 同ws.iter_cols()#打印所有列(生成器)
    ws['A'] #A那一列(元组)
    ws['A:C'] #A到C列
    ws[1]#第1行(元组)
    ws[1:3] #第1到3行(元组)
    ws.cell(row = 1,column = 1).value 同 ws[1][1].value #ws[i][j]这种方法j(列号)可以为负索引,且i,j都可以为切片,即[2:3]这种格式


    ws['A1'] = 'test'#特定单元写入值
    ws.cell(row = 4,column = 2,value=‘test’) ##特定单元格写入值
    ws.append([1,2,3])##可以用列表来写入

    公式
    ws['A4']  =  "=SUM(A1:A3)"

    合并单元格
    ws.merge_cells(start_row = 2,start_column = 1,end_row = 2,end_column = 2)

    插入图片
    from openpyxl.drawing.image import Image
    img = Image(r'. est.png')
    img_size=(50.50)
    img.width,img.height = img_size #设定图片大小
    ws.column_dimensions[A].width = 100
    ws.row_dimensions[1].height = 100   #修改第A列的宽度和第1行的高度
    ws.add_image(img,'A1')


    设置样式
    from openpyxl.styles import colors from openpyxl.styles import Font
    style = Font(name='宋体',color=colors.RED,italic=True,size=14) #colors='#AABBCC'也可以,Font的其它属性可以dir(Font)看到
    ws['A1'].font = font #设定指定单元格的样式
    col = ws.column_dimensions['A']
    col.font = style #设定列的样式
    row = ws.row_dimensions[1]
    row.font = style #设定行的样式

    颜色背景
    from openpyxl.sytels import PatternFill
    sytle = PatternFill('solid',fgColor='#AABBCC',bgColor='#DDEEFF')
    ws['A1'].fill = style #指定单元格颜色
    col = ws.column_dimensions['A']
    col.fill = style #设定列的颜色
    row = ws.row_dimensions[1]
    row.fill = style #设定行的颜色

    画图
    from openpyxl.chart import Series,LineChart,Reference
    chart = LineChart() #图标对象
    chart.title = '图标标题'
    chart.style = 8  #线的sytle
    data = Reference(ws,min_col=5,min_row=4,max_col=10,max_row=4) #数据
    serieobj = Series(data,title='测试') #series对象
    chart.appen(seriesobj) #series添加到chart中
    ws.add_chart(chart,'A6') #chart添加到sheet中

  • 相关阅读:
    Hadoop作业提交多种方案具体流程详解
    教你一步搭建Flume分布式日志系统
    Hadoop详细配置
    linux 运行springboot sqoop项目
    SQL+ 正则表达式
    SQL+ 正则表达式
    DB2中实现正则表达式
    DB2中实现正则表达式
    spring4整合cxf3
    spring4整合cxf3
  • 原文地址:https://www.cnblogs.com/xia-dong/p/11605985.html
Copyright © 2011-2022 走看看