python处理excel文件

一、用openpyxl设置单元格格式

        下面的代码是像已经存在的excel中,写入数据,并且设置字体、颜色、边框、背景、合并单元格等格式

# -*- coding:utf-8 -*-
from openpyxl.styles import Border, Side, PatternFill, Font, Alignment
from openpyxl import load_workbook

file_name = 'sample.xlsx'
sheet_name = 'Sheet1'


def write_data(row=2, col=2, value=None):
    print('select sheet {}, input {} to cell X-{} Y-{}'.format(sheet_name, value, row, col))
    wb = load_workbook(file_name)  # 打开文件
    ws = wb[sheet_name]  # 选择sheet

    # 写入值
    ws.cell(row, col, value)
    
    # 读取值
    print(ws.cell(row,col).value)    

    # 设置边框
    side = Side(style="thin", )
    ws.cell(row, col).border = Border(top=side, bottom=side, left=side, right=side)

    # 设置背景
    fgcolor = 'D3D3D3'  # 灰色
    ws.cell(row, col).fill = PatternFill(patternType="solid", fgColor=fgcolor)

    # 设置字体颜色,加粗
    ws.cell(row, col).font = Font(name='等线', size=11)
    ws.cell(row, col).font = Font(color='FF3030', bold=True, )

    # 合并单元格
    ws.merge_cells(start_row=row, start_column=col, end_row=row, end_column=col + 1)

    # 设置对齐
    ws.cell(row, col).alignment = Alignment(horizontal='center', vertical='center')

    # 保存文件
    wb.save(file_name)


if __name__ == '__main__':
    write_data(value='你好')

效果:

 

二、新建、删除 sheet

    wb = Workbook()  # 创建一个工作簿
    wb.create_sheet('s1') # 新建sheet
    wb.create_sheet('s2')
    print(wb.sheetnames)
    wb.remove(wb['Sheet']) #删除sheet
    ws = wb['s1']
    ws.cell(1, 1, '888')

    wb.save('sample1.xlsx')

三、pandas数据查找

import pandas as pd


file_name = 'xx.xlsx'
sheet_name = 'Sheet1'

def read_nl(dire='wan-wifi', fre='5g', cha=36, bw=80, ip='ipv4', qos='off'):
    df = pd.read_excel(io=file_name, sheet_name=0)  # 读入数据
    df['Bw'] = df['Bw'].apply(pd.to_numeric) # 转化为数字
    df['Chan'] = df['Chan'].apply(pd.to_numeric)
    df['Tx'] = df['Tx'].apply(pd.to_numeric)
    df['Rx'] = df['Rx'].apply(pd.to_numeric)
    
    # 过滤每列的值
    myfilter = (df['Direction'] == dire) & (df['Fre'] == fre) & (df['Chan'] == cha) \
               & (df['Bw'] == bw) & (df['IpVer'] == ip) & (df['QoS'] == qos)

    res = df.loc[myfilter]
    print(res) 
    #    Fre  Chan    Bw Direction IpVer  QoS     Tx     Rx
    #10  5g  36.0  80.0  wan-wifi  ipv4  off  800.0  800.0
    
    if res.empty:
        print('未找到标准值')
    else:
        tmp = {
            'tx': int(res['Tx']),
            'rx': int(res['Rx'])
        }
        print(tmp)
        return tmp


if __name__ == '__main__':
    read_nl() # 输出 {'tx': 800, 'rx': 800}

四、excel中画折线图

# -*- coding:utf-8 -*-
from openpyxl.chart import LineChart, Reference
from openpyxl import load_workbook

file_name = 'sample.xlsx'
sheet_name = 'Sheet1'


def draw(title='picture'):
    s_row = 7    # 数据起始行
    min_col = 3  # 数据起始列
    length = 12  # 数据长度

    # 画折线图
    wb = load_workbook(file_name)
    ws = wb[sheet_name]

    chart = LineChart()
    chart.width = 16
    chart.height = 10
    chart.legend.position = 'b'

    # # 设置图表样式
    # chart.style = 26
    # 图的标题
    chart.title = title
    # y轴标题
    chart.y_axis.title = "销售额"
    # x轴标题
    chart.x_axis.title = "月份"

    # 数据来源
    da = Reference(worksheet=ws, min_row=s_row + 1, max_row=s_row + 2, min_col=min_col,
                   max_col=min_col + length)
    # 设定x轴
    categories = Reference(ws, min_row=s_row, max_row=s_row, min_col=min_col + 1,
                           max_col=min_col + length)
    # 设置图例为数据的第一列
    chart.add_data(da, from_rows=True, titles_from_data=True)
    chart.set_categories(categories)

    # 设置图片的位置
    ws.add_chart(chart, "D11" )

    s1 = chart.series[0]  # 第一条线
    s1.marker.symbol = "circle"  # 节点出的形状  三角形
    s1.graphicalProperties.line.width = 30000  # 设置线宽

    s1 = chart.series[1]  # 第2条线
    s1.marker.symbol = "circle"  # 节点出的形状
    s1.graphicalProperties.line.width = 30000  # 设置线宽

    wb.save(file_name)


if __name__ == '__main__':
    draw()

效果:

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值