参考文档:https://segmentfault.com/a/1190000022194006
https://www.jianshu.com/p/3f348b7552a7
使用openpyxl创建一个数据表
''' 使用openpyxl创建一个数据表'''
from openpyxl import Workbook,load_workbook
wb = Workbook() '''创建一个全新的工作簿'''
ws = wb.active '''获取当前的工作sheet,即上一步创建的工作表中的sheet,默认获取第一个sheet'''
print(wb)
print(wb.sheetnames) '''获取工作簿的所有sheetname'''
wb.save(r"E:\工作\test\openpyxl_test.xlsx") '''保存到指定路径指定文件名'''
创建新的sheet
'''创建新的sheet'''
wb.create_sheet() '''默认创建一个sheet,默认命名为sheet1,sheet2...'''
'''创建一个名字为sheet的sheet页,但是如果已经存在此名字的sheet则会命名为sheet1,sheet2...'''
wb.create_sheet("sheet")
'''创建一个名为"mysheet"的sheet,0代表在最前端创建,成为第一个sheet页'''
wb.create_sheet("mysheet",0)
'''创建一个名为"mysheet"的sheet,-1代表在倒数第二个位置创建,成为倒数第二个sheet页'''
wb.create_sheet("mysheet",-1)
更改原有的sheet名
'''首先需要在创建新的sheet时给他一个返回接收值'''
ws = wb.creat_sheet("new_sheet")
'''然后使用title方法更改sheet名'''
ws.title = "new_name"
'''此时的sheetname为[new_name]'''
copy一个sheet
print("你可以遍历整个工作簿。。。")
for sheet in wb:
'''copy指定的sheet只有单元格(包括值、样式、超链接、备注)
和一些工作表对象(包括尺寸、格式和参数)会被复制。
其他属性不会被复制,如图片、图表。无法在两个工作簿中复制工作表。
当工作簿处于只读或只写状态时也无法复制工作表。'''
target = wb.copy_worksheet(sheet)
print("sheet_name:"+sheet.title)
print("sheetname:{}".format(wb.sheetnames))
print('创建所有表的副本。。。')
加载原有的工作簿
'''加载原有的工作簿'''
wb2 = load_workbook(r"E:\工作\test\openpyxl_test.xlsx")
print("sheetname:{}".format(wb.sheetnames))
对数据进行操作
'''对数据进行操作'''
print("通过sheet名获取sheet。。。")
ws2 = wb["title"]
print(ws2)
print("访问一个单元格,此时c为A4处单元格对象,并非单元格内的值如果此单元格尚未存在则会创建一个,
访问即创建,所以可以直接赋值。。。")
c = ws2["A4"]
print('给单元格赋值。。。')
ws2["A4"] = 4
print(c)
'''保存,如果不保存赋值的数据将不会出现在数据表中'''
wb.save(r"E:\工作\test\openpyxl_test.xlsx")
print("通过行列号访问单元格,设置value则值为value的值,没有则为数据表中原有值。。。")
d = ws2.cell(row=4,column=1,value=10)
print(d)
wb.save(r"E:\工作\test\openpyxl_test.xlsx")
print("可以通过切片获取多个单元格。。。")
range = ws2['A1':'C2']
print(range)
print("获取A列数据。。。")
range = ws2['A']
print(range)
print("获取A列和B列数据。。。")
range = ws2['A':'B']
print(range )
print("获取第4行数据。。。")
range = ws2[4]
print(range)
print("获取第4行和第5行数据。。。")
range = ws2[4:5]
print(range)
Worksheet.iter_rows() and Worksheet.iter_cols()
print('使用Worksheet.iter_rows()方法获取指定范围内的行')
for rows in ws2.iter_rows(min_row=2, min_col=2,max_col=3, max_row=3):#起始行,起始列,结束列,结束行
print(rows)
print('使用Worksheet.iter_cols()方法获取指定范围内的列')
for rows in ws2.iter_cols(min_row=2, min_col=2,max_col=3, max_row=3):#起始行,起始列,结束列,结束行
print(rows)
image.png
print('获取所有的行和列。。。。')
ws2['C9'] = 'hello world'
print(tuple(ws2.rows))
print(tuple(ws2.columns))
print('获取单元格的值...')
for row in ws2.values:
for i in row:
print("value....")
print(i)
print('使用Worksheet.iter_rows()方法获取指定范围内的行,只返回单元格的值。。。')
for rows in ws2.iter_rows(min_row=2, min_col=2,max_col=4, max_row=10,values_only=True):#起始行,起始列,结束列,结束行
print(rows)
print('使用Worksheet.iter_cols()方法获取指定范围内的列,只返回单元格的值。。。')
for rows in ws2.iter_cols(min_row=2, min_col=2,max_col=4, max_row=10,values_only=True):#起始行,起始列,结束列,结束行
print(rows)
print("通过行列号访问单元格。。。")
d = ws2.cell(row=4,column=1)
print(d)
print('给单元格赋值。。。')
d.value = '3.1415926'
print('获取指定单元格的值。。。')
for rows in ws2.iter_rows(min_row=4, min_col=1,max_col=1, max_row=4,values_only=True):#起始行,起始列,结束列,结束行
print(rows)
网友评论