openpyxl操作指南-重点属性讲解和简单实操

"""欢迎新同学阅读,大家可以直接将下面的所有内容复制到pycharm里面运行"""

import openpyxl
from sys import stdout

"""1.创建工作簿和sheet并进行命名、排序等操作"""
wb = openpyxl.Workbook()  #创建一个未保存的.xlsx文件对象(默认有一个名为“sheet”的sheet)
ws1 = wb.active   #激活自带的sheet
wb.remove(ws1)  #删除worksheet对象,此时为对象ws1
ws2 = wb.create_sheet("cool", 0) #新建一个名为“cool”的sheet,且放在第0序列(不加索引默认放在最后位置)
ws2['A1'] = 66  #在A1单元格内写入66
ws2.append([1,2,3,4,5])  #在后面挨着的空行写入列表中的数据
ws3 = wb.create_sheet("my sheet", 1)  #新建一个名为“my sheet”的sheet,且放在第1序列(0序列后面)
ws3.title = "rename"   #将“my sheet”重新命名为“rename”
print(wb.sheetnames)  #打印工作簿中的所有sheet名
for sheet_name in wb.sheetnames:
    print(sheet_name)    #遍历所有sheet名
for sheet in wb:
    print(sheet.title)   #遍历所有sheet名
copy_sheet = wb.copy_worksheet(wb[wb.sheetnames[0]]) #复制一个名为“cool Copy”的sheet,且放在最后位置

"""2.单元格内写入、打印数据"""
ws2["A1"] = 66.345  #在A1单元格中写入66.345
print(ws2["A1"].value)   #打印“A1”中的value
ws2.cell(row=4, column=2, value="你好")  #在第4行第2列(B4)单元格中写入“你好”
wb.guess_types = False  #根据实际情况看是否开启类型推断,默认为False
n = 0
for row in range(1, 11):    #模块默认先遍历行
    for column in range(1, 6):  #每一行遍历列
        ws3.cell(row=row, column=column).value = n
        n += 1    #在1至10行和1至5列写入递增(n+1)数据
for row in ws3["A1":"D6"]:  #遍历1至6行
    for cell in row:   #遍历每行的cell
        stdout.write(str(cell.value) + " ") #打印每个cell的值(不自动换行)
    print()  #自动换行
for row in ws3.rows:  #遍历sheet对象ws3的所有行
    arr = []    #新建一个空的表,方便后面存放数据
    for cell in row:  #遍历每行的cell(返回的是生成器,需要加.value才转为数据)
        arr.append(cell.value)    #将每行的value添加到arr列表总,方便以后调用
        stdout.write(str(cell.value) + " ") #打印数据,且不换行
    print()  #每个row换一次行
for column in ws3.columns:  #遍历sheet对象ws3的所有列
    for cell in column:  #遍历每列的cell
        stdout.write(str(cell.value) + " ") #将每列转置为行打印
    print() #换行
dict1 = {3: "abc", "d": "666", 6: 888}  #键值3相当于excel中的C列,“d”为D列
wb["rename"].append(dict1)    #按照字典中对应的key值添加value值
colC = ws3["C"]  #表示C列
col_range = ws3["C:D"]  #表示C至D列
row5 = ws3[5]  #表示第5行
row_range = ws3[5:10]   #表示5至10行
print(len(wb.sheetnames))  #打印工作簿中sheet的个数
print(ws3.title)   #打印对象ws3的标题
print(ws3.max_row)   #打印最大行数
print(ws3.max_column)   #打印最大列数
ws3["A11"] = "=sum(A1:A10)"  #写入求和公式

"""3.删除行列和合并单元格"""
for row in range(1, 11):
   copy_sheet.append(range(11))  #添加数据
copy_sheet.delete_rows(1,2)  #删除index=1后面2行(从index=1开始)
copy_sheet.delete_cols(2,5)  #删除index=2后面5列(从index=2开始)

copy_sheet.insert_rows(6)    #在第6行插入一行
copy_sheet.merge_cells("A1:E1") #合并单元格,且写入A1的value
copy_sheet.unmerge_cells("A1:E1") #拆分合并后的单元格

"""4.加载文件和只读、只写模式(节约内存)"""
wb1 = openpyxl.load_workbook(r"e:\111.xlsx", read_only=True)  #加载一个excel文件并设置为只读模式
wb3 = openpyxl.Workbook(write_only=True)  #创建一个只写模式的工作簿,添加数据只能通过append()添加行,不能通过cell()添加数据
ws3_c = wb3.create_sheet()   #与普通工作簿不同,它不包含任何工作表,必须创建一个工作表

"""5.合并多个sheet数据的简单实操"""
import openpyxl
    """加载的111.xls中有多张纬度一样的sheet,需要将这些sheet数据进行合并(大家可以根据需求自己创建类似数据)"""
new_wb = openpyxl.Workbook(write_only=True)
sheet = new_wb.create_sheet("new")
wb1 = openpyxl.load_workbook(r"e:\111.xlsx", read_only=True)
ws1 = wb1.worksheets[1]
ar = []
for cell in ws1[1]:
    ar.append(cell.value)
sheet.append(ar)
for sheet1 in wb1:
    for row in sheet1[2:sheet1.max_row]:
        ar = []
        for cell in row:
            ar.append(cell.value)
        sheet.append(ar)
new_wb.save(r"e:\new.xlsx")

 

你可能感兴趣的:(openpyxl操作指南)