日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > python >内容正文

python

python的xlutils模块_xlutils模块使用

發(fā)布時(shí)間:2025/3/19 python 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python的xlutils模块_xlutils模块使用 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

1、xlutils?實(shí)現(xiàn)拷貝原文件

原表格:

import xlrdfromxlutils.copy import copy

workbook= xlrd.open_workbook('mcw_test.xlsx') # 打開(kāi)工作簿

new_workbook=copy(workbook) # 將xlrd對(duì)象拷貝轉(zhuǎn)化為xlwt對(duì)象

new_workbook.save("mcw_test.xlsx") # 保存工作簿

新工作簿的工作表內(nèi)容一樣,sheet2有點(diǎn)數(shù)據(jù)也復(fù)制出來(lái)了,只是格式?jīng)]有復(fù)制過(guò)來(lái):

2、拷貝前獲取原工作簿信息

workbook = xlrd.open_workbook('mcw_test.xlsx') # 打開(kāi)工作簿

sheets=workbook.sheet_names() # 獲取工作簿中的所有工作表名字,形成列表元素

worksheet= workbook.sheet_by_name(sheets[0]) # 通過(guò)sheets[0]工作表名稱獲取工作簿中所有工作表中的的第一個(gè)工作表

rows_old=worksheet.nrows # 獲取第一個(gè)工作表中已存在的數(shù)據(jù)的行數(shù)

print(sheets,sheets[0],worksheet,worksheet.nrows )-------------------------------------結(jié)果:

['魔降風(fēng)云變?nèi)嗣麊?#39;, 'Sheet2', 'Sheet3'] 魔降風(fēng)云變?nèi)嗣麊?4

3、拷貝后獲得新工作簿的信息:

workbook = xlrd.open_workbook('mcw_test.xlsx') # 打開(kāi)工作簿

new_workbook = copy(workbook) # 將xlrd對(duì)象拷貝轉(zhuǎn)化為xlwt對(duì)象

new_worksheet = new_workbook.get_sheet(0) # 獲取轉(zhuǎn)化后工作簿中的第一個(gè)工作表對(duì)象

print(new_worksheet,new_workbook,new_worksheet.name) #有時(shí)間整理下工作表對(duì)象的方法,工作表可以.name

----------------------------結(jié)果:

魔降風(fēng)云變?nèi)嗣麊?/p>

4、拷貝后直接修改文件內(nèi)容:

import xlrd

import xlwtfromxlutils.copy import copy

# 打開(kāi)想要更改的excel文件

old_excel= xlrd.open_workbook('mcw_test.xlsx', formatting_info=True)

# 將操作文件對(duì)象拷貝,變成可寫(xiě)的workbook對(duì)象

new_excel=copy(old_excel)

# 獲得第一個(gè)sheet的對(duì)象

ws= new_excel.get_sheet(0)

# 寫(xiě)入數(shù)據(jù)

ws.write(0, 0, '第一行,第一列')

ws.write(0, 1, '第一行,第二列')

ws.write(0, 2, '第一行,第三列')

ws.write(1, 0, '第二行,第一列')

ws.write(1, 1, '第二行,第二列')

ws.write(1, 2, '第二行,第三列')

# 另存為excel文件,并將文件命名,可以重新命名,應(yīng)該也可以覆蓋掉

new_excel.save('new_mcw_test.xlsx')

5、讀取文件,根據(jù)標(biāo)題行和姓名列獲取所有單元格索引坐標(biāo)。

#我要修改小郭吹雪的愛(ài)好為喝水

#需求分析:我需要知道"小郭吹雪的行號(hào)"和“愛(ài)好”的列號(hào)。我要修改的內(nèi)容就是行號(hào)和列號(hào)所對(duì)應(yīng)的單元格。代碼修改就可以用行列索引

import xlrd

import xlwt

from xlutils.copy import copy

workbook = xlrd.open_workbook('mcw_test.xlsx') # 打開(kāi)工作簿

Data_sheet = workbook.sheets()[0]

row1 = Data_sheet.row_values(0) #取出第一行

dic_col_s={str(i):row1[i] for i in range(0,len(row1))} #將第一行的每個(gè)元素加個(gè)序數(shù)標(biāo)記,標(biāo)記列表索引,讓列表索引和標(biāo)題對(duì)應(yīng),由標(biāo)題則可以從字典獲取列號(hào),即列表索引+1,這里需要的是索引

col2=Data_sheet.col_values(1) #取出第二列,

