import pandas as pd
from openpyxl import Workbook
from openpyxl.styles import PatternFill, Alignment, Font
from openpyxl.utils.dataframe import dataframe_to_rows
from openpyxl.utils import get_column_letter
import requests
def save_2d_array_to_excel(data_array, headers, file_path, sheet_name='Sheet1', remark="", alignment='center'):
"""
将二维数组中的数据保存到 Excel 文件中,并进行各种格式化操作。
:param data_array: 二维数组,其中每个子列表代表一行数据
:param headers: 列表,包含每一列的表头名称
:param file_path: 保存文件的路径和名称,例如 'output.xlsx'
:param sheet_name: Excel 文件中的工作表名称,默认是 'Sheet1'
:param remark: 在表尾添加的备注消息,默认为空字符串
:param alignment: 单元格内容的对齐方式,默认为居中 ('center'),也可以是 'left' 或 'right'
"""
try:
# 创建一个新的工作簿和工作表
wb = Workbook()
ws = wb.active
ws.title = sheet_name
# 将 DataFrame 内容写入工作表
df = pd.DataFrame(data_array, columns=headers)
for r in dataframe_to_rows(df, index=False, header=True):
ws.append(r)
# 设置表头格式(灰色背景)
grey_fill = PatternFill(start_color="D3D3D3", end_color="D3D3D3", fill_type="solid")
for cell in ws[1]: # 第一行即为表头
cell.fill = grey_fill
cell.alignment = Alignment(horizontal="center") # 表头保持居中对齐
# 添加备注消息,并根据表头宽度合并单元格
if remark:
max_row = ws.max_row
max_col = ws.max_column
# 合并从第一列到最后一列的单元格
ws.merge_cells(start_row=max_row + 2, start_column=1, end_row=max_row + 2, end_column=max_col)
merged_cell = ws.cell(row=max_row + 2, column=1, value=remark)
merged_cell.alignment = Alignment(horizontal="center", vertical="center")
# merged_cell.font = Font(italic=True) # 备注信息以斜体显示
merged_cell.font = Font()
# 设置所有单元格的对齐方式
align = {
'left': Alignment(horizontal="left"),
'center': Alignment(horizontal="center"),
'right': Alignment(horizontal="right")
}.get(alignment.lower(), Alignment(horizontal="center")) # 默认居中对齐
for row in ws.iter_rows():
for cell in row:
cell.alignment = align
# 自动调整列宽
for column in ws.columns:
max_length = 0
column_letter = get_column_letter(column[0].column) # 获取列字母标识符
for cell in column:
try:
if len(str(cell.value)) > max_length:
max_length = len(str(cell.value))
except:
pass
adjusted_width = (max_length + 2) # 留一点额外空间
ws.column_dimensions[column_letter].width = adjusted_width
# 保存工作簿到指定路径
wb.save(file_path)
print(f"数据已成功保存到 {file_path} 中的工作表 '{sheet_name}',并已添加格式、备注、自动调整列宽和设置了对齐方式。")
except Exception as e:
print(f"保存数据时发生错误: {e}")
if __name__ == "__main__":
# 定义API的URL
url = "https://www.xxx.com/get_all_money_data"
# 发送GET请求
response = requests.get(url)
# 检查响应状态码是否为200(表示成功)
if response.status_code == 200:
# 将响应内容解析为JSON格式
api_response = response.json()
# 提取并转换数据
data_array = [
[item['id'], item['name'], item['price'], item['number'], item['mask'], item['people'], item['create_time']]
for item in api_response['data']
]
# 对应的表头
headers = ['序号', '名称', '单价', '数量', '备注', '支付人', '支付时间']
# 指定输出文件路径和名称
file_path = 'output.xlsx'
# 备注信息
remark = "这是表格底部的备注消息。"
# 调用函数保存二维数组数据到 Excel 文件,并应用所有设置
save_2d_array_to_excel(
data_array,
headers,
file_path,
sheet_name='PeopleData',
remark=remark,
alignment='left' # 可选:'left', 'center', 'right'
)
print('导出成功')
else:
print('导出失败')
保存数据到excel表中
相关推荐
-
生成图片
from PIL import Image, ImageColor, ImageDraw, ImageFont, ImageFilterdef create_image_with_text(size, color, text, font_path, font_size, text_color, shadow_color, output_path): """ Create a new image of specified size and color with centered text that has a border and shadow. :param size: A tuple con
-
获取指定目录下的所有图片信息
1 获取指定目录下的所有图片信息// 获取指定目录下的所有图片信息 public function getImagesInfo($directory) { $images = []; // 创建递归目录迭代器 $iterator = new \RecursiveIteratorIterator( new \RecursiveDirectoryIterator($directory, \RecursiveDirectoryIterator::SKIP_DOTS), \RecursiveIteratorIterator::LEAVES_ONLY ); // 遍历目录中的每个文件 foreach (
-
Thinkphp各版本的PHP要求
ThinkPHP 8.0:运行环境要求PHP8.0+,兼容PHP8.3ThinkPHP 6.1:运行环境要求PHP7.2+,兼容PHP8.1ThinkPHP 6.0:运行环境要求PHP7.2+,兼容PHP8.1ThinkPHP 5.1:运行环境要求PHP5.6+,兼容PHP8.0ThinkPHP 5.0:运行环境要求PHP5.4+,兼容PHP7.3