項目辦公自動化工具-文件夾照片批量插入word·


效圖

#
##################################### #### 程序名稱:文件夾照片批量插入word ### ###################################### ''' 需求:野外調查照片按日期進行了歸檔,並存儲到pic文件夾中;需要將照片導入word,其中照片所在的日期文件夾名字作為一級索引;按4*3標准表格插入word,照片下面 是照片的名字,不需要后綴名;插入word表格中的照片應該按照片生成的修改日期排序插入,以便更原始記錄表對應。 思路: 1.利用os.listdir(path)生成日期文件夾路徑列表 2. 設計照片管理word封面內容 2.1 默認word 頁面是豎排,需要橫排時應插入連續分頁符后設置方向。如果恢復豎排,則也插入連續分節符后設置豎向。 3. 封面后插入表格,表格內容插入照片和照片名稱,照片名稱居中;日期文件夾名稱設為一級標題 3.1 定義函數,當照片文件夾里照片個數,是表格4*3里可插入照片數6個的整數倍或整除6時候 3.2 定義函數,當照片文件夾里照片個數,不是表格4*3里可插入照片數6個的整數倍或整除6時候 3.3 定義按照片的修改時間排序函數 3.4 每個照片文件夾進行循環插入信息 3.4.1先插入日期,設為一級標題 3.4.2 整除情況插入照片信息 3.4.3 非整除情況插入照片信息,又可以分兩種情況 3.4.3.1 非整除情況插入照片信息,又可以分兩種情況:(1)照片個數小於6,插入一個表就可以 3.4.3.2 非整除情況插入照片信息,又可以分兩種情況:(2)照片個數大於6,插入表格數量是整除的個數,后插入余數情況的一個表就可以 4.最后保存為word 文件。 5.編譯為exe文件,cmd: pyinstaller.exe -F F:\python_2020\test\工具-照片導入word\工具-照片導入word\照片批量導入word歸檔系統V3.py 使用方法: 1.照片統一為jpg格式,路徑為 ./pic/日期/*.jpg 2.程序文件拷貝到pic文件夾當前路徑中。 3.照片統一為橫排,比例誒4:3 4.生成的word刪除首頁空白,頁面兩側間距建議改為20mm,根據項目修改封面內容 研發信息: 研發團隊:廣核監測科技創新研發小組 研發組長:bison 研發日期:2020年8月16日 ''' ###################################### msg=''' ###################################### #### 程序名稱:文件夾照片批量插入word ### ###################################### 需求:野外調查照片按日期進行了歸檔,並存儲到pic文件夾中;需要將照片導入word,其中照片所在的日期文件夾名字作為一級索引;按4*3標准表格插入word,照片下面 是照片的名字,不需要后綴名;插入word表格中的照片應該按照片生成的修改日期排序插入,以便更原始記錄表對應。 ###################################### 使用方法: 1.照片統一為jpg格式,路徑為 ./pic/日期/*.jpg 2.程序文件拷貝到pic文件夾當前路徑中。 3.照片統一為橫排,比例誒4:3 4.生成的word刪除首頁空白,頁面兩側間距建議改為20mm,根據項目修改封面內容 ###################################### 研發信息: 研發團隊:廣核監測科創小組 研發組長:bison 研發日期:2020年8月16日 ###################################### ''' print(msg) ok=str(input("是否已按要求整理待歸檔照片文件,如果是,按回車執行程序:")) #引入庫 import os, sys, os.path,time,datetime,docx from docx import Document from docx.enum.text import WD_PARAGRAPH_ALIGNMENT #用作設置段落對齊 WD_ALIGN_PARAGRAPH from docx.enum.table import WD_TABLE_ALIGNMENT #表格內容居中 from docx.shared import Pt #磅數 from docx.shared import Inches #圖片尺寸 from docx.oxml.ns import qn #中文格式 from docx.enum.section import WD_ORIENTATION, WD_SECTION_START # 導入節方向和分解符類型 ############# main ######################### # 1. 利用os.listdir(path)生成日期文件夾路徑列表 path="./pic" #當前路徑 father_paths=os.listdir(path) print("father_paths:",father_paths) #father_paths: ['2020年8月13日', '2020年8月14日', '2020年8月15日'] fps=[] for i in range(len(father_paths)): fps.append(os.path.join(path,father_paths[i])) print("所有照片文件夾包括:",fps) # ['./pic\\2020年8月13日', './pic\\2020年8月14日', './pic\\2020年8月15日'] # doc = Document("./照片管理模板.docx") #打開word文件 doc = Document() #新建word文件 ###################################### # 2. 設計照片管理word封面內容 #2.1 默認word 頁面是豎排,需要橫排時應插入連續分頁符后設置方向。如果恢復豎排,則也插入連續分節符后設置豎向。 #原計划的新建word封面模板,后來發現無法添加一級標題,故改為程序新建doc文件后保存 doc.add_paragraph() # 添加一個空白段落 section = doc.add_section(start_type=WD_SECTION_START.CONTINUOUS) # 添加橫向頁的連續節 section.orientation = WD_ORIENTATION.LANDSCAPE # 設置橫向 page_h, page_w = section.page_width, section.page_height section.page_width = page_w # 設置橫向紙的寬度 section.page_height = page_h # 設置橫向紙的高度 #如下方式無法修改段落格式,不采用 doc.add_paragraph("") doc.add_paragraph("") doc.add_paragraph("") #采用run方式可以修改格式,采用 p1=doc.add_paragraph() run1=p1.add_run("廣東省***************監測") run1.font.name=u"宋體" run1.font.size=Pt(20) p1.paragraph_format.alignment = WD_TABLE_ALIGNMENT.CENTER #居中 p2=doc.add_paragraph() run2=p2.add_run("***鉛鋅礦野外調查照片圖冊") run2.font.name=u"宋體" run2.font.size=Pt(20) p2.paragraph_format.alignment = WD_TABLE_ALIGNMENT.CENTER #居中 doc.add_paragraph("") doc.add_paragraph("") doc.add_paragraph("") doc.add_paragraph("") doc.add_paragraph("") doc.add_paragraph("") doc.add_paragraph("") doc.add_paragraph("") p3=doc.add_paragraph() run3=p3.add_run("廣東省******中心") run3.font.name=u"宋體" run3.font.size=Pt(20) p3.paragraph_format.alignment = WD_TABLE_ALIGNMENT.CENTER #居中 #封面底下輸入打印日期 import time today=time.strftime("%Y-%m-%d",time.localtime()) date_para=doc.add_paragraph() # date_run=date_para.add_run(today) #2020-08-13 # print(today[0:5]) date_run=date_para.add_run("%s年%s月%s日"%(today[0:4],today[6:7],today[8:11])) date_run.font.name=u"宋體" date_run.font.size=Pt(20) date_para.paragraph_format.alignment = WD_TABLE_ALIGNMENT.CENTER #日期居中 # doc.add_page_break() #插入分頁符 ################################# # 3. 封面后插入表格,表格內容插入照片和照片名稱,照片名稱居中;日期文件夾名稱設為一級標題 ''' 問題:如何插入表格,表格里如何插入照片和信息 1.先插入日期,設為一級標題 2.插入表格6 2.1 日期文件夾里照片文件個數x整除6,插入表格數y=x/6 照片文件進行每組為一個列表,進行標准化插入 2.2 不整除6,y=int(x/6)+1 3.標准化出入內容 4.調試 ''' ###################################### # 3.1 定義函數,當照片文件夾里照片個數,是表格4*3里可插入照片數6個的整數倍或整除6時候 # 標准表格里插入照片和信息的函數, def InfoToTable(filelist,table,pathi,tip='整除倍數4*3標准表格情況'): #jpglist=os.listdir(fps[0]) jpglist[0]='1.JPG', jpglist[1]='FKQXK-r-01-01-0.jpg' z=len(filelist) # if z%6==0: ########開始 # 1. strip() 清除兩邊的空格 # 2. rstrip() 清除右邊的空格 # 3. lstrip() 清除左邊的空格 table.cell(1, 0).text = filelist[0].rstrip('.jpgJPGpngPNGtifTIF') table.cell(1, 1).text = filelist[1].rstrip('.jpgJPGpngPNGtifTIF') # '第2張照片' .JPG table.cell(1, 2).text = filelist[2].rstrip('.jpgJPGpngPNGtifTIF') # '第3張照片' table.cell(3, 0).text = filelist[3].rstrip('.jpgJPGpngPNGtifTIF')# '第4張照片' table.cell(3, 1).text = filelist[4].strip('.jpgJPGpngPNGtifTIF')# '第5張照片' table.cell(3, 2).text = filelist[5].strip('.jpgJPGpngPNGtifTIF') # '第6張照片' # table.cell(3, 2).text = filelist[5].strip('.jpg' or '.JPG') # '第6張照片' w = float(8 / 2.54) # cm轉為英寸 h = float(6 / 2.54) # cm轉為英寸 run = table.cell(0, 0).paragraphs[0].add_run() run.add_picture(os.path.join(pathi, filelist[0]), width=Inches(w), height=Inches(h)) run = table.cell(0, 1).paragraphs[0].add_run() run.add_picture(os.path.join(pathi, filelist[1]), width=Inches(w), height=Inches(h)) run = table.cell(0, 2).paragraphs[0].add_run() run.add_picture(os.path.join(pathi, filelist[2]), width=Inches(w), height=Inches(h)) run = table.cell(2, 0).paragraphs[0].add_run() run.add_picture(os.path.join(pathi, filelist[3]), width=Inches(w), height=Inches(h)) run = table.cell(2, 1).paragraphs[0].add_run() run.add_picture(os.path.join(pathi, filelist[4]), width=Inches(w), height=Inches(h)) run = table.cell(2, 2).paragraphs[0].add_run() run.add_picture(os.path.join(pathi, filelist[5]), width=Inches(w), height=Inches(h)) # 設置表格內容居中 for r in range(4): # 循環將每一行,每一列都設置為居中 for c in range(3): table.cell(r, c).paragraphs[0].paragraph_format.alignment = WD_TABLE_ALIGNMENT.CENTER # else: # pass ###結束 ###################################### # 3.2 定義函數,當照片文件夾里照片個數,不是表格4*3里可插入照片數6個的整數倍或整除6時候 def InfoToTable_yushu(filelist,table,pathi,tip='不整除倍數x*3標准表格情況'): #jpglist=os.listdir(fps[0]) jpglist[0]='1.JPG', jpglist[1]='FKQXK-r-01-01-0.jpg' z=len(filelist) if z%6==1: ########開始 table.cell(1, 0).text = filelist[0].strip('.jpgJPGpngPNGtifTIF') # '第1張照片' # jpglist[0]='1.JPG' w = float(8 / 2.54) # cm轉為英寸 h = float(6 / 2.54) # cm轉為英寸 run = table.cell(0, 0).paragraphs[0].add_run() run.add_picture(os.path.join(pathi, filelist[0]), width=Inches(w), height=Inches(h)) # 設置表格內容居中 for r in range(4): # 循環將每一行,每一列都設置為居中 for c in range(3): table.cell(r, c).paragraphs[0].paragraph_format.alignment = WD_TABLE_ALIGNMENT.CENTER ###結束 elif z%6==2: ########開始 table.cell(1, 0).text = filelist[0].strip('.jpgJPGpngPNGtifTIF') # '第1張照片' # jpglist[0]='1.JPG' table.cell(1, 1).text = filelist[1].strip('.jpgJPGpngPNGtifTIF') # '第2張照片' w = float(8 / 2.54) # cm轉為英寸 h = float(6 / 2.54) # cm轉為英寸 run = table.cell(0, 0).paragraphs[0].add_run() run.add_picture(os.path.join(pathi, filelist[0]), width=Inches(w), height=Inches(h)) run = table.cell(0, 1).paragraphs[0].add_run() run.add_picture(os.path.join(pathi, filelist[1]), width=Inches(w), height=Inches(h)) # 設置表格內容居中 for r in range(4): # 循環將每一行,每一列都設置為居中 for c in range(3): table.cell(r, c).paragraphs[0].paragraph_format.alignment = WD_TABLE_ALIGNMENT.CENTER ###結束 elif z%6==3: ########開始 table.cell(1, 0).text = filelist[0].strip('.jpgJPGpngPNGtifTIF') # '第1張照片' # jpglist[0]='1.JPG' table.cell(1, 1).text = filelist[1].strip('.jpgJPGpngPNGtifTIF') # '第2張照片' table.cell(1, 2).text = filelist[2].strip('.jpgJPGpngPNGtifTIF') # '第3張照片' w = float(8 / 2.54) # cm轉為英寸 h = float(6 / 2.54) # cm轉為英寸 run = table.cell(0, 0).paragraphs[0].add_run() run.add_picture(os.path.join(pathi, filelist[0]), width=Inches(w), height=Inches(h)) run = table.cell(0, 1).paragraphs[0].add_run() run.add_picture(os.path.join(pathi, filelist[1]), width=Inches(w), height=Inches(h)) run = table.cell(0, 2).paragraphs[0].add_run() run.add_picture(os.path.join(pathi, filelist[2]), width=Inches(w), height=Inches(h)) # 設置表格內容居中 for r in range(4): # 循環將每一行,每一列都設置為居中 for c in range(3): table.cell(r, c).paragraphs[0].paragraph_format.alignment = WD_TABLE_ALIGNMENT.CENTER ###結束 elif z%6==4: ########開始 table.cell(1, 0).text = filelist[0].strip('.jpgJPGpngPNGtifTIF') # '第1張照片' # jpglist[0]='1.JPG' table.cell(1, 1).text = filelist[1].strip('.jpgJPGpngPNGtifTIF') # '第2張照片' table.cell(1, 2).text = filelist[2].strip('.jpgJPGpngPNGtifTIF') # '第3張照片' table.cell(3, 0).text = filelist[3].strip('.jpgJPGpngPNGtifTIF') # '第4張照片' w = float(8 / 2.54) # cm轉為英寸 h = float(6 / 2.54) # cm轉為英寸 run = table.cell(0, 0).paragraphs[0].add_run() run.add_picture(os.path.join(pathi, filelist[0]), width=Inches(w), height=Inches(h)) run = table.cell(0, 1).paragraphs[0].add_run() run.add_picture(os.path.join(pathi, filelist[1]), width=Inches(w), height=Inches(h)) run = table.cell(0, 2).paragraphs[0].add_run() run.add_picture(os.path.join(pathi, filelist[2]), width=Inches(w), height=Inches(h)) run = table.cell(2, 0).paragraphs[0].add_run() run.add_picture(os.path.join(pathi, filelist[3]), width=Inches(w), height=Inches(h)) # 設置表格內容居中 for r in range(4): # 循環將每一行,每一列都設置為居中 for c in range(3): table.cell(r, c).paragraphs[0].paragraph_format.alignment = WD_TABLE_ALIGNMENT.CENTER ###結束 elif z%6==5: ########開始 table.cell(1, 0).text = filelist[0].strip('.jpgJPGpngPNGtifTIF') # '第1張照片' # jpglist[0]='1.JPG' table.cell(1, 1).text = filelist[1].strip('.jpgJPGpngPNGtifTIF') # '第2張照片' table.cell(1, 2).text = filelist[2].strip('.jpgJPGpngPNGtifTIF') # '第3張照片' table.cell(3, 0).text = filelist[3].strip('.jpgJPGpngPNGtifTIF') # '第4張照片' table.cell(3, 1).text = filelist[4].strip('.jpgJPGpngPNGtifTIF') # '第5張照片' w = float(8 / 2.54) # cm轉為英寸 h = float(6 / 2.54) # cm轉為英寸 run = table.cell(0, 0).paragraphs[0].add_run() run.add_picture(os.path.join(pathi, filelist[0]), width=Inches(w), height=Inches(h)) run = table.cell(0, 1).paragraphs[0].add_run() run.add_picture(os.path.join(pathi, filelist[1]), width=Inches(w), height=Inches(h)) run = table.cell(0, 2).paragraphs[0].add_run() run.add_picture(os.path.join(pathi, filelist[2]), width=Inches(w), height=Inches(h)) run = table.cell(2, 0).paragraphs[0].add_run() run.add_picture(os.path.join(pathi, filelist[3]), width=Inches(w), height=Inches(h)) run = table.cell(2, 1).paragraphs[0].add_run() run.add_picture(os.path.join(pathi, filelist[4]), width=Inches(w), height=Inches(h)) # 設置表格內容居中 for r in range(4): # 循環將每一行,每一列都設置為居中 for c in range(3): table.cell(r, c).paragraphs[0].paragraph_format.alignment = WD_TABLE_ALIGNMENT.CENTER else: pass ###結束 ###################################### # 3.3 定義按照片的修改時間排序函數 def sort_file_by_time(file_path): # 定義按時間排序的函數 files = os.listdir(file_path) if not files: return else: files = sorted(files, key=lambda x: os.path.getmtime( os.path.join(file_path, x))) # 格式解釋:對files進行排序.x是files的元素,:后面的是排序的依據. x只是文件名,所以要帶上join. return files # f = sort_file_by_time(fps[i]) # 按修改時間排序后的文件名稱列表 # print("f時間排序后的文件列表:", f) # 打印是否成功排序 f時間排序后的文件列表: ['5.jpg', '6.jpg', '7.jpg', # # '8.jpg', '10.jpg', '11.jpg', '12.jpg', '13.jpg', '14.jpg', '15.jpg', '16.jpg', # # '9.jpg', '17.jpg', '18.jpg', '19.jpg', '20.jpg', '21.jpg', '22.jpg', '23.jpg', '24.jpg', # # '1.JPG', '2.JPG', '3.JPG', '4.JPG'] # print("fps[0]);", fps[0]) # ./pic\2020年8月13日 ###################################### #3.4 每個照片文件夾進行循環插入信息 for i in range(len(father_paths)): # 3.4.1先插入日期,設為一級標題 doc.add_heading(father_paths[i], 1) print(os.listdir(fps[i])) x=len(os.listdir(fps[i])) # 3.4.2 整除情況插入照片信息 if x%6==0: y= int(x/6) #插入表格數 count = 0 #定位插入照片的位置,是第幾張表格 for l in range(y): # table = doc.add_table(rows=4, cols=3, style="Normal Table") #插入y個4*3表格 # 調用函數 # jpglist = os.listdir(fps[i]) #調用按修改日期排序函數 jpglist = sort_file_by_time(fps[i]) jpglist = jpglist[count * 6 + 0:int(x / 6) * 6 + count * 6] #count * 6 用於定位插入第count占表格的照片新起點位置 # 插入一種4*3的標准表格 table = doc.add_table(rows=4, cols=3, style="Normal Table") # 調用整除情況插入照片的函數 InfoToTable(jpglist, table, fps[i], tip='整除倍數4*3標准表格情況') count += 1 #定位到下一個表格位置 # 3.4.3 非整除情況插入照片信息,又可以分兩種情況 elif x%6!=0: # 3.4.3.1 非整除情況插入照片信息,又可以分兩種情況:(1)照片個數小於6,插入一個表就可以 if int(x / 6)==0: #說明照片個數小於6,插入一個表就可以 #調用時間排序函數 jpglist = sort_file_by_time(fps[i]) # jpglist = os.listdir(fps[i]) #插入表格 table = doc.add_table(rows=4, cols=3, style="Normal Table") #調用不整除情況插入表格信息函數 InfoToTable_yushu(jpglist, table, fps[i], tip='不整除倍數x*3標准表格情況') # 3.4.3.2 非整除情況插入照片信息,又可以分兩種情況:(2)照片個數大於6,插入表格數量是整除的個數,后插入余數情況的一個表就可以 elif int(x / 6)!=0: #說明照片個數大於6,插入整除的個數,插入余數情況的一個表就可以 #插入整除的個數 y = int(x / 6) # 插入表格數 count = 0 #用於定位第幾張表格 # 先循環插入整除倍數情況的表格信息 for l in range(y): # table = doc.add_table(rows=4, cols=3, style="Normal Table") #插入y個4*3表格 # 調用照片按修改時間排序函數 jpglist = sort_file_by_time(fps[i]) # jpglist = os.listdir(fps[i]) jpglist = jpglist[count*6+0:int(x / 6)*6+count*6] # 插入表格 table = doc.add_table(rows=4, cols=3, style="Normal Table") #調用整除情況插入照片信息 InfoToTable(jpglist, table, fps[i], tip='整除倍數4*3標准表格情況') count +=1 #定位到下一個整除表格 # 后調用插入不整除情況的信息 #插入余數情況的一個表就可以 #調用照片按修改時間排序的函數 jpglist = sort_file_by_time(fps[i]) # jpglist = os.listdir(fps[i]) jpglist =jpglist[int(x / 6)*6:] #定位到依次第幾個照片需要插入 #添加表格 table = doc.add_table(rows=4, cols=3, style="Normal Table") #調用非整除情況 InfoToTable_yushu(jpglist, table, fps[i], tip='不整除倍數x*3標准表格情況') else: pass # 每個日期文件夾名字插入完后插入分頁符 doc.add_page_break() #4.最后保存為word 文件。 doc.save('result.docx') print("succed") os.system('pause') ############### end #######################

 


免責聲明!

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



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