python實現(xiàn)讀取Excel內(nèi)容并展示成json
還是先來介紹一下我的背景:昨天突然接到了這樣的活,需要用python解析Excel中多個sheet文件的內(nèi)容,并最終展示成格式化的json。一想,這個我拿手啊,記得shigen之前有一篇這樣的文章:如何在終端查看excel內(nèi)容,豈不是可以直接派上場了。然而事實是我大意了,我沒有考慮到excel中存在的部分單元格是函數(shù)計算出來的情況。為了更好的說明問題,我先來模擬一個表格看看:

表格中的數(shù)據(jù)全都是我用程序生成的,可參考文章:一個腳本,實現(xiàn)隨機數(shù)據(jù)生成自由
那我們依舊用之前的程序讀取會怎么樣子呢?

發(fā)現(xiàn)很正常,但昨天就是不行,是我多疑了?我一看,昨天的文件是xlsm格式的,意思也就是現(xiàn)在的文件是帶有宏的。那到時候繼續(xù)用那個文件試試吧。
現(xiàn)在,我們來實現(xiàn)讀取文件并選取指定的范圍展示成json的格式。先來看看實現(xiàn)的效果吧:


發(fā)現(xiàn)基本是符合預期的,那現(xiàn)在看看代碼吧,主要的依賴庫可以直接先安裝:
pip3 install numpy xlwings
直接執(zhí)行一下的代碼即可,具體的代碼、函數(shù)調(diào)用可參考代碼中的注釋和文檔:
# -*- encoding: utf-8 -*-
__date__ = '2023/12/23 12:04:32'
?
import json
import numpy as np
import xlwings as xw
?
?
def get_sheet_matrix(file_path: str, sheet_name: str, start_cell: str, end_cell: str) ->np.ndarray:
"""
從指定的 Excel 文件中獲取指定工作表、區(qū)域的數(shù)據(jù),并返回一個 NumPy 矩陣。
?
Args:
file_path (str): Excel 文件的路徑。
sheet_name (str): 要讀取數(shù)據(jù)的工作表名稱。
start_cell (str): 起始單元格的位置,例如 'A1'。
end_cell (str): 結(jié)束單元格的位置,例如 'C3'。
?
Returns:
numpy.ndarray: 包含指定區(qū)域數(shù)據(jù)的二維數(shù)組矩陣。
?
Raises:
FileNotFoundError: 如果文件路徑不存在或無法訪問。
ValueError: 如果起始單元格或結(jié)束單元格的位置格式不正確。
?
Example:
# 示例用法
file_path = 'path/to/file.xlsx'
sheet_name = 'Sheet1'
start_cell = 'A1'
end_cell = 'C3'
matrix = get_sheet_matrix(file_path, sheet_name, start_cell, end_cell)
print(matrix)
"""
app = xw.App(visible=False)
workbook = app.books.open(file_path)
sheet = workbook.sheets[sheet_name]
# 獲取指定區(qū)域的值并構(gòu)建二維列表
values = sheet.range(start_cell, end_cell).value
# 將二維列表轉(zhuǎn)換為 NumPy 矩陣
matrix = np.array(values)
workbook.close()
app.quit()
?
return matrix
?
def matrix_to_json(matrix: np.ndarray) -> str:
"""
將矩陣數(shù)據(jù)轉(zhuǎn)換為 JSON 格式。
?
Args:
matrix: 二維 NumPy 數(shù)組,包含表頭和數(shù)據(jù)。
?
Returns:
JSON 格式的字符串。
"""
headers = matrix[0]
data = matrix[1:]
?
json_data = []
for row in data:
item = {}
for i in range(len(headers)):
item[headers[i]] = row[i]
json_data.append(item)
?
json_str = json.dumps(json_data, indent=2, ensure_ascii=False)
return json_str
?
if __name__ == '__main__':
# 此處必須寫絕對路徑
file_path = '/Users/zzzz/Downloads/demo.xlsm'
sheet_name = 'Sheet1'
start_cell = 'A1'
end_cell = 'D11'
matrix = get_sheet_matrix(file_path, sheet_name, start_cell, end_cell)
print(matrix)
print(matrix_to_json(matrix))
到此這篇關于python實現(xiàn)讀取Excel內(nèi)容并展示成json的文章就介紹到這了,更多相關python讀取Excel內(nèi)容內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
淺談python內(nèi)置變量-reversed(seq)
下面小編就為大家?guī)硪黄獪\談python內(nèi)置變量-reversed(seq)。小編覺得挺不錯的?,F(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-06-06
Python使用Spire.XLS輕松實現(xiàn)列表導出到Excel
當我們處理大量數(shù)據(jù)時,如何將Python中結(jié)構(gòu)化的List數(shù)據(jù)高效、準確地寫入到Excel文件中,常常成為開發(fā)者面臨的一個挑戰(zhàn),下面我們就來看看如何使用Spire.XLS for Python實現(xiàn)這一功能吧2025-12-12
如何配置關聯(lián)Python 解釋器 Anaconda的教程(圖解)
這篇文章主要介紹了如何配置關聯(lián)Python 解釋器 Anaconda的教程,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學習火鍋工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-04-04
python寫入csv時writerow()和writerows()函數(shù)簡單示例
這篇文章主要給大家介紹了關于python寫入csv時writerow()和writerows()函數(shù)的相關資料,writerows和writerow是Python中csv模塊中的兩個函數(shù),用于將數(shù)據(jù)寫入CSV文件,需要的朋友可以參考下2023-07-07
OpenCV實現(xiàn)去除背景識別的方法總結(jié)
這篇文章主要為大家詳細介紹了如何利用OpenCV實現(xiàn)去除背景識別的功能,文中為大家總結(jié)了一些方法,感興趣的小伙伴快跟隨小編一起學習一下2022-10-10