dic_row_s={str(i):col2[i] for i in range(0,len(col2))} #將第二列的每個(gè)元素加個(gè)序數(shù)標(biāo)記,標(biāo)記為第二列的列表索引。讓名字和列表索引對(duì)應(yīng),就可以在字典中由名字得行號(hào),即列表索引+1。這里需要的是這個(gè)索引

print(dic_row_s)

print(dic_col_s)

mtitle="愛(ài)好" #需要修改哪個(gè)標(biāo)題

mname="小郭吹雪" #需要修改哪個(gè)人的

rindex="".join([i for i in dic_row_s if dic_row_s[i]==mname]) #獲取要修改的標(biāo)題所在行的索引

cindex="".join([i for i in dic_col_s if dic_col_s[i]==mtitle]) #獲取要修改的那個(gè)人所在的列索引

print(rindex,cindex) #獲得要修改的單元格的行索引和列索引

------------------結(jié)果:

{'0': '姓名', '1': '小馬過(guò)河', '2': '小郭吹雪', '3': '櫻花小月'}

{'0': 'id', '1': '姓名', '2': '性別', '3': '愛(ài)好', '4': '畢業(yè)時(shí)間'}

2 3

#由上4、拷貝后直接修改文件內(nèi)容可知。只要獲得行列索引,則可以將對(duì)應(yīng)的單元格原值覆蓋掉,即為修改。這里根據(jù)要求獲得所需的行列索引

#漏洞分析:如果需要修改一個(gè)人的多個(gè)列值,那么是執(zhí)行多次上述查找的代碼嗎?可以用裝飾器做個(gè)次數(shù)的傳參么?有時(shí)間研究.

可看下圖,由索引可知,我要修改的是第三行第四列,睡覺(jué)改為喝水。索引得出正確

6、4,5結(jié)合成標(biāo)題6的內(nèi)容。實(shí)現(xiàn)了對(duì)已有文件的某個(gè)單元格,與之同行的另一個(gè)單元格的修改

#------------------------------開(kāi)始獲取需要修改的索引坐標(biāo)-------------------------import xlrd

import xlwtfromxlutils.copy import copy

#------------------開(kāi)始修改----------------------------# def recindex():

workbook= xlrd.open_workbook('mcw_test.xlsx') # 打開(kāi)工作簿

Data_sheet= workbook.sheets()[0]

row1= Data_sheet.row_values(0) #取出第一行

dic_col_s={str(i):row1[i] for i in range(0,len(row1))} #將第一行的每個(gè)元素加個(gè)序數(shù)標(biāo)記,標(biāo)記列表索引,讓列表索引和標(biāo)題對(duì)應(yīng),由標(biāo)題則可以從字典獲取列號(hào),即列表索引+1,這里需要的是索引

col2=Data_sheet.col_values(1) #取出第二列,

dic_row_s={str(i):col2[i] for i in range(0,len(col2))} #將第二列的每個(gè)元素加個(gè)序數(shù)標(biāo)記,標(biāo)記為第二列的列表索引。讓名字和列表索引對(duì)應(yīng),就可以在字典中由名字得行號(hào),即列表索引+1。這里需要的是這個(gè)索引

mtitle="愛(ài)好"#需要修改哪個(gè)標(biāo)題

mname="小郭吹雪"#需要修改哪個(gè)人的

rindex="".join([i for i in dic_row_s if dic_row_s[i]==mname]) #獲取要修改的標(biāo)題所在行的索引

cindex="".join([i for i in dic_col_s if dic_col_s[i]==mtitle]) #獲取要修改的那個(gè)人所在的列索引

rindex=list(rindex)

rindex="".join(rindex)

rindex=int(rindex)

cindex=list(cindex)

cindex="".join(cindex)

cindex=int(cindex)

# print(rindex,cindex)

#returnrindex,cindex

# rindex,cindex=recindex()

# print(rindex,cindex) #獲得要修改的單元格的行索引和列索引

# rindex=2# cindex=3# 打開(kāi)想要更改的excel文件

old_excel= xlrd.open_workbook('mcw_test.xlsx', formatting_info=True)

# 將操作文件對(duì)象拷貝,變成可寫(xiě)的workbook對(duì)象

new_excel=copy(old_excel)

# 獲得第一個(gè)sheet的對(duì)象

ws= new_excel.get_sheet(0)

# 寫(xiě)入數(shù)據(jù)

ws.write(rindex,cindex,'喝水') #修改第3行第4列

# 另存為excel文件,并將文件命名,可以重新命名,應(yīng)該也可以覆蓋掉

new_excel.save('mcw_test.xlsx')

#------------------修改接收并保存---------------------

