python操作Excel方法汇总(二)

本篇主要是对于xlwings模块的应用,xlwings是功能较为全面的一个模块,可以进行读、写、修改格式等操作,而且对于(.xls)与(.xlsx)都适用,还与matplotlib等模块可以交互。
本节我们只记录基本操作,更详细的内容可参阅官方文档:
xlwings官方文档

结构示意图

在这里插入图片描述
使用xlwings时,按照以上结构依次进行操作,即app(程序)——book(工作簿)——sheet(工作表)——range(某些单元格)

创建新文档,写入内容,保存退出

文件夹初始状态:
在这里插入图片描述
执行以下代码:

import xlwings

#打开程序(只打开不新建):
app = xlwings.App(visible=True,add_book=False)

#创建工作簿:
wb = app.books.add()

#创建工作表:
sheet = wb.sheets.add('mysheet')

#在A1单元格输入:1;在B1单元格输入:hello;在C1单元格输入:哈哈
sheet.range('A1').value = 1
sheet.range('B1').value = 'hello'
sheet.range('C1').value = '哈哈'

#在第十一行输入:1-10
list1 = [i for i in range(1,11)]
sheet.range('A11').value = list1

#在第四列输入:11-20
list2 = [i for i in range(11,21)]
sheet.range('D1').options(transpose=True).value = list2

#在A2:C3区域输入
list3 = [[1,2,3],[4,5,6]]
sheet.range('A2').value = list3


#保存:
wb.save(r'D:\programming\Python learn\excel有关\xlwings创建.xls')

#关闭工作簿:
wb.close()

#退出程序:
app.quit()

可见文件夹已存入新文件:
在这里插入图片描述
打开后如图:
在这里插入图片描述

打开已有表格文件,读取、修改数据

import xlwings

#打开程序(只打开不新建):
app = xlwings.App(visible=True,add_book=False)

#打开已存在的文件:
wb = app.books.open(r'D:\programming\Python learn\excel有关\xlwings创建.xls')

#选取工作表:
sheet = wb.sheets['mysheet']#或通过索引选取

#获取第十一行内容:
rng1 = sheet.range('A11').expand('right')
n1 = rng1.columns.count#有效列数
print(rng1.value,'\n',n1)

#获取第四列内容:
rng2 = sheet.range('D1').expand('down')
n2 = rng2.rows.count
print(rng2.value,'\n',n2)

#获取A2:C3区域内容:
rng3 = sheet.range('A2:C3')
print(rng3.value)

#在A5、B6、C7单元格写入:21,22,23
for i in range(3):
    sheet[i+4,i].value = i+21#单元格另一种表示方法

#保存:
wb.save()

#关闭工作簿:
wb.close()

#退出程序:
app.quit()

输出结果:
在这里插入图片描述
打开之前的文件:
在这里插入图片描述
可以看到新写入了21-23

修改单元格格式

rng = sheet.range('A1')
rng.color = (0,0,255)#背景色(RGB)
rng.column_width = 15#列宽
rng.row_height = 20#行高

sheet.range('D12').formula = '=SUM(D1:D11)'#利用公式计算

sheet.range('B6').clear_contents()#清除内容,清除格式和内容为clear()

'''
一些其他操作:
rng.columns.autofit()# 所有列宽度自适应
rng.rows.autofit()# 所有行宽度自适应
rng.offset(row_offset=0,column_offset=0)# range平移
rng.resize(row_size=None,column_size=None)#range进行resize改变range的大小
'''

在之前的表格基础上进行以上操作之后:
在这里插入图片描述

将matplotlib图像插入表格

import xlwings
import numpy as np
import matplotlib.pyplot as plt


app = xlwings.App(visible=True,add_book=False)
wb = app.books.add()
sheet = wb.sheets.add('picture')

x = np.arange(0,5,0.1)
y = 2*x+np.random.random(x.shape[0])

pic = plt.figure()
plt.scatter(x,y,c='r')
plt.title('xlwings and matplotlib')

sheet.pictures.add(pic,left=100,top=100)

wb.save(r'D:\programming\Python learn\excel有关\matplotlib交互.xls')
wb.close()
app.quit()

在这里插入图片描述

xlwings生成图表

import xlwings

app = xlwings.App(visible=True,add_book=False)
wb = app.books.add()
sheet = wb.sheets.add('picture')

sheet.range('A1').value = [['月份','数量'],
                           ['1月',12],
                           ['2月',19],
                           ['3月',26],
                           ['4月',20],
                           ['5月',33],
                           ['6月',42],
                           ['7月',56],
                           ['8月',44],
                           ['9月',34],
                           ['10月',30],
                           ['11月',24],
                           ['12月',11]]


chart1 = sheet.charts.add(100,100)#添加图表,输入图表位置
chart1.set_source_data(sheet.range('A1').expand())#数据区域
chart1.chart_type = 'column_clustered'#图表类型
chart1.api[1].SetElement(2)#显示标题
chart1.api[1].ChartTitle.Text = 'column_clustered'#标题内容

wb.save(r'D:\programming\Python learn\excel有关\生成图表.xls')
wb.close()
app.quit()

在这里插入图片描述
图表类型从官方文档中查看有以下若干种:
3d_area, 3d_area_stacked, 3d_area_stacked_100, 3d_bar_clustered, 3d_bar_stacked, 3d_bar_stacked_100, 3d_column, 3d_column_clustered, 3d_column_stacked, 3d_column_stacked_100, 3d_line, 3d_pie, 3d_pie_exploded, area, area_stacked, area_stacked_100, bar_clustered, bar_of_pie, bar_stacked, bar_stacked_100, bubble, bubble_3d_effect, column_clustered, column_stacked, column_stacked_100, combination, cone_bar_clustered, cone_bar_stacked, cone_bar_stacked_100, cone_col, cone_col_clustered, cone_col_stacked, cone_col_stacked_100, cylinder_bar_clustered, cylinder_bar_stacked, cylinder_bar_stacked_100, cylinder_col, cylinder_col_clustered, cylinder_col_stacked, cylinder_col_stacked_100, doughnut, doughnut_exploded, line, line_markers, line_markers_stacked, line_markers_stacked_100, line_stacked, line_stacked_100, pie, pie_exploded, pie_of_pie, pyramid_bar_clustered, pyramid_bar_stacked, pyramid_bar_stacked_100, pyramid_col, pyramid_col_clustered, pyramid_col_stacked, pyramid_col_stacked_100, radar, radar_filled, radar_markers, stock_hlc, stock_ohlc, stock_vhlc, stock_vohlc, surface, surface_top_view, surface_top_view_wireframe, surface_wireframe, xy_scatter, xy_scatter_lines, xy_scatter_lines_no_markers, xy_scatter_smooth, xy_scatter_smooth_no_markers
比较常用的即折线图、散点图、条形图、饼形图等等。

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值