python 讀取excel數據第三方庫 xlrd的基本使用及合並單元格處理


xlrd 簡介:

xlrd是python支持的讀取excel的第三方庫,功能十分強大,今天我們一起來學習下吧!

xlrd 的安裝:pip install xlrd 

 

xlrd的基本操作:

首先我們創建一個測試的excel:

 

 

創建python文件,具體操作excel

import xlrd
my_excel = xlrd.open_workbook("./test.xlsx") #讀取excel文件,相當於打開excel
my_sheet = my_excel.sheet_by_name("Sheet1") #通過sheet頁的名字,跳轉sheet頁
#獲取數據的最大行數
max_row = my_sheet.nrows
#獲取最大列數
max_col = my_sheet.ncols
#獲取某一列的數據,
my_sheet.col_values(2) #返回第二列的列表
#獲取某一行的數據
my_sheet.row_values(2) #返回第二列的列表
#獲取某個坐標的值
my_sheet.cell_value(1,2)

上面代碼的運行結果如下:

4
3
['sex', '男', '男', '女']
['李四', 20.0, '男']

xlrd還有很多方法這里就不一一列舉,從上面我們已經可以用python操作excel文件了

xrld的高級用法-合並單元格處理:

我們日常使用,常常會有合並單元格的場景:

 

 

 使用基本方法 my_sheet.cell_value(2,0),我們會發現取到的值為空,因為excel的機制,一班的值是(1,0),為了使合並單元格的值一致

我們需要用到merged_cells屬性,它會返回所有合並單元格的坐標:[(1, 4, 0, 1)],所以我們的思路是,只要輸入的坐標在這個范圍內,我們

把(1,0)的值賦值給輸入的坐標,這樣就能達到我們的目的:合並單元格的值能正常獲取:

row_index = 3  #輸入合並單元格行數
col_index = 0  #輸入合並單元格列數
merged = my_sheet.merged_cells
print(merged)
for(rlow, rhigh, clow, chigh) in merged:  # 遍歷表格中所有合並單元格位置信息
    if (row_index >= rlow and row_index < rhigh):  # 行坐標判斷,判斷輸入的值  1=< row_index <4
        if (col_index >= clow and col_index < chigh):  # 列坐標判斷    0 =<col_index < 1
            # 如果滿足條件,就把合並單元格第一個位置的值賦給其它合並單元格
            cell_value = my_sheet.cell_value(rlow, clow)
print(cell_value)

如上代碼就能讓我們獲取合並單元格的值都能獲取到一班了,好了如果已經掌握,最好封裝起來,這樣以后用起來就方便了,如下:

    def excel_merge_cell(self, row_index, col_index):
        """
        根據輸入坐標,輸出合並單元格或者普通單元格的值
        :param row_index int型,行數
        :param col_index int型,列數
        :return :返回對應坐標的值
        """
        workbook = xlrd.open_workbook(excel_path)
        sheet = workbook.sheet_by_name('Sheet1')
        # merged_cells 獲取當前表格所有合並單元格的位置信息 ,返回一個列
        print(sheet.merged_cells)
        merged = sheet.merged_cells
        for (rlow, rhigh, clow, chigh) in merged:  # 遍歷表格中所有合並單元格位置信息
            if (row_index >= rlow and row_index < rhigh):  # 行坐標判斷
                if (col_index >= clow and col_index < chigh):  # 列坐標判斷
                    # 如果滿足條件,就把合並單元格第一個位置的值賦給其它合並單元格
                    cell_value = sheet.cell_value(rlow, clow)
                    return "合並單元格數據第%d列,第%d行: %s" %(row_index, col_index,cell_value)
                else:
                    cell_value =sheet.cell_value(row_index,col_index) #如果不是合並單元格,直接輸出普通單元格的值
                    return "普通單元格數據第%d列,第%d行: %s"  %(row_index, col_index,cell_value)

 

 

 

 

 

 

 






免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM