1.一维数据
python的列表,可以和Excel中的行列进行数据交换,python中的一维列表,在Excel中默认为一行数据。
import xlwings as xw
sht=xw.sheets.active
# 将1,2,3分别写入了A1,B1,C1单元格中
sht.range('A1').value=[1,2,3]
# 将A1,B1,C1单元格的值存入list1列表中
list1=sht.range('A1:C1').value
# 将1,2,3分别写入了A1,A2,A3单元格中
sht.range('A1').options(transpose=True).value=[1,2,3]
# 将A1,A2,A3单元格中值存入list1列表中
list1=sht.range('A1:A3').value
2.二维数据
python的二维列表,可以转换为Excel中的行列。二维列表,即列表中的元素还是列表。在Excel中,二维列表中的列表元素,代表Excel表格中的一列。例如:
# 将a1,a2,a3输入第一列,b1,b2,b3输入第二列
list1=[[‘a1’,'a2','a3'],['b1','b2','b3']]
sht.range('A1').value=list1
# 将A1:B3的值赋给二维列表list1
list1=sht.range('A1:B3').value
3.Excel中区域的选取表格
# 选取第一列
rng=sht. range('A1').expand('down')
rng.value=['a1','a2','a3']
想看更多视频教程课加任姐姐VX,免费领取哦
# 选取第一行
rng=sht.range('A1').expand('right')
rng=['a1','b1']
# 选取表格
rng.sht.range('A1').expand('table')
rng.value=[[‘a1’,'a2','a3'],['b1','b2','b3']]
import xlwings as xw
app = xw.App()
wb = app.books.active
sht = wb.sheets.active
chart = sht.charts.add(100, 10) # 100, 10 为图表放置的位置坐标。以像素为单位。
chart.set_source_data(sht.range('A1').expand()) # 参数为表格中的数据区域。
# chart.chart_type = i # 用来设置图表类型,具体参数件下面详细说明。
chart.api[1].ChartTitle.Text = i # 用来设置图表的标题。
示例代码:
import xlwings as xw
app = xw.App()
wb = app.books.active
sht = wb.sheets.active
# 生成图表的数据
sht.range('A1').value = [['时间', '数量'], ['1日', 2], ['2日', 1], ['3日', 3]
, ['4日', 4], ['5日', 5], ['6日', 6]]
"""图表类型参数,被注释的那几个,无法生成对应的图表"""
dic = {
'3d_area': -4098,
'3d_area_stacked': 78,
'3d_area_stacked_100': 79,
'3d_bar_clustered': 60,
'3d_bar_stacked': 61,
'3d_bar_stacked_100': 62,
'3d_column': -4100,
'3d_column_clustered': 54,
'3d_column_stacked': 55,
'3d_column_stacked_100': 56,
'3d_line': -4101,
'3d_pie': -4102,
'3d_pie_exploded': 70,
'area': 1,
'area_stacked': 76,
'area_stacked_100': 77,
'bar_clustered': 57,
'bar_of_pie': 71,
'bar_stacked': 58,
'bar_stacked_100': 59,
'bubble': 15,
'bubble_3d_effect': 87,
'column_clustered': 51,
'column_stacked': 52,
'column_stacked_100': 53,
'cone_bar_clustered': 102,
'cone_bar_stacked': 103,
'cone_bar_stacked_100': 104,
'cone_col': 105,
'cone_col_clustered': 99,
'cone_col_stacked': 100,
'cone_col_stacked_100': 101,
'cylinder_bar_clustered': 95,
'cylinder_bar_stacked': 96,
'cylinder_bar_stacked_100': 97,
'cylinder_col': 98,
'cylinder_col_clustered': 92,
'cylinder_col_stacked': 93,
'cylinder_col_stacked_100': 94,
'doughnut': -4120,
'doughnut_exploded': 80,
'line': 4,
'line_markers': 65,
'line_markers_stacked': 66,
'line_markers_stacked_100': 67,
'line_stacked': 63,
'line_stacked_100': 64,
'pie': 5,
'pie_exploded': 69,
'pie_of_pie': 68,
'pyramid_bar_clustered': 109,
'pyramid_bar_stacked': 110,
'pyramid_bar_stacked_100': 111,
'pyramid_col': 112,
'pyramid_col_clustered': 106,
'pyramid_col_stacked': 107,
'pyramid_col_stacked_100': 108,
'radar': -4151,
'radar_filled': 82,
'radar_markers': 81,
# 'stock_hlc': 88,
# 'stock_ohlc': 89,
# 'stock_vhlc': 90,
# 'stock_vohlc': 91,
# 'surface': 83,
# 'surface_top_view': 85,
# 'surface_top_view_wireframe': 86,
# 'surface_wireframe': 84,
'xy_scatter': -4169,
'xy_scatter_lines': 74,
'xy_scatter_lines_no_markers': 75,
'xy_scatter_smooth': 72,
'xy_scatter_smooth_no_markers': 73
}
w = 385
h = 241
n = 0
x = 100
y = 10
for i in dic.keys():
xx = x + n % 3*w # 用来生成图表放置的x坐标。
yy = y + n//3*h # 用来生成图表放置的y坐标。
chart = sht.charts.add(xx, yy)
chart.set_source_data(sht.range('A1').expand())
chart.chart_type = i
chart.api[1].ChartTitle.Text = i
n += 1
wb.save('chart_图表')
wb.close()
app.quit()
效果如下:
4.8 实战训练1. xlwings 新建 Excel 文档
程序示例:
# 3.4.2 xlwings 新建 Excle 文档
def fun3_4_2():
"""
visible
Ture:可见excel
False:不可见excel
add_book
True:打开excel并且新建工作簿
False:不新建工作簿
"""
app = xw.App(visible=True, add_book=False)
# 新建工作簿 (如果不接下一条代码的话,Excel只会一闪而过,卖个萌就走了)
wb = app.books.add()
# 保存工作簿
wb.save('example.xlsx')
# 退出工作簿
wb.close()
# 退出Excel
app.quit()
执行程序后文件夹增加了“example.xlsx”:
此时表格是空的:
2. xlwings 打开已存在的 Excel 文档
现有表格长这样:
运行程序:
# 3.4.3 xlwings 打开已存在的Excel文件
def fun3_4_3():
# 新建Excle 默认设置:程序可见,只打开不新建工作薄,屏幕更新关闭
app = xw.App(visible=True, add_book=False)
app.display_alerts = False
app.screen_updating = False
# 打开已存在的Excel文件
wb=app.books.open('./3_4 xlwings 修改操作练习.xlsx')
# 保存工作簿
wb.save('example_2.xlsx')
# 退出工作簿
wb.close()
# 退出Excel
app.quit()
生成新的表格:
内容如下:
3. xlwings 读写 Excel
程序示例:
# 3.4.4 xlwings读写 Excel
def fun3_4_4():
# 新建Excle 默认设置:程序可见,只打开不新建工作薄,屏幕更新关闭
app = xw.App(visible=True, add_book=False)
app.display_alerts = False
app.screen_updating = False
# 打开已存在的Excel文件
wb=app.books.open('./3_4 xlwings 修改操作练习.xlsx')
# 获取sheet对象
print(wb.sheets)
sheet = wb.sheets[0]
# sheet = wb.sheets["sheet1"]
# 读取Excel信息
cellB1_value = sheet.range('B1').value
print("单元格B1内容为:",cellB1_value)
# 清除单元格内容和格式
sheet.range('A1').clear()
# 写入单元格
sheet.range('A1').value = "xlwings写入"
# 保存工作簿
wb.save('example_3.xlsx')
# 退出工作簿
wb.close()
# 退出Excel
app.quit()
执行效果:
想看更多视频教程课加任姐姐VX,免费领取哦
5. Python openpyxl 读取 写入 修改 操作Excel在openpyxl中,主要用到三个概念:Workbooks,Sheets,Cells。
-
Workbook就是一个excel工作表;
-
Sheet是工作表中的一张表页;
-
Cell就是简单的一个格。
openpyxl就是围绕着这三个概念进行的,不管读写都是“三板斧”:打开Workbook,定位Sheet,操作Cell。
官方文档:https://openpyxl.readthedocs.io/en/stable/
官方示例:
from openpyxl import Workbook
wb = Workbook()
# grab the active worksheet
ws = wb.active
# Data can be assigned directly to cells
ws['A1'] = 42
# Rows can also be appended
ws.append([1, 2, 3])
# Python types will automatically be converted
import datetime
ws['A2'] = datetime.datetime.now()
# Save the file
wb.save("sample.xlsx")
1.安装
pip install openpyxl
因为我已经安装,所以提示如下信息:
2.打开文件
(1)新建
from openpyxl import Workbook
# 实例化
wb = Workbook()
# 激活 worksheet
ws = wb.active
(2)打开已有
from openpyxl import load_workbook
wb = load_workbook('文件名称.xlsx')
3.写入数据
# 方式一:数据可以直接分配到单元格中(可以输入公式)
ws['A1'] = 42
# 方式二:可以附加行,从第一列开始附加(从最下方空白处,最左开始)(可以输入多行)
ws.append([1, 2, 3])
# 方式三:Python 类型会被自动转换
ws['A3'] = datetime.datetime.now().strftime("%Y-%m-%d")
4.创建表(sheet)
# 方式一:插入到最后(default)
ws1 = wb.create_sheet("Mysheet")
# 方式二:插入到最开始的位置
ws2 = wb.create_sheet("Mysheet", 0)
5.选择表(sheet)
# sheet 名称可以作为 key 进行索引
>>> ws3 = wb["New Title"]
>>> ws4 = wb.get_sheet_by_name("New Title")
>>> ws is ws3 is ws4
True
6.查看表名(sheet)
# 显示所有表名
>>> print(wb.sheetnames)
['Sheet2', 'New Title', 'Sheet1']
# 遍历所有表
>>> for sheet in wb:
... print(sheet.title)
7.访问单元格(cell)
(1)单个单元格访问
# 方法一
>>> c = ws['A4']
# 方法二:row 行;column 列
>>> d = ws.cell(row=4, column=2, value=10)
# 方法三:只要访问就创建
>>> for i in range(1,101):
... for j in range(1,101):
... ws.cell(row=i, column=j)
(2)多个单元格访问
# 通过切片
>>> cell_range = ws['A1':'C2']
# 通过行(列)
>>> colC = ws['C']
>>> col_range = ws['C:D']
>>> row10 = ws[10]
>>> row_range = ws[5:10]
# 通过指定范围(行 → 行)
>>> for row in ws.iter_rows(min_row=1, max_col=3, max_row=2):
... for cell in row:
... print(cell)
# 通过指定范围(列 → 列)
>>> for row in ws.iter_rows(min_row=1, max_col=3, max_row=2):
... for cell in row:
... print(cell)
# 遍历所有 方法一
>>> ws = wb.active
>>> ws['C9'] = 'hello world'
>>> tuple(ws.rows)
((
(
...
(
(
# 遍历所有 方法二
>>> tuple(ws.columns)
((
...
(
...
8.保存数据
wb.save('文件名称.xlsx')
9.其它
(1)改变sheet标签按钮颜色
ws.sheet_properties.tabColor = "1072BA" # 色值为RGB16进制值
(2)获取最大行,最大列
# 获得最大列和最大行
print(sheet.max_row)
print(sheet.max_column)
(3)获取每一行每一列
-
sheet.rows为生成器, 里面是每一行的数据,每一行又由一个tuple包裹。
-
sheet.columns类似,不过里面是每个tuple是每一列的单元格。
# 因为按行,所以返回A1, B1, C1这样的顺序
for row in sheet.rows:
for cell in row:
print(cell.value)
# A1, A2, A3这样的顺序
for column in sheet.columns:
for cell in column:
print(cell.value)
(4)根据数字得到字母,根据字母得到数字
from openpyxl.utils import get_column_letter, column_index_from_string
# 根据列的数字返回字母
print(get_column_letter(2)) # B
# 根据字母返回列的数字
print(column_index_from_string('D')) # 4
(5)删除工作表
# 方式一
wb.remove(sheet)
# 方式二
del wb[sheet]
(6)矩阵置换
rows = [
['Number', 'data1', 'data2'],
[2, 40, 30],
[3, 40, 25],
[4, 50, 30],
[5, 30, 10],
[6, 25, 5],
[7, 50, 10]]
list(zip(*rows))
# out
[('Number', 2, 3, 4, 5, 6, 7),
('data1', 40, 40, 50, 30, 25, 50),
('data2', 30, 25, 30, 10, 5, 10)]
# 注意 方法会舍弃缺少数据的列(行)
rows = [
['Number', 'data1', 'data2'],
[2, 40 ], # 这里少一个数据
[3, 40, 25],
[4, 50, 30],
[5, 30, 10],
[6, 25, 5],
[7, 50, 10],
]
# out
[('Number', 2, 3, 4, 5, 6, 7), ('data1', 40, 40, 50, 30, 25, 50)]
想看更多视频教程课加任姐姐VX,免费领取哦



