python 操作excel坐标_Python操作Excel

本文详细介绍了如何使用Python的openpyxl模块进行Excel操作,包括读取Excel、单元格操作、写入Excel、修改sheet以及设置单元格样式。还提供了一个读取.ini配置文件并写入Excel的综合实例。
摘要由CSDN通过智能技术生成

Python操作Excel

需要安装第三方模块,这里选用openpyxl(适用于最新的xlsx格式)

pip install openpyxl

读Excel

1.sheet相关操作

from openpyxl import load_workbook

wb = load_workbook("pdata.xlsx")

# 1.获取所有sheet名称

print(wb.sheetnames)

# 2.选择sheet,基于名称

sheet = wb["Sheet1"]

cell = sheet.cell(2,1) # 获取指定单元格 (行,列)

print(cell.value) # 获取指定单元格的值

# 3.选择sheet,基于索引

sheet = wb.worksheets[0]

cell = sheet.cell(2,1) # 获取指定单元格

print(cell.value) # 获取指定单元格的值

2.单元格操作

from openpyxl import load_workbook

wb = load_workbook("pdata.xlsx")

sheet = wb.worksheets[0]

# 1.获取某个单元格

# cell = sheet.cell(2,1) # 获取指定单元格,方式一

cell = sheet['A2'] # 获取指定单元格,方式一

print(cell.value) # 取内容

print(cell.style) # 样式

print(cell.alignment) # 对齐方式

# 2.获取第N行所有单元格数据

for cell in sheet[1]:

print(cell.value)

# 3.获取所有行(某一列)的单元格数据

for row in sheet.rows:

print(row[0].value,row[1].value)

# 4.获取所有列(某一行)的单元格数据

for col in sheet.columns:

print(col[0].value,col[1].value)

# 5.有合并单元格,值为左上角,其他为None

写Excel

1.原文件基础上写

from openpyxl import load_workbook

wb = load_workbook("pdata.xlsx")

sheet = wb.worksheets[0]

cell = sheet.cell(2,1)

cell.value = '新接口' # 直接赋予新值

wb.save("pdata.xlsx") # 保存时文件需要关闭状态

2.新建文件写

from openpyxl import workbook

wb = workbook.Workbook() # 创建excel默认会创建一个sheet

sheet = wb.worksheets[0]

cell = sheet.cell(2,1)

cell.value = '新接口' # 直接赋予值

wb.save("pdata1.xlsx") # 保存时文件需要关闭状态

3.操作sheet

# 修改sheet名称

sheet = wb.worksheets[0]

sheet.title = '个人计划'

wb.save("pdata1.xlsx")

# 新建sheet并设置颜色

sheet = wb.create_sheet("新计划",0)

sheet.sheet_properties.tabColor = '3c7d0d'

wb.save("pdata1.xlsx")

# 默认打开sheet

wb.active = 0

wb.save("pdata1.xlsx")

# 拷贝sheet

new_sheet = wb.copy_worksheet(wb["个人计划"])

wb.save("pdata1.xlsx")

# 删除sheet

del wb["个人计划"]

wb.save("pdata1.xlsx")

4.写单元格操作

from openpyxl import workbook

wb = workbook.Workbook() # 创建excel默认会创建一个sheet

sheet = wb.worksheets[0]

# 修改某一单元格

cell = sheet.cell(2,1)

cell.value = '开始' # 直接赋予值 或者sheet["A1"] = '开始'

# 修改某些单元格

cell_list = sheet['B3':'C4']

for row in cell_list:

for cell in row:

cell.value = '填充'

wb.save("pdata2.xlsx")

# 插入行列

sheet.insert_rows(idx=5,amount=10)

sheet.insert_cols(idx=3,amount=2)

wb.save("pdata2.xlsx")

# 写入公式

sheet = wb.workbooks[0]

sheet["D3"] = "=sum(B3,C3)" # 或者 sheet["D3"] = "=B3+C3"

wb.save("pdata2.xlsx")

设置单元格风格

openpyxl的单元格样式由6种属性决定,每一种都是一个类

font(字体类):字号、字体颜色、下划线等

fill(填充类):颜色等

border(边框类):设置单元格边框

alignment(位置类):对齐方式

number_format(格式类):数据格式

protection(保护类):写保护

① 需要导入的类

