亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么用python庫openpyxl操作excel,從源excel表中提取信息復制到目標excel表中

發布時間:2020-11-24 14:13:50 來源:億速云 閱讀:155 作者:小新 欄目:編程語言

了解怎么用python庫openpyxl操作excel,從源excel表中提取信息復制到目標excel表中?這個問題可能是我們日常學習或工作經常見到的。希望通過這個問題能讓你收獲頗深。下面是小編給大家帶來的參考內容,讓我們一起來看看吧!

現代生活中,我們很難不與excel表打交道,excel表有著易學易用的優點,只是當表中數據量很大,我們又需要從其他表冊中復制粘貼一些數據(比如身份證號)的時候,我們會越來越倦怠,畢竟我們不是機器,沒法長時間做某種重復性的枯燥操作。想象這樣一個場景,我們有個幾千行的表要填,需要根據姓名輸入其對應的身份證號,但之前我們已經做過一個類似的表,同樣的一些人的姓名跟身份證號是完整的,那么我們就需要通過一個個查找姓名,然后把身份證號碼復制到我們當前要做的表里去。

當我日復一日重復著這些操作的時候,我都很想有一個自動化工具來完成這種操作,把做為人的我從這種非人的折磨里解脫出來,最后還是想到了python,因為這樣我能很少的關注語言內部的一些細節,從而專注于解決這個問題。

其安裝命令為 pip install openpyxl(在線安裝)或者  easy_install openpyxl。

openpyxl的操作可以分四步,第一步載入現有workbook或者創建workbook到內存,分別使用

from openpyxl import load_workbook
from openpyxl import Workbook
#載入現有workbook中
wb1=load_workbook('lalala.xlsx')
"""
在源表數據量很大的時候,這里我們可以使用openpyxl的read_only模式
載入源表,這樣做的好處是不用把整個表都載入內存
"""
wb1=load_workbook(filename='lalala.xlsx',read_only=True)
#創建workbook
wb2 = Workbook()

第二步就是操作excel表中的sheet了,通過Workbook()創建的workbook默認活動的sheet名稱為Sheet,可以通過python交互命令行進行驗證。

#獲取活動的sheet
ws = wb.active
#設置sheet的標題
ws.title = "range names"
#創建以Pi為標題的sheet
ws = wb.create_sheet(title="Pi")
#獲取標題為Sheet1的sheet
ws=wb['Sheet1']

第三步就是操作sheet中的cell了。需要注意的是,一個cell的位置由它所在的列跟行共同決定,比如一個cell,它在A列,并在第三行,就可以通過ws['A3']來訪問。cell還具有row跟column屬性,cell.row跟cell.column的數據類型如下圖所示。

怎么用python庫openpyxl操作excel,從源excel表中提取信息復制到目標excel表中

特別注意當用read_only模式載入workbook時,cell.row跟cell.column都是int對象。cell.column記錄的是cell所在列離第一列的偏移數,并非workbook中真正代表列數的大寫字母,比如“A”。

#獲取第一行,數據類型為tuplerow=ws[1]#獲取A列,數據類型為tuplecolumn=ws['A']#設置F5的值ws['F5']='sfs'#設置cell的值ws['F5'].value='hello'#獲得cell的行數m=ws['F5'].row#獲得cell的列數n=ws['F5'].column#獲得特定區域的值,比如從F5到F30,數據類型為tuplek=ws['F5':'F30']#獲得特定區域的值,比如從F5到G30,數據類型為tuplej=ws['F5':'G30']#獲取sheet的最大行數row_count=ws.max_row#獲取sheet的最大列數column_count=ws.max_column
最后一步把更改保存,這里要注意,當要保存的表在別的軟件(microsoft office或者wps)中打開時,保存操作會報錯

wb1.save('empty_book.xlsx')
wb2.save(filename='other_book.xlsx')

實現需求

新建一個get_info_from_excel.py文件,用你習慣的編輯器來編輯,首先需要引入openpyxl庫中的load_workbook模塊。可以使用load_workbook載入已經存在的excel表。

from openpyxl import load_workbook

我們的目的是從源excel表中提取信息并批量復制到目標excel表中,所以我們首先定義一些變量。

