code:
# -*- coding: utf-8 -*-
"""
Created on Fri Nov 28 19:53:53 2024
@author: SavingKing
"""
import pandas as pd
import json
from openpyxl import load_workbook, Workbook
from openpyxl.utils import get_column_letter
from openpyxl.styles import Alignment
#創建一個含有 JSON 字符串的 DataFrame
data = {
'ID': [1, 2],
'Data': [
json.dumps({"x": 1, "y": 2, "info": {"a": "hello",
"b": "world"}},
indent=2),
json.dumps({"x": 10, "y": 20, "info": {"a": "test",
"b": "example",
"c": "demo"}},
indent=2)
]
}
df = pd.DataFrame(data)
# 指定保存的 Excel 文件路徑
path = "complex_data_sequence.xlsx"
# 保存 DataFrame 到 Excel
df.to_excel(path, sheet_name='Data Sequence',
index=False, engine='openpyxl')
# 加載工作簿以調整col寬和row高
workbook = load_workbook(path)
worksheet = workbook['Data Sequence']
# 調整col寬,並為包含 JSON 的列啟用文本自動換行
for col in worksheet.columns:
max_length = 0
column = col[0].column # 獲取col number: 1->A ; 2->B ; 3->C
column_letter = get_column_letter(column)
for cell in col:
if cell.value: # 检查单元格是否有内容
cell.alignment = Alignment(wrap_text=True)
cell_length = max(len(line) for line in str(cell.value).split('\n'))
max_length = max(max_length, cell_length)
worksheet.column_dimensions[column_letter].width = max_length + 2
# 調整row高,考慮到 JSON 字符串的row數
for row in worksheet.iter_rows(min_row=2,
max_col=worksheet.max_column,
max_row=worksheet.max_row):
for cell in row:
if cell.column == 2: # 假設 JSON 數據在第二col
formatted_json = json.dumps(json.loads(cell.value), indent=2)
line_count = formatted_json.count('\n') + 1
worksheet.row_dimensions[cell.row].height = line_count * 15
# 假設每row高度15
# 保存調整後的 Excel 文件
workbook.save(path)
print(f"Excel 文件已經調整並保存到'{path}'。")code:

輸出的xlsx:

推薦hahow線上學習python: https://igrape.net/30afN

![Python list[] dictionary{key: value},如何從兩個list,建立一個dictionary? Python list[] dictionary{key: value},如何從兩個list,建立一個dictionary?](https://i2.wp.com/savingking.com.tw/wp-content/uploads/2022/09/20220904074100_2.png?quality=90&zoom=2&ssl=1&resize=350%2C233)


![Python:如何將folder_path & file_name合併為file_path? fpath = os.path.join (folder , fname) #不需要[ ]包覆folder,fname; fpath1 = “\\”.join( [folder , fname] ) #需要[ ] 包覆folder,fname ; 反過來講,file_path如何拆分為folder_path & file_name? os.path.dirname() ; os.path.basename() ; file_name如何拆分為主檔名與副檔名os.path.splitext() #split(分裂) ext Python:如何將folder_path & file_name合併為file_path? fpath = os.path.join (folder , fname) #不需要[ ]包覆folder,fname; fpath1 = “\\”.join( [folder , fname] ) #需要[ ] 包覆folder,fname ; 反過來講,file_path如何拆分為folder_path & file_name? os.path.dirname() ; os.path.basename() ; file_name如何拆分為主檔名與副檔名os.path.splitext() #split(分裂) ext](https://i2.wp.com/savingking.com.tw/wp-content/uploads/2023/07/20230717184401_87.png?quality=90&zoom=2&ssl=1&resize=350%2C233)
![Python TQC 510 費氏數列,list[], f.append(n3) Python TQC 510 費氏數列,list[], f.append(n3)](https://i0.wp.com/savingking.com.tw/wp-content/uploads/2022/04/20220522152013_66.jpg?quality=90&zoom=2&ssl=1&resize=350%2C233)
![Python: 如何用numpy.ndarray的reshape 將3D array轉為2D array,再轉為pandas.DataFrame? arr.reshape( arr.shape[0] * arr.shape[1] , -1) Python: 如何用numpy.ndarray的reshape 將3D array轉為2D array,再轉為pandas.DataFrame? arr.reshape( arr.shape[0] * arr.shape[1] , -1)](https://i2.wp.com/savingking.com.tw/wp-content/uploads/2023/03/20230320082325_85.png?quality=90&zoom=2&ssl=1&resize=350%2C233)

![「Python 的兩條路」:一次搞懂 sys.path (找 .py) 與 os.environ[‘PATH’] (找 .exe) 的愛恨情仇 「Python 的兩條路」:一次搞懂 sys.path (找 .py) 與 os.environ[‘PATH’] (找 .exe) 的愛恨情仇](https://i2.wp.com/savingking.com.tw/wp-content/uploads/2026/01/20260114094100_0_424ead.png?quality=90&zoom=2&ssl=1&resize=350%2C233)

近期留言