#上述代碼我想說(shuō)的點(diǎn)。

1)一是我用了那個(gè)手動(dòng)創(chuàng)建的文件做的Excel文件進(jìn)行修改,但是報(bào)錯(cuò)了。后來(lái)用了之前重寫(xiě)過(guò)得文件就好了,即下面這個(gè)沒(méi)有漂亮格式的文件

2)而是我竟然遇到了一個(gè)問(wèn)題,id查看xlrd讀文件接收的變量rindex和cindex一樣地址的,后面就不能對(duì)文件進(jìn)行修改。于是我用列表轉(zhuǎn)化,再用int轉(zhuǎn)化,知道內(nèi)存地址改變了才能不報(bào)錯(cuò)的往下執(zhí)行修改操作。思考,為啥xlrd讀出來(lái)的不能在下面進(jìn)行格式化呢?xlrd似乎沒(méi)有打開(kāi)然后關(guān)閉的方法

3)有時(shí)間把上面的寫(xiě)成修改Excel的函數(shù),

報(bào)錯(cuò)信息:

Traceback (most recent call last):

File"C:\mcw\temp\xlrd_sty.py", line 25, in old_excel= xlrd.open_workbook('mcw_test.xlsx', formatting_info=True)

File"C:\mcw\venv\lib\site-packages\xlrd\__init__.py", line 138, inopen_workbook

ragged_rows=ragged_rows,

File"C:\mcw\venv\lib\site-packages\xlrd\xlsx.py", line 798, inopen_workbook_2007_xml

raise NotImplementedError("formatting_info=True not yet implemented")

NotImplementedError: formatting_info=True not yet implemented

7、(表格函數(shù)1:改)讀取單元格索引并修改單元格的兩個(gè)函數(shù)

import xlrdfromxlutils.copy import copy

fpath='mcw_test.xlsx'mname="小郭吹雪"mtitle="愛(ài)好"modifycontent="睡覺(jué)"def recindex(path,mname,mtitile):'''定位單元格,返回單元格行列索引供modify_cell函數(shù)使用

:param path: Excel文件路徑

:param mname: 要修改的名字

:param mtitile: 要修改的標(biāo)題

:return: 單元格的行列索引號(hào)。rindex:行,cindex:列索引''' workbook =xlrd.open_workbook(path)

Data_sheet= workbook.sheets()[0]

row1= Data_sheet.row_values(0)

dic_col_s={str(i):row1[i] for i in range(0,len(row1))}

col2=Data_sheet.col_values(1)

dic_row_s={str(i):col2[i] for i in range(0,len(col2))}

rindex="".join([i for i in dic_row_s if dic_row_s[i]==mname])

cindex="".join([i for i in dic_col_s if dic_col_s[i]==mtitle])

rindex=int("".join(list(rindex)))

cindex=int("".join(list(cindex)))returnrindex,cindex

def modify_cell(path,rindex,cindex,modifycontent):"""修改文件指定單元格內(nèi)容,由recindex函數(shù)返回值獲取rindex和cindex參數(shù)

:param path: 要修改的Excel文件路徑

:param rindex:recindex返回值元組第一個(gè)元素,行索引

:param cindex:recindex返回值元組第二個(gè)元素,列索引

:param modifycontent: 要修改的單元格新的內(nèi)容

:return:""" old_excel = xlrd.open_workbook(path, formatting_info=True)

new_excel=copy(old_excel)

ws= new_excel.get_sheet(0)

ws.write(rindex,cindex, modifycontent)

new_excel.save(path)

val=recindex(fpath,mname,mtitle)

modify_cell(fpath,val[0],val[1],modifycontent)

8、(表格函數(shù)2:增)往工作表中追加多行數(shù)據(jù)

import xlrdfromxlutils.copy import copy

fpath='mcw_test.xlsx'valueli=[["3","明明如月","女","聽(tīng)歌","2030.07.01"],

["4","志剛志強(qiáng)","男","學(xué)習(xí)","2019.07.01"],]

def write_excel_xls_append(path, value):

index=len(value) # 獲取需要寫(xiě)入數(shù)據(jù)的行數(shù)

workbook=xlrd.open_workbook(path) # 打開(kāi)工作簿

sheets=workbook.sheet_names() # 獲取工作簿中的所有表格

worksheet= workbook.sheet_by_name(sheets[0]) # 獲取工作簿中所有表格中的的第一個(gè)表格

rows_old=worksheet.nrows # 獲取表格中已存在的數(shù)據(jù)的行數(shù)

