from openpyxl import load_workbook
from typing import Union, List, IO
import openpyxl
import pandas as pd
import os

def write_excel(file_full_path, values:list,sheet_name ="Sheet1"):
# sheet名称
sheet_name = sheet_name

# 获取指定的文件
wb = openpyxl.load_workbook(file_full_path)
# 获取指定的sheet
ws = wb[sheet_name]
# 获得最大行数
max_row_num = ws.max_row
# 获得最大列数
max_col_num = ws.max_column

# 将当前行设置为最大行数
ws._current_row = max_row_num

# 使用append方法,将行数据按行追加写入
# values = ['Jack', '12', '2023/11/12', 'Failed']

ws.append(values)

# 保存文件
wb.save(file_full_path)

#如果要批量写入数据的话可以用循环在内部使用,以减少io操作减少写入时间如下
def write_excel_2(file_full_path,sheet_name ="Sheet1"):
# sheet名称
sheet_name = sheet_name

# 获取指定的文件
wb = openpyxl.load_workbook(file_full_path)
# 获取指定的sheet
ws = wb[sheet_name]
# 获得最大行数
max_row_num = ws.max_row
# 获得最大列数
max_col_num = ws.max_column

# 将当前行设置为最大行数
ws._current_row = max_row_num

# 使用append方法,将行数据按行追加写入
# values = ['Jack', '12', '2023/11/12', 'Failed']

for i in range(200,1000):
values = ['Jack', i, '2023/11/12', 'Failed']
ws.append(values)

# 保存文件
wb.save(file_full_path)


def xlsx_read():


# 加载Excel文件
workbook = load_workbook(filename='example - 副本.xlsx')

# 获取所有的工作表名称
sheet_names = workbook.sheetnames
Lists = []
# 遍历所有工作表
for sheet_name in sheet_names:
# 获取工作表
sheet = workbook[sheet_name]

# 遍历所有行
for row in sheet.iter_rows(values_only=True):
# 打印每行的数据
# print(row)
Lists.append(row)
return Lists
  #输出形式 [('name', 'num', 'date', 'F_T'), ('Jack', 0, '2023/11/12', 'Failed'), ('Jack', 1, '2023/11/12', 'Failed')]

class ExcelUtils(object):
""" Excel文件操作工具类 """

@classmethod
def read_excel(
cls,
path_or_buffer: Union[str, IO],
sheet_name: str = "Sheet1",
col_mapping: dict = None,
all_col: bool = True,
header: int = 0,
**kwargs
) -> List[dict]:
"""
读取excel表格数据,根据col_mapping替换列名
Args:
path_or_buffer: 文件路径或者缓冲流
sheet_name: 读书excel表的sheet名称
col_mapping: 列字段映射
all_col: True返回所有列信息,False则返回col_mapping对应的字段信息
header: 默认0从第一行开启读取,用于指定从第几行开始读取

Returns:
"""
use_cols = None
if not all_col:
# 获取excel表指定列数据
use_cols = list(col_mapping) if col_mapping else None

df = pd.read_excel(path_or_buffer, sheet_name=sheet_name, usecols=use_cols, header=header, **kwargs)
if col_mapping:
df.rename(columns=col_mapping, inplace=True)

return df.to_dict("records")
      #输出形式[{'name': 'Jack', 'num': 0, 'date': '2023/11/12', 'F_T': 'Failed'}, {'name': 'Jack', 'num': 1, 'date': '2023/11/12', 'F_T': 'Failed'}]
posted on 2024-06-08 00:40  我爱你的  阅读(621)  评论(0)    收藏  举报