您的位置:

python中excel表操作的简单介绍

本文目录一览:

Python操作Excel

因为工作上的需要,最近经常用Python对报表做Excel导入导出,特此做个笔记,方便日后查看。

首先我选择了Python-Excel下的xlrd和xlwt。需要注意的是,xlwt只支持生成xls,暂时还不支持xlsx。

读取主要是用到这两个方法,我想到就继续补充,更多用法请查阅官方文档

表格样式设置有XFStyle和easyxf两种方式

列宽在Excel里面用字符宽带来表示。xlwt以字符'0'的1/256宽为一个单位,默认表格宽度为2962,大致相当于11个字符宽度。设置Excel的列宽就大致等于,字符宽度 * 256 + 182 (有待继续考证,精度目前还行)

行高再Excel里面一般用磅来表示,磅 * 20 即是xlwt的数值。字体的大小也是用磅来设置。

设置页面方向

使用num_format_str来设置单元格类型。

特别是遇到时间的时候,Excel会自动转为May-2017这种格式,这时候就要设置为文本类型,防止自动转换

python如何操作当前已经打开的excel?

读取一个Excel的基本流程

1. 双击打开一个Excel文件

2. 选择sheet

3. 对sheet里面的东西进行操作

在python中我们使用第三方模块 openpyxl模块操作Excel

ps:这个模块不是python自带的 是第三方模块需要我们下载的

进入终端输入: pip install openpyxl

如果想要下载快点:百度搜索 python第三方源

from openpyxl import load_workbook

# 1. 打开Excel文件

workbook = load_workbook("p1.xlsx")

# 2. 选择sheet

# 2.1 获取所有sheet

# print(workbook.sheetnames)

# 2.2 选择sheet

sheet = workbook["Sheet1"]

print(sheet.max_row) # 最大行号

print(sheet.max_column) # 最大列号

# 2.3 我们选择了sheet后就可以去操作数据了

# cell = sheet.cell(1, 1) # 获取到单元格

# print(cell.value)

sheet 相关操作

from openpyxl import load_workbook

# 1. 打开Excel文件

workbook = load_workbook("p1.xlsx")

# 2. 选择sheet

# 2.1 获取所有sheet

# print(workbook.sheetnames)

# 2.2 选择sheet

# sheet = workbook["Sheet1"]

# 2.3 基于索引的方式获取sheet

# sheet = workbook.worksheets[0]

# 3. 获取到所有的sheet

# for name in workbook.sheetnames:

# sheet = workbook[name]

# cell = sheet.cell(1, 1)

# print(cell.value)

读单元格的数据

from openpyxl import load_workbook

# 1. 打开Excel文件

workbook = load_workbook("p1.xlsx")

# 2 获取sheet

sheet = workbook.worksheets[0]

# 获取到第N行第N列的单元格

# cell = sheet.cell(1, 2)

# print(cell.value)

# 获取到某个单元格

# cell = sheet['A2']

# print(cell.value)

# print()

# for cell in sheet[1]: # 获取到第一行的内容

# print(cell.value)

# 获取到所有的行的数据 获取到一列的值

# for row in sheet.rows:

# print(row[0].value)

# 获取到所有的列的数据 获取到一行的值

for col in sheet.columns:

print(col[0].value)

写Excel

# 在Excel中想要写文件 大致可以分为两种

# 1. 在原有的Excel的基础上写内容

# 2. 在一个新的Excel里面写内容

1. 打开Excel表格

2. 找到单元格 修改写入内容

3. 保存

# from openpyxl import load_workbook

#

# # 1. 打开Excel文件

# workbook = load_workbook("p1.xlsx")

# # 2 获取sheet

# sheet = workbook.worksheets[0]

#

# # 获取到第N行第N列的单元格

# # cell = sheet.cell(1, 2)

# # print(cell.value)

#

# # 获取到某个单元格

#

# # cell = sheet['A2']

# # print(cell.value)

#

# # print()

# # for cell in sheet[1]: # 获取到第一行的内容

# # print(cell.value)

#

#

# # 获取到所有的行的数据 获取到一列的值

# # for row in sheet.rows:

# # print(row[0].value)

#

# # 获取到所有的列的数据 获取到一行的值

# for col in sheet.columns:

# print(col[0].value)

# from openpyxl import workbook

# wb = workbook.Workbook() # 创建一个Excel会默认有一个sheet 就叫 Sheet

# 1. 修改sheet名称

# sheet = wb.worksheets[0]

# sheet.title = '数据集'

# wb.save('p2.xlsx')

# 2. 创建一个新的sheet 还可以设置颜色

# sheet = wb.create_sheet('工作计划', 1)

# sheet.sheet_properties.tabColor = 'FFB6C1'

# wb.save('p2.xlsx')

# 3. copy sheet

# sheet = wb.create_sheet('工作计划')

# sheet.sheet_properties.tabColor = 'FFB6C1'

#

# new_sheet = wb.copy_worksheet(wb['Sheet'])

