任务:读取excel 表格的某些行列,用python做随机抽取,再将结果写入另一个excel表格里面。
使用的库:OpenPyXL
- 先导入所需的库。
from openpyxl import load_workbook
from openpyxl import Workbook
import random
- 读取输入表格。
wb_in = load_workbook(filename='path1/wb1.xlsx', read_only=True)
得到的wb_in就是一个workbook对象。
接下来通过表格的名字即可读入所有的表格。
例如,第一个表格的名字是"sheet1", ws_sheet1就是第一个表格。
wsheet_in = wb_in['sheet1']
如果不知道表格的名字,则可以用[get_sheet_names]
得到名字。
for name in wb_in.get_sheet_names():
wsheet_in = wb_in[name]
这样就得到了wb_in这个工作簿的所有表格。
得到了表格,接着就可以按单元格来处理了。
如果要获得某个单元格,可用wsheet_in['A2']
,如果要得到某个单元格的值,用wsheet_in['A4'].value
。
但是excel中,按单元格处理的效率太低,最常用的还是按行列处理数据。
如果要得到行,用wsheet_in.rows
,这是生成器类型,不能使用索引,转换成list之后再使用索引。
例如,可以得到前两行:x,y = list(wsheet.rows)[:2]
;
可以遍历每一行:
for row in wsheet_in.rows:
print(row)
可以用len(list(wsheet.columns))
来判断写入的时候应该从哪一行开始写,防止覆盖。
同样的,得到一列,用wsheet_in.columns
。
得到一个区域,用切片,cells = wsheet['A1':'D10']
。
- 随机选取的结果,写入已有工作簿的新表格中。
如果已有工作簿,需要建立新的表格。那么先新建一个workbook对象,再在这里新建sheet。
wb_out = load_workbook('path2/wb2.xlsx') #导入已有的工作簿
ws2 = wb_out.create_sheet('ads') #在已有的表格后面建立名为'ads'的表格
ws2 = wb_out.create_sheet('sa',0) #在第一个位置建立名为'sa'的表格
#它与下面的两句效果相同
ws3 = wb_out.create_sheet(0) #在第一位新建表格
ws3.title = "sa" #将名字设为'sa'
#在ws2中A1单元格中写入'This is so cool'
ws2['A1'] = 'This is so cool'
#保存
wb_out.save("path2/wb2.xlsx")
如果已有工作簿和表格,需要接着已有的表格继续写。
- 在新的工作簿中新建一个表格。
out1 = Workbook() #新建一个workbook
ws4 = out1.create_sheet(0)
ws4.title = "university"
ws4['A1'] = 'asd'
out1.save("path2/test.xlsx") #保存为test.xlsx
网友评论