new_workbook=copy(workbook) # 將xlrd對(duì)象拷貝轉(zhuǎn)化為xlwt對(duì)象

new_worksheet= new_workbook.get_sheet(0) # 獲取轉(zhuǎn)化后工作簿中的第一個(gè)表格for i in range(0, index):for j in range(0, len(value[i])):

new_worksheet.write(i+rows_old, j, value[i][j]) # 追加寫(xiě)入數(shù)據(jù),注意是從i+rows_old行開(kāi)始寫(xiě)入

new_workbook.save(path) # 保存工作簿

print("xls/xlsx格式表格【追加】寫(xiě)入數(shù)據(jù)成功!")

write_excel_xls_append(fpath,valueli)

刪除備注后的代碼:

import xlrdfromxlutils.copy import copy

fpath='mcw_test.xlsx'valueli=[["3","明明如月","女","聽(tīng)歌","2030.07.01"],

["4","志剛志強(qiáng)","男","學(xué)習(xí)","2019.07.01"],]

def write_excel_xls_append(path, value):"""在excel第一個(gè)工作表中追加一行或多行數(shù)據(jù)

:param path: 要修改的Excel文件路徑

:param value: 要添加的內(nèi)容,每行都是列表元素,如示例:[["3","明明如月","女","聽(tīng)歌","2030.07.01"],

["4","志剛志強(qiáng)","男","學(xué)習(xí)","2019.07.01"],]""" index =len(value)

workbook=xlrd.open_workbook(path)

sheets=workbook.sheet_names()

worksheet= workbook.sheet_by_name(sheets[0])

rows_old=worksheet.nrows

new_workbook=copy(workbook)

new_worksheet= new_workbook.get_sheet(0)for i in range(0, index):for j in range(0, len(value[i])):

new_worksheet.write(i+rows_old, j, value[i][j])

new_workbook.save(path)

print("xls/xlsx格式表格【追加】寫(xiě)入數(shù)據(jù)成功!")

write_excel_xls_append(fpath,valueli)

9、(表格函數(shù)3:查1)顯示文件的每行內(nèi)容,制表符分隔每列

import xlrd

fpath="mcw_test.xlsx"def read_excel_xls(path):

workbook=xlrd.open_workbook(path) # 打開(kāi)工作簿

sheets=workbook.sheet_names() # 獲取工作簿中的所有表格

worksheet= workbook.sheet_by_name(sheets[0]) # 獲取工作簿中所有表格中的的第一個(gè)表格for i in range(0, worksheet.nrows):for j in range(0, worksheet.ncols):

print(worksheet.cell_value(i, j),"\t", end="") # 逐行逐列讀取數(shù)據(jù)#分隔符加空格實(shí)現(xiàn)對(duì)其點(diǎn)的

print()

read_excel_xls(fpath)-----------------------------------結(jié)果:

id 姓名 性別 愛(ài)好 畢業(yè)時(shí)間2.0 小馬過(guò)河 男 跑步 2017.07.01

5.0 小郭吹雪 男 睡覺(jué) 2016.07.01

1.0 櫻花小月 女 吃飯 2018.07.01

3 明明如月 女 聽(tīng)歌 2030.07.01

4 志剛志強(qiáng) 男 學(xué)習(xí) 2019.07.01

10、(表格函數(shù)4:查2)以列表形式顯示文件的每行內(nèi)容

import xlrd

fpath="mcw_test.xlsx"def read_excel_xls(path):"""打印所有行的內(nèi)容,每行內(nèi)容以列表形式展示

:param path: 要查看的Excel文件路徑""" workbook =xlrd.open_workbook(path) # 打開(kāi)工作簿

sheets=workbook.sheet_names() # 獲取工作簿中的所有表格

worksheet= workbook.sheet_by_name(sheets[0]) # 獲取工作簿中所有表格中的的第一個(gè)表格

rows= worksheet.row_values(0)for i in range(0, worksheet.nrows):

rows=worksheet.row_values(i) # 逐行逐列讀取數(shù)據(jù)#分隔符加空格實(shí)現(xiàn)對(duì)其點(diǎn)的

print(rows)

read_excel_xls(fpath)------------------------------------結(jié)果:

['id', '姓名', '性別', '愛(ài)好', '畢業(yè)時(shí)間']

[2.0, '小馬過(guò)河', '男', '跑步', '2017.07.01']

[5.0, '小郭吹雪', '男', '睡覺(jué)', '2016.07.01']

[1.0, '櫻花小月', '女', '吃飯', '2018.07.01']

['3', '明明如月', '女', '聽(tīng)歌', '2030.07.01']

