使用Python处理Excel表格

Excel处理模块

第三方开源模块安装

pip install openpyxl

01.打开文件

1.1 创建Excel表格

import openpyxl

# 创建一个新的工作簿对象/实例化
wb = openpyxl.Workbook()

# 获取工作表对象(sheet)
ws = wb.active
print(ws)

# 设置Sheet名称
ws.title = '学生表'

#打印sheet表名
ws.title = "学生个人信息表" #改sheet名
print(ws)

在这里插入图片描述

1.2 打开已有文件

import openpyxl

# 获取工作簿对象
wb = openpyxl.load_workbook('学生表.xlsx')

# 获取所有工作表名称
print(wb.sheetnames)

在这里插入图片描述

1.3 输出文件中的内容

import openpyxl

# 获取工作簿对象
wb = openpyxl.load_workbook('学生表.xlsx')

# 获取所有工作表名称
print(wb.sheetnames)

# 获取工作表对象,三种方法
sheet1 = wb['学生表']
sheet4 = wb.worksheets[3]
print(sheet1, sheet4)

# 获取工作表名称
title = sheet4.title
print(title)

# 获取工作表总行数
rows = sheet1.max_row
# 获取工作表总列数
cols = sheet1.max_column
# 总行,总列
print(rows, cols)


# 获取某一单元格内容(行, 列),例:2行1列,列表从1开始;也可以直接sheet1.cell(2, 1).value
cell = sheet1.cell(row=2, column=1).value
print(cell)

# 读取第一行的所有内容
row_list = []
for i in range(1, cols+1):
    cell_value = sheet1.cell(row=1, column=i).value
    row_list.append(cell_value)

print(row_list)

# 读取第一列的所有内容
column_list = []
for i in range(1, rows+1):
    cell_value = sheet1.cell(row=i, column=1).value
    column_list.append(cell_value)

print(column_list)


# 读取第二列的所有内容,不包含空值
col_values = []
# 遍历第二列所有行
for i in range(1, rows+1):
    # 获取当前单元格的值
    cell_value = sheet1.cell(row=i, column=2).value
    # 如果当前单元格的值不为空
    if cell_value is not None:
        # 将当前单元格的值添加到列表中
        col_values.append(cell_value)

print(col_values, len(col_values)

1.4 Excel表格原图

在这里插入图片描述

1.5 输出结果

在这里插入图片描述

02.写入数据

2.1 写入方法

# 方式一:数据直接分配到单元格(或直接输入公式)
sheet4["A1"] = "日期"
sheet4["A2"] = "周一"

直接输入公式:
import xlsxwriter  #必须要导入的库函数

def write_excel(all):
    workbook = xlsxwriter.Workbook('test.xlsx')  # 表名
    worksheet = workbook.add_worksheet(u'sheet1')

    # 表头 也可使用worksheet.write('0', '0', 'A')  worksheet.write('0', '1', 'B')的方式
    worksheet.write('A1', 'A')
    worksheet.write('B1', 'B')
    worksheet.write('C1', 'C')
    worksheet.write('D1', 'D')

    # 二维数组多行写入
    for x, one in enumerate(all):
        for y, i in enumerate(one):
            # 第一行为表头,x需+1
            worksheet.write(x + 1, y, i)

    workbook.close()


if __name__ == '__main__':
    all = []
    for i in range(1, 5):
        one = []
        for j in range(6, 10):
            one.append(i * j)
        all.append(one)
    write_excel(all)
    
    
    
# 方式二:追加数据,从第一列开始附加(从最下方空白处,最左开始)(可多行输入)
sheet.append([学生,性别,年龄,专业])

注意:上述方式二适用于数据追加,写入方式为excel表格的后续空白行,且逗号分割开的为不同列

2.2写入示例

代码:
import openpyxl

# 获取工作簿对象
wb = openpyxl.load_workbook('学生表.xlsx')

# 获取所有工作表名称
print(wb.sheetnames)

# 获取工作表对象,三种方法
sheet1 = wb['学生表']
sheet4 = wb.worksheets[3]
sheet4["A1"] = "日期"
sheet4["A2"] = "周一"
sheet4["A3"] = "周二"
sheet4["A4"] = "周三"
sheet4["A5"] = "周四"
sheet4["A6"] = "周五"
sheet4["B1"] = "值日生"
sheet4["B2"] = "张三"
sheet4["B3"] = "李四"
sheet4["B4"] = "王五"
sheet4["B5"] = "赵六"
sheet4["B6"] = "王老七"
wb.save("学生表.xlsx")
print(sheet1, sheet4)
写入结果:

在这里插入图片描述

03. 读取数据

3.1 读取单行数据代码

from openpyxl import Workbook,load_workbook

wb = load_workbook("学生表.xlsx")

print(wb.sheetnames)
sheet = wb.get_sheet_by_name("值日表") !!!方法过旧,不常用
print(sheet["B5"])
print(sheet["B5"].value)

注意:上述获取excel数据列的get_sheet_by_name(“值日表”)方法不常用

3.2切片式获取数据

#获取指定列的切片数据
for cell in sheet["B2:B8"]:
    print(cell[0].value)
结果

在这里插入图片描述

3.3 区域式获取数据

# 规范输出指定区域的代码
for row in sheet.iter_rows(min_row=1,max_row=6,max_col=2):
    for cell in row:
        print(cell.value,end=",")
    print()

在这里插入图片描述

3.4 花式遍历

按行遍历
for row in sheet:  #循环获取表数据
	for cell in row:  #循环获取每个单元格的数据
		print(cell.value,ecd=",")
	print()
按列遍历
# A1,A2,A3这样的顺序
for column in sheet.columns:
	for cell in column:
		print(cell.value,end=",")
	print()
遍历指定行&列
for row in sheet.iter_rows(min_row=1,max_row=6,max_col=2):
    for cell in row:
        print(cell.value,end=",")
    print()

2,A3这样的顺序
for column in sheet.columns:
for cell in column:
print(cell.value,end=“,”)
print()


#### 遍历指定行&列

```python
for row in sheet.iter_rows(min_row=1,max_row=6,max_col=2):
    for cell in row:
        print(cell.value,end=",")
    print()

猜你喜欢

转载自blog.csdn.net/H931053/article/details/132718959