from openpyxl.styles import Font, colors, Alignment, Border, PatternFill

② 字体

微软雅黑24号,加粗斜体,字体颜色红色

font = Font(name='微软雅黑', size=24, italic=True, color=colors.RED, bold=True) sheet['A1'].font = font

③ 背景颜色

sheet['A1'].fill = PatternFill('solid',fgColor='b6eafb')

④ 对齐方式

cell的属性aligment,这里指定垂直居中和水平居中。除了center,还可以使用right、left等等参数。

设置A1中的数据垂直居中和水平居中

sheet['A1'].alignment = Alignment(horizontal='center', vertical='center')

⑤ 设置边框

side = Side(style='thin',color='000000') # 边框样式与颜色

border = Border(top=side,bottom=side,left=side,right=side)

sheet['A1'].border = border

⑥ 设置行高和列宽

设置第1行行高

sheet.row_dimensions[1].height = 20

设置A列列宽

sheet.column_dimensions['A'].width = 25

⑦ 合并和拆分单元格

以合并区域的左上角的那个单元格为基准,覆盖其他单元格为一个单元格。

相反,拆分单元格后将这个大单元格的值返回到原来的左上角位置。

合并单元格, 保留左上角数据,其余值丢弃

sheet.merge_cells('B1:G1') # 合并一行中的几个单元格

sheet.merge_cells('A1:C3') # 合并一个矩形区域中的单元格

合并后只可以往左上角写入数据,也就是区间中:左边的坐标。

拆分单元格的代码,拆分后,左上角保留原值。

sheet.unmerge_cells('A1:C3')

综合实例

读取.ini文件配置信息,并整理写入Excel(此处使用了MySQL的配置文件)

import os

import configparser

from openpyxl import workbook

from openpyxl.styles import Font, Alignment, Border, PatternFill,Side

# 文件路径处理

base_dir = os.path.dirname(os.path.abspath('my.ini'))

file_path = os.path.join(base_dir,'my.ini')

out_file_path = os.path.join(base_dir,'my.xlsx')

wb = workbook.Workbook()

del wb['Sheet']

# 解析ini格式文件

config = configparser.ConfigParser()

config.read(file_path,encoding='utf-8')

# 循环获取节点

for section in config.sections():

sheet = wb.create_sheet(section)

# 边框和居中

side = Side(style='thin',color='000000')

border = Border(top=side,bottom=side,left=side,right=side)

align = Alignment(horizontal='center',vertical='center')

sheet.column_dimensions['A'].width = 30

sheet.column_dimensions['B'].width = 30

# 表头

title_dict = {"A1":"键","B1":"值"}

for position,text in title_dict.items():

cell = sheet[position]

# 设置值

cell.value = text

# 设置居中

cell.alignment = align

# 设置背景色

cell.fill = PatternFill('solid',fgColor='b6eafb')

# 设置字体颜色

cell.font = Font(name='微软雅黑',color="FFFFFF")

# 设置边框

cell.border = border

row_index = 2

# 读取此节点下所有键值对,并写入sheet

for group in config.items(section): # ('port', '3306')

print(group)

for col,text in enumerate(group,1):

cell = sheet.cell(row_index,col)

# 设置值

cell.value = text

# 设置居中

cell.alignment = align

# 设置边框

cell.border = border

row_index+=1

wb.save(out_file_path)

('port', '3306')

('default-character-set', 'utf8')

('port', '3306')

('basedir', 'E:/MySQL/MySQL Server 5.7/')

('datadir', 'D:/MySQL/MySQL Server 5.7/Data')

('character-set-server', 'utf8')

('default-storage-engine', 'INNODB')

('sql-mode', '"STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"')

('general-log', '0')

('general_log_file', '"ZHAN.log"')

('slow_query_log_file', '"ZHAN-slow.log"')

('long_query_time', '10')

('log-error', '"ZHAN.err"')

('relay_log', '"ZHAN-relay"')

('server-id', '1')

('report_port', '3306')

('lower_case_table_names', '1')

('secure-file-priv', '"D:/MySQL/MySQL Server 5.7/Uploads"')

('myisam_max_sort_file_size', '100G')

('sync_relay_log', '10000')

('sync_relay_log_info', '10000')

('自定义参数', '自定义值')

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值