ps做網(wǎng)站首頁(yè)怎么個(gè)人網(wǎng)上賣貨的平臺(tái)
文章目錄
- 代碼
工作中,經(jīng)常需要將Word文檔中的表格粘貼到Excel文件中,以便匯總及分析。一個(gè)一個(gè)復(fù)制粘貼,非常不方便,還是Python自動(dòng)化操作,省心省力。要求如下圖所示,即將word中的所有表格,轉(zhuǎn)存到excel文件的工作表里。
import os
from docx import Document
from openpyxl import Workbook#獲取待處理的文件的路徑
path='word文件' #文件所在文件夾
files = [path+"\\"+i for i in os.listdir(path)] #獲取文件夾下的文件名,并拼接完整路徑for file in files:doc = Document(file)wb = Workbook()wb.remove(wb.worksheets[0])#刪除工作簿自帶的工作表for index, table in enumerate(doc.tables, start=1): #從1開(kāi)始給表格編號(hào)ws = wb.create_sheet(f"Sheet{index}")#創(chuàng)建新工作表,以"Sheet" + word中表格的編號(hào)命名for i in range(len(table.rows)): #遍歷word中表格的所有行row_data = [] #儲(chǔ)存表格中每行的數(shù)據(jù)for j in range(len(table.columns)): #遍歷word中表格的所有列row_data.append(table.cell(i,j).text)ws.append(row_data) #每取一行就寫(xiě)入數(shù)據(jù)到Excel表的行中wb.save("excel文件\\{}.xlsx".format(file.split("\\")[1].split(".")[0])) #保存excel文件
以上,先導(dǎo)入相關(guān)模塊。os
用于獲取待處理word文件的路徑;docx
用于讀取word
文件;openpyxl
用于操作excel
文件。將所有word文件的路徑存入列表files
中。然后逐個(gè)通過(guò)Document
打開(kāi),并使用Workbook()
創(chuàng)建Excel工作簿,以接收來(lái)自于word文件中的數(shù)據(jù)。因?yàn)閯?chuàng)建工作簿后,Excel會(huì)自動(dòng)新建一個(gè)名為"Sheet"的空白表格,但我們想用自己命名的表格,所以使用remove()
將自動(dòng)新建的表刪掉了。
然后遍歷word
文件中的所有表格,并讀取其中的數(shù)據(jù)。由于我們想讓Excel
工作簿中的表的序號(hào)與Word
中的一致,所以使用enmuerate
給Word
中的表格進(jìn)行編號(hào),start=1
表示從1開(kāi)始,不然會(huì)默認(rèn)從0開(kāi)始。
隨后使用wb.create_sheet
新建一個(gè)工作表,其表名就用字符串"Sheet"加上上面的編號(hào)。其中f"{}"
是格式化字符串方法,從Python 3.6開(kāi)始加入標(biāo)準(zhǔn)庫(kù),是一種更靈活好用的方法。如下有四種方式處理字符串,結(jié)果完全一樣,不過(guò)第一種最好用,墻裂推薦。
name = "Trump"
age = 70
f"你好, {name}, 你的年齡是{age}歲."
‘你好, Trump, 你的年齡是70歲.’
"你好, {}, 你的年齡是{}歲.".format(name,age)
‘你好, Trump, 你的年齡是70歲.’
"你好, %s, 你的年齡是%s歲." % (name, age)
‘你好, Trump, 你的年齡是70歲.’
"你好, " +name +", 你的年齡是" + str(age) + "歲."
‘你好, Trump, 你的年齡是70歲.’
然后遍歷word中表格的所有行和列,將每行的數(shù)據(jù)存入列表row_data
,然后通過(guò)append
方法馬上增加到Excel表中最后一個(gè)數(shù)據(jù)下面。append
方法可以將一個(gè)列表中的所有元素寫(xiě)入到excel表的一行,一個(gè)元素占一個(gè)單元格(如下圖),夠智能的吧?
處理完一個(gè)word文件,就保存一下數(shù)據(jù)。為了使保存的excel文件名與word文件名一致,使用了file.split("\\")[1].split(".")[0])
。其中file
的內(nèi)容如下。file.split("\\")[1]
就得到了’采購(gòu)報(bào)告.docx’,'采購(gòu)報(bào)告.docx'.split(".")[0]
就得到了“采購(gòu)報(bào)告”。
file
‘你好, Trump, 你的年齡是70歲.’
‘你好, Trump, 你的年齡是70歲.’
‘你好, Trump, 你的年齡是70歲.’
‘你好, Trump, 你的年齡是70歲.’
‘word文件\采購(gòu)報(bào)告.docx’
file.split("\\")[1]
‘采購(gòu)報(bào)告.docx’
'采購(gòu)報(bào)告.docx'.split(".")[0]
‘采購(gòu)報(bào)告’
結(jié)果圖如下。word文件中有多少個(gè)表格,就會(huì)在excel文件中生成多少個(gè)sheet。而且,如果在word文件中有合并單元格,那到excel文件中,這些單元格會(huì)拆分,并填充相同的內(nèi)容,更利于數(shù)據(jù)分析。當(dāng)然,結(jié)果excel文件中的格式就不是那么好看了,需要手動(dòng)調(diào)整一下。
代碼
import os
from docx import Document
from openpyxl import Workbook#獲取待處理的文件的路徑
path='word文件' #文件所在文件夾
files = [path+"\\"+i for i in os.listdir(path)] #獲取文件夾下的文件名,并拼接完整路徑for file in files:doc = Document(file)wb = Workbook()wb.remove(wb.worksheets[0])#刪除工作簿自帶的工作表for index, table in enumerate(doc.tables, start=1): #從1開(kāi)始給表格編號(hào)ws = wb.create_sheet(f"Sheet{index}")#創(chuàng)建新工作表,以"Sheet" + word中表格的編號(hào)命名for i in range(len(table.rows)): #遍歷word中表格的所有行row_data = [] #儲(chǔ)存表格中每行的數(shù)據(jù)for j in range(len(table.columns)): #遍歷word中表格的所有列row_data.append(table.cell(i,j).text)ws.append(row_data) #每取一行就寫(xiě)入數(shù)據(jù)到Excel表的行中wb.save("excel文件\\{}.xlsx".format(file.split("\\")[1].split(".")[0])) #保存excel文件