-
1 # 汽車仁Video
-
2 # 運維架構師之路
you"re not kidding?同步操作是那麼的麻煩,直接把它自動化不香嗎?看我分解
謹記以自動化工具為榮、人肉操作為恥。注意:要被操作的表,在下文中稱為源Excel表
一、你需求提出的同步操作缺點
同步操作雖然可以一次操作多個Excel的目的,但那仍然屬於人肉操作,因為你要手動去操作一次,還得每個Excel都去ctrl+s一次,1000個Excel操作完累不累
手動操作就意味著可能會發生操作失誤
根據你的描述得出以下兩點(滿足自動化基本要求):
你的這個操作是規律性、重複性的
你的Excel原表和輸出表的結構也有規律(結構是一致的)
ERP系統估計你這沒辦法修改匯出功能原始碼,所以以下方案都是從你這端作為出發點
二:自動化方案(一次編寫,一勞永逸)
將下載到本地的源Excel統一放到一個目錄,雙擊exe程式,就將修改完成後的Excel按1-
20.xlsx統一
輸出到另外一個目錄了(這樣夠不夠香?),並在當前路徑下生成一個日誌檔案,標識源Excel-->目標Excel的對應關係,便於以後查詢or排錯詳細技術方案:
Python+pandas庫輕鬆解決,下面是一個我之前批次修改excel的指令碼案例(原始碼在最後,但是得根據你的Excel結構和操作單獨編寫指令碼):
將源Excel存在在指令碼目錄中的MAC目錄下,如圖
執行 Excel操作指令碼
.py
(可以打包為exe)後生成了一個新目錄new_mac,
run.log中記錄和轉換對應關係,源表-->新名字
開啟Excel驗證轉換是否成功,源Excel結構:
修改後的結構:
原始碼:
import os
import pandas as pd
import logging
logging.basicConfig(filename="run.log", format="[%(levelname)s%(asctime)s]%(message)s",
datefmt="%Y-%m-%d%H:%M:%S", level=logging.INFO, filemode="w")
def formar_excel(current_mac_path, new_name):
# 讀取excel資料
data = pd.read_excel(current_mac_path)
# d定義列更改後的名字
rename = {
"資料表格列序號": "No",
"SN": "SN",
"MAC": "MAC"
}
new_dic = {}
# 獲取excel指定列
dic = data.loc[:, [x for x in rename]].to_dict()
# 生成pandas使用的dataframe
for key in dic:
test_list = []
for k, v in dic[key].items():
test_list.append(v)
new_dic[rename[key]] = test_list
# 生成新excel
writeer = pd.ExcelWriter(f"{new_name}.xlsx")
df1 = pd.DataFrame(new_dic)
df1 = df1.astype("str")
df1.to_excel(writeer, index=False)
# 儲存
writeer.save()
# 獲取路徑
new_excel_path = "./new_mac/"
mac_path = os.path.abspath("./mac")
try:
if os.path.exists(new_excel_path):
old_file = os.listdir(new_excel_path)
for old_file in old_file:
old_file = os.path.join(new_excel_path, old_file)
os.remove(old_file)
os.rmdir(new_excel_path)
except Exception as e:
finally:
os.mkdir(new_excel_path)
try:
logging.info("開始轉換Excel")
if os.path.exists(mac_path):
excel_list = os.listdir(mac_path)
new_name = 0
for excel in excel_list:
new_name += 1
current_mac_path = os.path.join(mac_path, excel)
formar_excel(current_mac_path, f"{new_excel_path}{new_name}")
logging.info(f"{ excel } ------------> { new_name }.xlsx")
logging.info("Excel 轉換完成")
else:
logging.error(f"讀取{mac_path}目錄失敗,已自動建立目錄,已經Excel表新增到此目錄中")
os.mkdir(mac_path)
except Exception as e:
logging.error(f"ERROR:{e}")
回覆列表
兩個Excel表實現同步。
1、開啟我們需要設定的 Excel表格(主動表),選中我們需要同步的資料單元格,右擊滑鼠選擇“複製”。
2、右擊滑鼠開啟需要資料同步的 Excel表格(從動表),選中我們需要貼上的單元格,右擊在“貼上選項”中選擇“連結”。
3、驗證“主動表”與“從動表”資料是否同步,以內蒙古人口為例,當“主動表”單元格中資料為“0”時,“從動表”相應的單元格中資料為“0”。
4、兩個Excel表實現資料同步。
注意事項
資料同步關鍵在於兩個表要建立一個連結的關係。
主動表中的資料改變,從動表的資料才會改變,反之不行。