python 讀取word表格內容並寫入到excel中去 .docx and .xlsx


1.環境 安裝

pip install pywin32
pip install python-docx

2.關鍵代碼,根據表格標題搜索內容

#根據標題獲取同一行的值
def find_row_value(d,sts):
    lists=[]
    tlen=len(d.tables)
    #print("tlen"+str(tlen))
    for i in range(0,tlen): #獲取表格數
        d.tables[i]
        for j in range(0,len(d.tables[i].rows)): #獲取所有行數
            for c in range(0,d.tables[i]._column_count): #獲取所有的列數
                #print("表格行數和列數:"+str(i)+":"+str(j)+":"+str(c))
                tests=d.tables[i].cell(j,c).text
                if tests==sts:
                    #print(tests)
                    #return i,j,c
                    lists.append(d.tables[i].cell(j+1,c).text)
                
                else:
                    pass
                    #print("沒有找到字符串:"+sts)
                #print(tests)
    return lists

                
#根據標題獲取同一列的值
def find_cel_value(d,sts):
    lists=[]
    tlen=len(d.tables)
    #print("tlen"+str(tlen))
    for i in range(0,tlen): #獲取表格數
        d.tables[i]
        for j in range(0,len(d.tables[i].rows)): #獲取所有行數
            for c in range(0,d.tables[i]._column_count): #獲取所有的列數
                #print("表格行數和列數:"+str(i)+":"+str(j)+":"+str(c))
                tests=d.tables[i].cell(j,c).text
                if tests==sts:
                    #print(tests)
                    #return i,j,c
                     lists.append(d.tables[i].cell(j,c+1).text)
                
                else:
                    pass
                    #print("沒有找到字符串:"+sts)
                #print(tests)
    return lists 

  

3.使用代碼如下:

#coding:utf-8
import os
import win32com
import win32api
from win32com.client import Dispatch, constants
from docx import Document


def parse_docx(f,workbook,num):
    d = Document(f)
    tabs=d.tables

    #獲取name
    name=find_row_value(d,"網站名稱")
    print(name)
    url=find_row_value(d,"url")
    print(url)
    fx_name=find_cel_value(d,"名稱")
    print(type(fx_name[0]))
    
    for i in range(0,len(fx_name)):
        xuhao=num-1
        xuhao=str(xuhao)
        fx_name_str=fx_name[i]
        fx_ms_str=fx_ms[i]
        write_excel(workbook,num,name[0],xuhao,url[0],fx_name_str)
        num=num+1
       
def write_excel(workbook,i_row,name,xuhao,url,fx_name1):
    try:
        first_sheet=workbook.Worksheets(1)
        first_sheet.Cells(i_row,1).value=name
        first_sheet.Cells(i_row,2).value=xuhao
        first_sheet.Cells(i_row,3).value=url
		first_sheet.Cells(i_row,4).value=fx_name1
        
        print('成功寫入:'+name+" 的信息","這是第"+str(i_row)+"個")
        workbook.Save()
    except TypeError as  e:
        print(e)
        


    


#獲取hang的值
def find_row_value(d,sts):
    lists=[]
    tlen=len(d.tables)
    for i in range(0,tlen): #獲取表格數
        d.tables[i]
        for j in range(0,len(d.tables[i].rows)): #獲取所有行數
            for c in range(0,d.tables[i]._column_count): #獲取所有的列數
                #print("表格行數和列數:"+str(i)+":"+str(j)+":"+str(c))
                tests=d.tables[i].cell(j,c).text
                if tests==sts:
                    lists.append(d.tables[i].cell(j+1,c).text)
                
                else:
                    pass
    return lists

                
#獲取列的值
def find_cel_value(d,sts):
    lists=[]
    tlen=len(d.tables)
    for i in range(0,tlen): #獲取表格數
        d.tables[i]
        for j in range(0,len(d.tables[i].rows)): #獲取所有行數
            for c in range(0,d.tables[i]._column_count): #獲取所有的列數
                #print("表格行數和列數:"+str(i)+":"+str(j)+":"+str(c))
                tests=d.tables[i].cell(j,c).text
                if tests==sts:
                     lists.append(d.tables[i].cell(j,c+1).text)
                
                else:
					pass
    return lists             
                


''' 上述函數主要實現文件的讀取 '''
if __name__ == "__main__":
    w = win32com.client.Dispatch('Word.Application')
    #excel
    excel = win32com.client.Dispatch('Excel.Application')
    workbook=excel.Workbooks.open('D:\\test\\2.xlsx')
    excel.Visible=False
	#獲取從第幾行開始寫入
    rember_sheet=workbook.Worksheets(1)
    for rember_ever in range(3,1000):
              Value=rember_sheet.Cells(rember_ever,2).value
              if(Value==None):
                     break
    i=rember_ever
    print("從上次的第",i,"行錄入\n")

    # 遍歷文件
    PATH = "D:\\test" # windows文件路徑
    doc="1.docx"
    parse_docx(PATH+'\\'+doc,workbook,i)

    #關閉進程
    excel.Quit()
    w.Quit()


    

  

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

參考鏈接:

https://blog.csdn.net/qq_34475777/article/details/62055523
https://blog.csdn.net/qq_34475777/article/details/77586663

 


免責聲明!

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



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