openpyxl庫寫入列表資料

我爱你的發表於2024-06-08
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'}]

相關文章