子涵先生最近遇到了一個任務,被領導喊去做手工搬運工,本不愿手工處理,但經過簡單評估后短時間無法實作自動化,加之迫于時間壓力,也只好做起了“肌肉運動”,
這部分作業大體分為3步,第一步是把xls轉換為xlsx;第2步是把excel表頭切換為復雜表頭;第三步需要在系統上進行檔案上傳,
思來想去,第一步適合用python實作,第二步適合用java實作,第三步有之前子涵先生基于Python開發的滑鼠點擊器,趁國慶佳節,子涵先生便得空將第1-2步做了技術實作,
本節為使用python實作xls的格式轉換,原始碼其實很簡單,噔噔,開講~
文章目錄
- 第一版 單個xls檔案轉換
- 第二版 目錄下多個xls檔案轉換
- 第三版 增加界面化組件,讓用戶自行選擇檔案夾
- 后記
最終版下載地址:點我下載
第一版 單個xls檔案轉換
import win32com.client as win32
fname = "E:\\source.xls"
excel = win32.gencache.EnsureDispatch('Excel.Application')
wb = excel.Workbooks.Open(fname)
wb.SaveAs(fname+"x", FileFormat = 51) #FileFormat = 51 is for .xlsx extension
wb.Close() #FileFormat = 56 is for .xls extension
excel.Application.Quit()
那多個xls檔案都需要轉換格式怎么辦?把需要轉換的檔案放置到同一個目錄下不就好了嗎?!好,請接著看,
第二版 目錄下多個xls檔案轉換
import os
import win32com.client as win32
def save_as_xlsx(fname):
excel = win32.gencache.EnsureDispatch('Excel.Application')
wb = excel.Workbooks.Open(fname)
wb.SaveAs(fname+"x", FileFormat = 51) #FileFormat = 51 is for .xlsx extension
wb.Close() #FileFormat = 56 is for .xls extension
excel.Application.Quit()
if __name__ == "__main__":
package = "E:\\你的xls所在的檔案夾\\"
files = os.listdir(package)
for fname in files:
if fname.endswith(".xls"):
print(fname + "正在進行格式轉換,請稍后~")
save_as_xlsx(package + fname)
print(fname + "格式轉換完成O(∩_∩)O哈哈~")
else:
print("跳過非xls檔案:"+fname)
上面的代碼還存在一個問題,檔案夾的路徑是寫死的,是不是可以靈活配置或者交給用戶自己選擇呢?好,我們接下來繼續優化,
第三版 增加界面化組件,讓用戶自行選擇檔案夾
import os
import win32com.client as win32
import easygui as eg
def save_as_xlsx(fname):
excel = win32.DispatchEx('Excel.Application')
wb = excel.Workbooks.Open(fname)
wb.SaveAs(fname + "x", FileFormat=51) # FileFormat = 51 is for .xlsx extension
wb.Close() # FileFormat = 56 is for .xls extension
excel.Application.Quit()
def pick_package():
# 打開windows視窗,選擇一個檔案夾
return eg.diropenbox()
if __name__ == "__main__":
package = pick_package()
files = os.listdir(package)
for fname in files:
if fname.endswith(".xls"):
print(fname + "正在進行格式轉換,請稍后~")
try:
currentfile = package + "\\" + fname
save_as_xlsx(currentfile)
print(currentfile + "格式轉換完成,O(∩_∩)O哈哈~")
except:
print(currentfile + "格式轉換例外,┭┮﹏┭┮")
else:
print("跳過非xls檔案:" + fname)
input("輸入任意鍵退出")
最終效果:

后記
有時候不要太著急,忙于應付,還是要留出思考、探索的空間,你會發現有些事還是有捷徑可尋的,
python真的是個好工具,通過簡簡單單的代碼即可實作各種復雜的操作,各種神奇的功能被封裝的明明白白,雖然我對其底層不能夠明明白白,也自知無暇深入,
子涵先生本身是個javaer,目前并沒有貧訓能夠深入python的學習,所以只是用來解決實際問題,

感謝您的賞讀,客官,點贊、留言再走唄~或者留下您的問題一起探討

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/163562.html
標籤:其他