['4', '志剛志強(qiáng)', '男', '學(xué)習(xí)', '2019.07.01']

11、(表格函數(shù)5:建)新建表格并寫(xiě)入數(shù)據(jù)

import xlwt

fpath='修仙學(xué)院人名單.xlsx'sheet_name="小馬過(guò)河工作表"valueli=[['id', '姓名', '性別', '愛(ài)好', '畢業(yè)時(shí)間'],

["3","明明如月","女","聽(tīng)歌","2030.07.01"],

["4","志剛志強(qiáng)","男","學(xué)習(xí)","2019.07.01"],]

def write_excel_xls(path, sheet_name, value):

index=len(value) # 獲取需要寫(xiě)入數(shù)據(jù)的行數(shù)

workbook=xlwt.Workbook() # 新建一個(gè)工作簿

sheet=workbook.add_sheet(sheet_name) # 在工作簿中新建一個(gè)表格for i in range(0, index):for j in range(0, len(value[i])):

sheet.write(i, j, value[i][j]) # 像表格中寫(xiě)入數(shù)據(jù)(對(duì)應(yīng)的行和列)

workbook.save(path) # 保存工作簿

print("xls/xlsx格式表格寫(xiě)入數(shù)據(jù)成功!")

write_excel_xls(fpath,sheet_name,valueli)

12、(表格函數(shù)6:刪)未寫(xiě),待增添

參考:

1)https://www.jianshu.com/p/a8391a2b8c6c

2)https://blog.csdn.net/blog_user_zk/article/details/75334566

總結(jié)

以上是生活随笔為你收集整理的python的xlutils模块_xlutils模块使用的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 日韩精品大片 | 成年人国产精品 | 国产精品suv一区二区69 | 中文字幕一区二区三三 | 超黄网站在线观看 | 欧美另类videosbestsex | 亚洲综合影视 | 对白超刺激精彩粗话av | 欧美性教育视频 | 蜜乳av一区| 久久久久久久久久久网站 | 韩国妻子的朋友 | 岛国av网址 | 在线不欧美 | 毛片大全 | 全肉的吸乳文 | 国产男同gay网站 | 综合久色 | 精品人妻视频在线 | 男人的天堂avav | 亚洲第一女人av | 亚洲精品xxx | 毛色毛片 | 五月天国产在线 | 亚洲综合自拍 | 五月天色站| 色玖玖综合| 91成人动漫 | 麻豆欧美 | 午夜毛片在线观看 | 日本美女在线 | 亚洲网站免费观看 | 91麻豆精品国产91久久久久久久久 | 日韩一区二区三区不卡视频 | 黑白配在线观看免费观看 | 天堂男人网 | 免费黄色一级 | 白石茉莉奈番号 | 邪恶久久| 久久无码人妻精品一区二区三区 | 欧美色图一区二区三区 | 人人干夜夜操 | www.日本色 | 中文字幕日韩欧美一区二区 | 色涩色 | 国产欧美视频在线播放 | 伊人首页 | 少妇无码一区二区三区免费 | 欧美激情在线免费观看 | av的天堂| 日韩免费在线看 | 国产黑丝在线播放 | 99re热在线视频 | 久久久综合久久久 | 中国成人毛片 | free性中国hd国语露脸 | 黄色美女毛片 | 噼里啪啦高清 | 日韩成人综合 | 成年人性生活免费视频 | 国产亚洲一区在线 | 五月婷婷基地 | 好男人视频www | 色哒哒影院 | 成人a级片| www.成人精品 | 色久月| 日韩亚州 | 国产精品亲子伦对白 | 女人做爰全过程免费观看美女 | 免费成人黄色av | 成人精品 | 大尺度做爰呻吟舌吻网站 | 国产综合视频一区 | 老熟妇仑乱一区二区视频 | 日韩八区 | 裸体av淫导航 | 99久久影视| 亚洲综合大片69999 | 在线中文字幕av | 蜜桃视频在线观看一区 | 激情丁香网 | 综合亚洲视频 | 丨国产丨调教丨91丨 | 成年人免费在线观看网站 | 国产精品白浆一区二小说 | 在线观看三级网站 | 成人免费不卡视频 | 久久国产激情视频 | 娇妻玩4p被三个男人伺候电影 | 天堂av2019 | 国产午夜一级一片免费播放 | 让男按摩师摸好爽视频 | 经典一区二区 | 中国浓毛少妇毛茸茸 | 国产99对白在线播放 | 久久高清一区 | 东京av男人的天堂 | 欧美福利片在线观看 |