#源表名稱
source_file_name='lalala.xlsx'
#目標表名稱
target_file_name='lelele.xlsx'
#源表中要提取信息的sheet
source_sheet_name='Sheet2'
#目標表中要批量復制信息的sheet
target_sheet_name='Sheet2'
#源表中的標題行在哪一行
source_header_row=3
#目標表中的標題行在哪一行
target_header_row=2
#源表中要根據哪一列數據提取信息,根據源表標題行
source_cell_condition='姓名'
#目標表中要根據哪一列數據復制信息,根據目標表標題行
target_cell_condition='姓名'
#源表中要提取信息的列
source_cell_filled='身份證號'
#目標表中要復制信息的列
target_cell_filling='身份證號'

將源表跟目標表載入內存,方便下一步操作這兩個表。

#在源表數據量很大的時候,這里我們可以使用openpyxl的read_only模式載入源表,這樣做的好處是不用把整個表都載入內存
#wb_w=load_workbook(source_file_name)
wb_r=load_workbook(filename=source_file_name,read_only=True)
wb_w=load_workbook(target_file_name)

從前面已經定義的sheet名稱跟標題行數獲取源表跟目標表的標題行:

ws_r=wb_r[source_sheet_name]
ws_w=wb_w[target_sheet_name]

header_row_r=ws_r[source_header_row]
header_row_w=ws_w[target_header_row]

操作源表標題行,獲取我們想要的信息:

"""
openpyxl用read_only模式載入workbook時,獲取到的cell不是一般的cell,
經過測試cell.column變成偏移了幾列的整數,所以這里我們定義一個函數來處理,
把整數轉換成excel真正的列數,比如“A”、“BB”等。
"""
def readOnly_offsetColunmNumber_toRealColumn(number):
    column=''
    if number<=26:
       column=chr(number+ord('A')-1)
    else:
       number1=number//26
       column1=chr(number1+ord('A')-1)
       number2=number%26
       column2=chr(number2+ord('A')-1)
       column=column1+column2
    return column

#初始化兩個變量,分別是源表的條件列,要復制的列
source_condition_column=''
source_filled_column=''
"""
循環源表的標題列,得到條件列的位置以及要復制列的位置,
再通過內嵌的循環得到條件列的最大行數
"""
for cell in header_row_r:
    if cell.value==source_cell_condition:
       source_condition_column=readOnly_offsetColunmNumber_toRealColumn(cell.column)            
    elif cell.value==source_cell_filled:
         source_filled_column=readOnly_offsetColunmNumber_toRealColumn(cell.column)

操作目標表標題行,獲取我們想要的信息:

#初始化兩個變量,分別是目標表的條件列,要粘貼的列target_condition_column=''target_filling_column=''"""
循環目標表的標題列,得到條件列的位置以及要粘貼列的位置,
再通過內嵌的循環得到條件列的最大行數
"""for cell_j in header_row_w:    if cell_j.value==target_cell_condition:
       target_condition_column=cell_j.column           
    elif cell_j.value==target_cell_filling:
         target_filling_column=cell_j.column

現在我們已經得到所有需要的信息,該到實際粘貼數據的時候了。

"""
循環目標表的條件列,內部嵌套循環源表的條件列,一旦目標表條件列的某個cell
與源表條件列某個cell的值相同,我們就把源表要復制列的同一行的cell的值
賦予目標表要粘貼列的同一行的cell。
""" 
for cell_m in ws_w[target_condition_column+str(target_header_row+1):target_condition_column+str(ws_w.max_row)]:
    for cell_n in ws_r[source_condition_column+str(source_header_row+1):source_condition_column+str(ws_r.max_row)]:
        if cell_m[0].value==cell_n[0].value:
           ws_w[target_filling_column+str(cell_m[0].row)].value=ws_r[source_filled_column+str(cell_n[0].row)].value

最后保存目標workbook就可以了。

wb_w.save(target_file_name)

感謝各位的閱讀!看完上述內容,你們對怎么用python庫openpyxl操作excel,從源excel表中提取信息復制到目標excel表中大概了解了嗎?希望文章內容對大家有所幫助。如果想了解更多相關文章內容,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

江山市| 万荣县| 禹城市| 盈江县| 常山县| 宜都市| 天气| 富平县| 鄱阳县| 平山县| 新龙县| 瑞金市| 平谷区| 祁阳县| 山阴县| 霍山县| 班戈县| 基隆市| 奈曼旗| 开鲁县| 平定县| 广灵县| 桦南县| 乾安县| 繁峙县| 铁岭县| 景宁| 五家渠市| 杂多县| 台北县| 精河县| 囊谦县| 阳新县| 大同县| 潞西市| 桑植县| 清水河县| 阿拉尔市| 确山县| 轮台县| 吉水县|