diff --git "a/a700_\351\207\215\347\275\256\346\274\242\345\255\227\346\250\231\351\237\263\345\267\245\344\275\234\350\241\250.py" "b/a700_\351\207\215\347\275\256\346\274\242\345\255\227\346\250\231\351\237\263\345\267\245\344\275\234\350\241\250.py" index 57d2bd1..4b3699a 100644 --- "a/a700_\351\207\215\347\275\256\346\274\242\345\255\227\346\250\231\351\237\263\345\267\245\344\275\234\350\241\250.py" +++ "b/a700_\351\207\215\347\275\256\346\274\242\345\255\227\346\250\231\351\237\263\345\267\245\344\275\234\350\241\250.py" @@ -58,24 +58,32 @@ #-------------------------------------------------------------------------- reset_han_ji_cells(wb) -# 將檔案存放路徑設為【專案根目錄】之下 -try: - file_name = str(wb.names['TITLE'].refers_to_range.value).strip() -except KeyError: - print("未找到命名範圍 'TITLE',使用預設名稱") - # file_name = "Tai_Gi_Zu_Im_Bun.xlsx" # 提供一個預設檔案名稱 - setting_sheet = wb.sheets["env"] - file_name = str( - setting_sheet.range("C4").value - ).strip() - -# 設定檔案輸出路徑,存於專案根目錄下的 output2 資料夾 -output_path = wb.names['OUTPUT_PATH'].refers_to_range.value -new_file_path = os.path.join( - ".\\{0}".format(output_path), - f"【河洛話注音】{file_name}.xlsx") - # 儲存新建立的工作簿 -wb.save(new_file_path) +wb.save() -print(f"待注音漢字已備妥: {new_file_path}") +print(f"【漢字注音】工作表已清空、重置!") +#-------------------------------------------------------------------------- +# 另存新檔 +#-------------------------------------------------------------------------- +# 將待注音的【漢字儲存格】,文字顏色重設為黑色(自動 RGB: 0, 0, 0);填漢顏色重設為無填滿 +# # 將檔案存放路徑設為【專案根目錄】之下 +# try: +# file_name = str(wb.names['TITLE'].refers_to_range.value).strip() +# except KeyError: +# print("未找到命名範圍 'TITLE',使用預設名稱") +# # file_name = "Tai_Gi_Zu_Im_Bun.xlsx" # 提供一個預設檔案名稱 +# setting_sheet = wb.sheets["env"] +# file_name = str( +# setting_sheet.range("C4").value +# ).strip() + +# # 設定檔案輸出路徑,存於專案根目錄下的 output2 資料夾 +# output_path = wb.names['OUTPUT_PATH'].refers_to_range.value +# new_file_path = os.path.join( +# ".\\{0}".format(output_path), +# f"【河洛話注音】{file_name}.xlsx") + +# # 儲存新建立的工作簿 +# wb.save(new_file_path) + +# print(f"待注音漢字已備妥: {new_file_path}") diff --git "a/a701_\344\275\234\346\245\255\344\270\255\346\264\273\351\240\201\346\252\224\345\241\253\345\205\245\346\274\242\345\255\227.py" "b/a701_\344\275\234\346\245\255\344\270\255\346\264\273\351\240\201\346\252\224\345\241\253\345\205\245\346\274\242\345\255\227.py" index c47373e..b7174d4 100644 --- "a/a701_\344\275\234\346\245\255\344\270\255\346\264\273\351\240\201\346\252\224\345\241\253\345\205\245\346\274\242\345\255\227.py" +++ "b/a701_\344\275\234\346\245\255\344\270\255\346\264\273\351\240\201\346\252\224\345\241\253\345\205\245\346\274\242\345\255\227.py" @@ -10,55 +10,80 @@ from p709_reset_han_ji_cells import reset_han_ji_cells from p710_thiam_han_ji import fill_hanji_in_cells -# ========================================================================= -# (1) 取得專案根目錄。 -# ========================================================================= -# 獲取當前檔案的路徑 -current_file_path = Path(__file__).resolve() - -# 專案根目錄 -project_root = current_file_path.parent - -print(f"專案根目錄為: {project_root}") - -# ========================================================================= -# (2) 若無指定輸入檔案,則獲取當前作用中的 Excel 檔案並另存新檔。 -# ========================================================================= -wb = None -# 使用已打開且處於作用中的 Excel 工作簿 -try: - # 嘗試獲取當前作用中的 Excel 工作簿 - wb = xw.apps.active.books.active -except Exception as e: - print(f"發生錯誤: {e}") - print("無法找到作用中的 Excel 工作簿") - sys.exit(2) - -if not wb: - print("無法執行,可能原因:(1) 未指定輸入檔案;(2) 未找到作用中的 Excel 工作簿") - sys.exit(2) - -# 將儲存格已填入之漢字及標音清除 -clear_han_ji_kap_piau_im(wb) - -# 將待注音的【漢字儲存格】,文字顏色重設為黑色(自動 RGB: 0, 0, 0);填漢顏色重設為無填滿 -reset_han_ji_cells(wb) - -# 將待注音的漢字填入 -fill_hanji_in_cells(wb) - -# A731: 自動為漢字查找讀音,並抄寫到漢字的上方(拼音)及下方(注音)。 -type = get_sound_type(wb) -han_ji_khoo = get_han_ji_khoo(wb) -if han_ji_khoo == "河洛話" and type == "白話音": - ca_han_ji_thak_im(wb, sheet_name='漢字注音', cell='V3', hue_im=type, han_ji_khoo="河洛話", db_name='Ho_Lok_Ue.db', module_name='mod_河洛話', function_name='han_ji_ca_piau_im') -elif han_ji_khoo == "河洛話" and type == "文讀音": - ca_han_ji_thak_im(wb, sheet_name='漢字注音', cell='V3', hue_im=type, han_ji_khoo="河洛話", db_name='Ho_Lok_Ue.db', module_name='mod_河洛話', function_name='han_ji_ca_piau_im') -elif han_ji_khoo == "廣韻": - ca_han_ji_thak_im(wb, sheet_name='漢字注音', cell='V3', hue_im="文讀音", han_ji_khoo="廣韻", db_name='Kong_Un.db', module_name='mod_廣韻', function_name='han_ji_ca_piau_im') -else: - print("無法執行漢字標音作業,請確認【env】工作表【語音類型】及【漢字庫】欄位的設定是否正確!") - # sys.exit(2) - -# 將檔案存放路徑設為【專案根目錄】之下 -save_as_new_file(wb=wb) \ No newline at end of file +EXIT_CODE_SUCCESS = 0 # 成功 +EXIT_CODE_NO_FILE = 1 # 無法找到檔案 +EXIT_CODE_INVALID_INPUT = 2 # 輸入錯誤 +EXIT_CODE_PROCESS_FAILURE = 3 # 過程失敗 +EXIT_CODE_UNKNOWN_ERROR = 99 # 未知錯誤 + +def main(): + # ========================================================================= + # (1) 取得專案根目錄 + # ========================================================================= + current_file_path = Path(__file__).resolve() + project_root = current_file_path.parent + print(f"專案根目錄為: {project_root}") + + # ========================================================================= + # (2) 若無指定輸入檔案,則獲取當前作用中的 Excel 檔案並另存新檔 + # ========================================================================= + try: + wb = xw.apps.active.books.active + except Exception as e: + print(f"發生錯誤: {e}") + print("無法找到作用中的 Excel 工作簿") + return EXIT_CODE_NO_FILE + + if not wb: + print("無法作業,原因可能為:(1) 未指定輸入檔案;(2) 未找到作用中的 Excel 工作簿!") + return EXIT_CODE_NO_FILE + + try: + cell_value = wb.sheets['漢字注音'].range('V3').value + + # 判斷是否為 None 並執行處理 + if cell_value is None: + print("【待注音漢字】儲存格未填入文字,作業無法繼續。") + return EXIT_CODE_INVALID_INPUT + else: + value_length = len(cell_value.strip()) + print(f"【待注音漢字】總字數為: {value_length}") + + # 將儲存格已填入之漢字及標音清除 + clear_han_ji_kap_piau_im(wb) + + # 將待注音的【漢字儲存格】重設格式 + reset_han_ji_cells(wb) + + # 將待注音的漢字填入 + fill_hanji_in_cells(wb) + + # A731: 自動為漢字查找讀音 + type = get_sound_type(wb) + han_ji_khoo = get_han_ji_khoo(wb) + if han_ji_khoo == "河洛話" and type in ["白話音", "文讀音"]: + ca_han_ji_thak_im(wb, sheet_name='漢字注音', cell='V3', hue_im=type, han_ji_khoo="河洛話", + db_name='Ho_Lok_Ue.db', module_name='mod_河洛話', function_name='han_ji_ca_piau_im') + elif han_ji_khoo == "廣韻": + ca_han_ji_thak_im(wb, sheet_name='漢字注音', cell='V3', hue_im="文讀音", han_ji_khoo="廣韻", + db_name='Kong_Un.db', module_name='mod_廣韻', function_name='han_ji_ca_piau_im') + else: + print("無法執行漢字標音作業,請確認【env】工作表【語音類型】及【漢字庫】欄位的設定是否正確!") + return EXIT_CODE_PROCESS_FAILURE + + # 將檔案存放路徑設為【專案根目錄】之下 + save_as_new_file(wb=wb) + + except Exception as e: + print(f"執行過程中發生未知錯誤: {e}") + return EXIT_CODE_UNKNOWN_ERROR + + return EXIT_CODE_SUCCESS + +if __name__ == "__main__": + exit_code = main() + if exit_code == 0: + print("作業成功完成!") + else: + print(f"程式結束,代碼: {exit_code}") + sys.exit(exit_code) diff --git "a/a701_\344\275\234\346\245\255\344\270\255\346\264\273\351\240\201\346\252\224\345\241\253\345\205\245\346\274\242\345\255\227_ R2.py" "b/a701_\344\275\234\346\245\255\344\270\255\346\264\273\351\240\201\346\252\224\345\241\253\345\205\245\346\274\242\345\255\227_ R2.py" new file mode 100644 index 0000000..b7174d4 --- /dev/null +++ "b/a701_\344\275\234\346\245\255\344\270\255\346\264\273\351\240\201\346\252\224\345\241\253\345\205\245\346\274\242\345\255\227_ R2.py" @@ -0,0 +1,89 @@ +import os +import sys +from pathlib import Path + +import xlwings as xw + +from mod_file_access import get_han_ji_khoo, get_sound_type, save_as_new_file +from p701_Clear_Cells import clear_han_ji_kap_piau_im +from p702_Ca_Han_Ji_Thak_Im import ca_han_ji_thak_im +from p709_reset_han_ji_cells import reset_han_ji_cells +from p710_thiam_han_ji import fill_hanji_in_cells + +EXIT_CODE_SUCCESS = 0 # 成功 +EXIT_CODE_NO_FILE = 1 # 無法找到檔案 +EXIT_CODE_INVALID_INPUT = 2 # 輸入錯誤 +EXIT_CODE_PROCESS_FAILURE = 3 # 過程失敗 +EXIT_CODE_UNKNOWN_ERROR = 99 # 未知錯誤 + +def main(): + # ========================================================================= + # (1) 取得專案根目錄 + # ========================================================================= + current_file_path = Path(__file__).resolve() + project_root = current_file_path.parent + print(f"專案根目錄為: {project_root}") + + # ========================================================================= + # (2) 若無指定輸入檔案,則獲取當前作用中的 Excel 檔案並另存新檔 + # ========================================================================= + try: + wb = xw.apps.active.books.active + except Exception as e: + print(f"發生錯誤: {e}") + print("無法找到作用中的 Excel 工作簿") + return EXIT_CODE_NO_FILE + + if not wb: + print("無法作業,原因可能為:(1) 未指定輸入檔案;(2) 未找到作用中的 Excel 工作簿!") + return EXIT_CODE_NO_FILE + + try: + cell_value = wb.sheets['漢字注音'].range('V3').value + + # 判斷是否為 None 並執行處理 + if cell_value is None: + print("【待注音漢字】儲存格未填入文字,作業無法繼續。") + return EXIT_CODE_INVALID_INPUT + else: + value_length = len(cell_value.strip()) + print(f"【待注音漢字】總字數為: {value_length}") + + # 將儲存格已填入之漢字及標音清除 + clear_han_ji_kap_piau_im(wb) + + # 將待注音的【漢字儲存格】重設格式 + reset_han_ji_cells(wb) + + # 將待注音的漢字填入 + fill_hanji_in_cells(wb) + + # A731: 自動為漢字查找讀音 + type = get_sound_type(wb) + han_ji_khoo = get_han_ji_khoo(wb) + if han_ji_khoo == "河洛話" and type in ["白話音", "文讀音"]: + ca_han_ji_thak_im(wb, sheet_name='漢字注音', cell='V3', hue_im=type, han_ji_khoo="河洛話", + db_name='Ho_Lok_Ue.db', module_name='mod_河洛話', function_name='han_ji_ca_piau_im') + elif han_ji_khoo == "廣韻": + ca_han_ji_thak_im(wb, sheet_name='漢字注音', cell='V3', hue_im="文讀音", han_ji_khoo="廣韻", + db_name='Kong_Un.db', module_name='mod_廣韻', function_name='han_ji_ca_piau_im') + else: + print("無法執行漢字標音作業,請確認【env】工作表【語音類型】及【漢字庫】欄位的設定是否正確!") + return EXIT_CODE_PROCESS_FAILURE + + # 將檔案存放路徑設為【專案根目錄】之下 + save_as_new_file(wb=wb) + + except Exception as e: + print(f"執行過程中發生未知錯誤: {e}") + return EXIT_CODE_UNKNOWN_ERROR + + return EXIT_CODE_SUCCESS + +if __name__ == "__main__": + exit_code = main() + if exit_code == 0: + print("作業成功完成!") + else: + print(f"程式結束,代碼: {exit_code}") + sys.exit(exit_code) diff --git "a/a701_\344\275\234\346\245\255\344\270\255\346\264\273\351\240\201\346\252\224\345\241\253\345\205\245\346\274\242\345\255\227_R1.py" "b/a701_\344\275\234\346\245\255\344\270\255\346\264\273\351\240\201\346\252\224\345\241\253\345\205\245\346\274\242\345\255\227_R1.py" new file mode 100644 index 0000000..765eb42 --- /dev/null +++ "b/a701_\344\275\234\346\245\255\344\270\255\346\264\273\351\240\201\346\252\224\345\241\253\345\205\245\346\274\242\345\255\227_R1.py" @@ -0,0 +1,141 @@ +import logging +import os +import sys +from pathlib import Path + +import xlwings as xw +from dotenv import load_dotenv + +# ========================================================================= +# 載入環境變數 +# ========================================================================= +load_dotenv() + +# 預設檔案名稱從環境變數讀取 +DB_HO_LOK_UE = os.getenv('DB_HO_LOK_UE', 'Ho_Lok_Ue.db') +DB_KONG_UN = os.getenv('DB_KONG_UN', 'Kong_Un.db') + +# ========================================================================= +# 設定日誌 +# ========================================================================= +logging.basicConfig( + filename='process_log.txt', + level=logging.INFO, + format='%(asctime)s - %(levelname)s - %(message)s' +) + +# ========================================================================= +# 定義 Exit Code +# ========================================================================= +EXIT_CODE_SUCCESS = 0 # 成功 +EXIT_CODE_NO_FILE = 1 # 無法找到檔案 +EXIT_CODE_INVALID_INPUT = 2 # 輸入錯誤 +EXIT_CODE_PROCESS_FAILURE = 3 # 過程失敗 +EXIT_CODE_UNKNOWN_ERROR = 99 # 未知錯誤 + + +def main(): + logging.info("作業開始") + + # ========================================================================= + # (1) 取得專案根目錄 + # ========================================================================= + current_file_path = Path(__file__).resolve() + project_root = current_file_path.parent + print(f"專案根目錄為: {project_root}") + logging.info(f"專案根目錄為: {project_root}") + + # ========================================================================= + # (2) 嘗試獲取當前作用中的 Excel 工作簿 + # ========================================================================= + wb = None + try: + wb = xw.apps.active.books.active + except Exception as e: + logging.error(f"無法找到作用中的 Excel 工作簿: {e}", exc_info=True) + print("無法找到作用中的 Excel 工作簿") + return EXIT_CODE_NO_FILE + + if not wb: + print("無法作業,原因可能為:(1) 未指定輸入檔案;(2) 未找到作用中的 Excel 工作簿!") + logging.error("無法作業,未指定輸入檔案或 Excel 無效。") + return EXIT_CODE_NO_FILE + + try: + # ========================================================================= + # (3) 讀取儲存格資料 + # ========================================================================= + cell_value = wb.sheets['漢字注音'].range('V3').value + + if cell_value is None: + print("【待注音漢字】儲存格未填入文字,作業無法繼續。") + logging.warning("【待注音漢字】儲存格為空") + return EXIT_CODE_INVALID_INPUT + + value_length = len(cell_value.strip()) + print(f"【待注音漢字】總字數為: {value_length}") + logging.info(f"【待注音漢字】總字數為: {value_length}") + + # ========================================================================= + # (4) 執行 Excel 作業 + # ========================================================================= + print("正在清除儲存格...") + clear_han_ji_kap_piau_im(wb) + logging.info("儲存格清除完畢") + + print("重設格式...") + reset_han_ji_cells(wb) + logging.info("儲存格格式重設完畢") + + print("填入待注音漢字...") + fill_hanji_in_cells(wb) + logging.info("填入待注音漢字完成") + + # ========================================================================= + # (5) 自動查找讀音 + # ========================================================================= + type = get_sound_type(wb) + han_ji_khoo = get_han_ji_khoo(wb) + + if han_ji_khoo in ["河洛話", "廣韻"]: + db_name = DB_HO_LOK_UE if han_ji_khoo == "河洛話" else DB_KONG_UN + module_name = 'mod_河洛話' if han_ji_khoo == "河洛話" else 'mod_廣韻' + hue_im = type if han_ji_khoo == "河洛話" else "文讀音" + + logging.info(f"開始標音作業 - {han_ji_khoo}: {type}") + ca_han_ji_thak_im(wb, sheet_name='漢字注音', cell='V3', hue_im=hue_im, + han_ji_khoo=han_ji_khoo, db_name=db_name, + module_name=module_name, function_name='han_ji_ca_piau_im') + logging.info(f"標音作業完成 - {han_ji_khoo}: {type}") + else: + print("無法執行漢字標音作業,請確認設定是否正確!") + logging.warning("無法執行標音作業,檢查【env】設定。") + return EXIT_CODE_PROCESS_FAILURE + + # ========================================================================= + # (6) 儲存檔案 + # ========================================================================= + print("儲存檔案...") + save_as_new_file(wb=wb) + logging.info("檔案已成功儲存") + + except Exception as e: + print(f"執行過程中發生未知錯誤: {e}") + logging.error(f"執行過程中發生未知錯誤: {e}", exc_info=True) + return EXIT_CODE_UNKNOWN_ERROR + + finally: + if wb: + # 是否關閉 Excel 視窗可根據需求決定 + xw.apps.active.quit() # 確保 Excel 被釋放資源,避免開啟殘留 + + return EXIT_CODE_SUCCESS + + +if __name__ == "__main__": + exit_code = main() + if exit_code == EXIT_CODE_SUCCESS: + print("作業成功完成!") + else: + print(f"程式結束,代碼: {exit_code}") + sys.exit(exit_code) diff --git a/output7/working.xlsx b/output7/working.xlsx new file mode 100644 index 0000000..569d5dc Binary files /dev/null and b/output7/working.xlsx differ diff --git "a/output7/\343\200\220\346\262\263\346\264\233\347\231\275\350\251\261\346\263\250\351\237\263-\351\233\205\344\277\227\351\200\232\343\200\221\343\200\212\345\260\232\346\234\211\345\212\233\351\207\217\347\232\204\346\257\217\346\227\245\347\245\210\347\246\261\346\226\207\343\200\213.xlsx" "b/output7/\343\200\220\346\262\263\346\264\233\347\231\275\350\251\261\346\263\250\351\237\263-\351\233\205\344\277\227\351\200\232\343\200\221\343\200\212\345\260\232\346\234\211\345\212\233\351\207\217\347\232\204\346\257\217\346\227\245\347\245\210\347\246\261\346\226\207\343\200\213.xlsx" new file mode 100644 index 0000000..3410ec6 Binary files /dev/null and "b/output7/\343\200\220\346\262\263\346\264\233\347\231\275\350\251\261\346\263\250\351\237\263-\351\233\205\344\277\227\351\200\232\343\200\221\343\200\212\345\260\232\346\234\211\345\212\233\351\207\217\347\232\204\346\257\217\346\227\245\347\245\210\347\246\261\346\226\207\343\200\213.xlsx" differ diff --git "a/output7/\343\200\220\346\262\263\346\264\233\350\251\261\346\263\250\351\237\263\343\200\221\343\200\212\345\260\232\346\234\211\345\212\233\351\207\217\347\232\204\346\257\217\346\227\245\347\245\210\347\246\261\346\226\207\343\200\213.xlsx" "b/output7/\343\200\220\346\262\263\346\264\233\350\251\261\346\263\250\351\237\263\343\200\221\343\200\212\345\260\232\346\234\211\345\212\233\351\207\217\347\232\204\346\257\217\346\227\245\347\245\210\347\246\261\346\226\207\343\200\213.xlsx" new file mode 100644 index 0000000..87bd6f4 Binary files /dev/null and "b/output7/\343\200\220\346\262\263\346\264\233\350\251\261\346\263\250\351\237\263\343\200\221\343\200\212\345\260\232\346\234\211\345\212\233\351\207\217\347\232\204\346\257\217\346\227\245\347\245\210\347\246\261\346\226\207\343\200\213.xlsx" differ