# new_sheet.title = '新的计划'

# wb.save('p2.xlsx')

# print(wb.sheetnames)

# sheet = wb.worksheets[0]

# cell = sheet.cell(1, 1)

# cell.value = '哈哈哈'

#

# wb.save('p2.xlsx')

from openpyxl import load_workbook

# 1. 打开Excel文件

workbook = load_workbook("p2.xlsx")

# 2 获取sheet

sheet = workbook.worksheets[0]

# 1. 获取某个单元格 修改值

# cell = sheet.cell(1, 1)

# cell.value = '哈哈哈'

# wb.save('p2.xlsx')

# 2. 获取某个单元格 修改值

# sheet['B3'] = '光'

# workbook.save('p2.xlsx')

# cell_list = sheet["B2": 'C3']

# for row in cell_list:

# for cell in row:

# cell.value = '新的值'

# workbook.save('p1.xlsx')

for row in sheet.iter_rows(min_row=5, min_col=1, max_col=7, max_row=10):

for cell in row:

cell.value = 'oo'

workbook.save('p1.xlsx')

r row in sheet.iter_rows(min_row=5, min_col=1, max_col=7, max_row=10):

for cell in row:

cell.value = ‘oo’

workbook.save(‘p1.xlsx’)

Python操作Excel实现自动化报表

Python操作Excel实现自动化报表

安装

python -m pip install xlrd xlwt xlutils。

基本用法

1.从指定文件路径读取excel表格,进行一定操作,然后保存到另一个excel文件:result.xlsx

import xlwt

import xlrd

from xlutils.copy import copy

import pandas as pd

from pandas import DataFrame,Series

import os

os.chdir('./')

# 从指定文件路径读取excel表格

df = pd.read_excel('D:/mypaper/data/data.xlsx')

# 查看df内容

# 根据age算出出生年份,增加一列

import datetime

import os

year = datetime.datetime.now().year#获取当前系统时间对应的年份

df['birth'] = year-df['age']

df.to_excel('result.xlsx')#保存到当前工作目录,可以用os.getcwd()查看

#查看下此时df的内容,可以看到已经生成了birth这一列。

2.单元格操作

# 定义方法:读取指定目录下Excel文件某个sheet单元格的值

def excel_read(file_path,table,x,y):

     data = xlrd.open_workbook(file_path)

     table = data.sheet_by_name(table)

     return table.cell(y,x).value

# 定义方法:单元格值及样式

write_obj_list = []

def concat_obj(cols,rows,value):

    write_obj_list.append({'cols':cols,'rows':rows,'value':value,\

'style':xlwt.easyxf('font: name 宋体,height 280;alignment: horiz centre')})

# 定义方法:合并单元格

def merge_unit(srows,erows,scols,ecols,value):

    write_obj_list.append({'id':'merge','srows':srows,'erows':erows,'scols':scols,\

'ecols':ecols,'value':value,'style':xlwt.easyxf('font: name 宋体,height 280;alignment: horiz centre')})

# 定义方法:更新excel

excel_update(file_path,write_obj_list,new_path):

    old_excel = xlrd.open_workbook(file_path, formatting_info=True)

    #管道作用

    new_excel = copy(old_excel)

    '''

    通过get_sheet()获取的sheet有write()方法

    '''

    sheet1 = new_excel.get_sheet(0)

    '''

    1代表是修改第几个工作表里,从0开始算是第一个。此处修改第一个工作表

    '''

    for item in write_obj_list:

        if 'id' not in item.keys():

            if 'style' in item.keys():

                sheet1.write(item['rows'], item['cols'], item['value'],item['style'])

            else:

                sheet1.write(item['rows'], item['cols'], item['value'])

        else:

            if 'style' in item.keys():

                sheet1.write_merge(item['srows'],item['erows'],item['scols'], item['ecols'], item['value'],item['style'])

            else:

                sheet1.write_merge(item['srows'],item['erows'],item['scols'], item['ecols'], item['value'])

    '''

   如果报错 dict_items has no attributes sort

    把syle源码中--alist.sort() 修改为---- sorted(alist) 

    一共修改2次

    '''

    new_excel.save(file_path)

#参数详解

# srows:合并的起始行数

# erows:合并的结束行数

# scols:合并的起始列数

# ecols:合并的结束列数 

# value:合并单元格后的填充值

# style:合并后填充风格:

#     font: name 宋体

#     height 280;

#     alignment: horiz centre

#     ... 与excel操作基本保持一致

(注意:该方法仅仅是将需要直行的动作保存到一个list中,真正的动作还未执行,执行动作是发生在excel_update方法中)

最终调用excel_update方法,传入每个单元格需要进行的操作和填充值的write_obj_list以及文件保存路径file_path,就可以在当前工作目录下生成想要的Excel结果文件。

注意:

1.write_obj_list支持用户自定义

2.write_obj_list也可以是根据excel_read方法读取现有待修改的excel文件(可以维持原有表格的格式)而生成

End