diff --git a/.vscode/launch.json b/.vscode/launch.json index 0cd46a5..57ec557 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -40,10 +40,17 @@ "console": "integratedTerminal", }, { - "name": "a704_批次式查找及填入漢字標音", + "name": "a704_製作其它漢字標音", "type": "debugpy", "request": "launch", - "program": "a704_批次式查找及填入漢字標音.py", + "program": "a704_製作其它漢字標音.py", + "console": "integratedTerminal", + }, + { + "name": "a710_批次式漢字標音及網頁製作", + "type": "debugpy", + "request": "launch", + "program": "a710_批次式漢字標音及網頁製作.py", "console": "integratedTerminal", }, { diff --git "a/Documents/\347\231\275\350\251\261\351\237\263/\346\262\263\346\264\233\350\251\261_\346\274\242\345\255\227\345\272\253.xlsx" "b/Documents/\347\231\275\350\251\261\351\237\263/\346\262\263\346\264\233\350\251\261_\346\274\242\345\255\227\345\272\253.xlsx" index 3336c20..452102b 100644 Binary files "a/Documents/\347\231\275\350\251\261\351\237\263/\346\262\263\346\264\233\350\251\261_\346\274\242\345\255\227\345\272\253.xlsx" and "b/Documents/\347\231\275\350\251\261\351\237\263/\346\262\263\346\264\233\350\251\261_\346\274\242\345\255\227\345\272\253.xlsx" differ diff --git a/Ho_Lok_Ue.db b/Ho_Lok_Ue.db index 218f5d4..e9d99d1 100644 Binary files a/Ho_Lok_Ue.db and b/Ho_Lok_Ue.db differ diff --git "a/a702_\346\237\245\346\211\276\345\217\212\345\241\253\345\205\245\346\274\242\345\255\227\346\250\231\351\237\263.py" "b/a702_\346\237\245\346\211\276\345\217\212\345\241\253\345\205\245\346\274\242\345\255\227\346\250\231\351\237\263.py" index 5bc40d4..2980497 100644 --- "a/a702_\346\237\245\346\211\276\345\217\212\345\241\253\345\205\245\346\274\242\345\255\227\346\250\231\351\237\263.py" +++ "b/a702_\346\237\245\346\211\276\345\217\212\345\241\253\345\205\245\346\274\242\345\255\227\346\250\231\351\237\263.py" @@ -3,7 +3,12 @@ import xlwings as xw -from mod_file_access import get_han_ji_khoo, get_sound_type +from mod_file_access import ( + copy_excel_sheet, + get_han_ji_khoo, + get_sound_type, + reset_han_ji_piau_im_cells, +) from p702_Ca_Han_Ji_Thak_Im import ca_han_ji_thak_im # from p703_Kong_Un_Ca_Thak_Im import ca_han_ji_thak_im diff --git "a/a703_\350\243\275\344\275\234\346\250\231\351\237\263\347\266\262\351\240\201.py" "b/a703_\350\243\275\344\275\234\346\250\231\351\237\263\347\266\262\351\240\201.py" index dd3e506..c29e4f5 100644 --- "a/a703_\350\243\275\344\275\234\346\250\231\351\237\263\347\266\262\351\240\201.py" +++ "b/a703_\350\243\275\344\275\234\346\250\231\351\237\263\347\266\262\351\240\201.py" @@ -26,7 +26,7 @@ file_name = wb.name print(f"檔案名稱: {file_name}") -# 顯示「已輸入之拼音字母及注音符號」 +# 顯示「已輸入之拼音字母及注音符號」 # named_range = wb.names['顯示注音輸入'] # 選擇名為 "顯示注音輸入" 的命名範圍# 選擇名為 "顯示注音輸入" 的命名範圍 # named_range.refers_to_range.value = True named_range = get_named_value(wb, '顯示注音輸入', True) @@ -37,7 +37,8 @@ sheet.range('A1').select() # 將 A1 儲存格設為作用儲存格 # (2) A740: 將【漢字注音】工作表的內容,轉成 HTML 網頁檔案。 -tng_sing_bang_iah(wb, '漢字注音', 'V3') +# tng_sing_bang_iah(wb, '漢字注音', 'V3') +tng_sing_bang_iah(wb, '十五音', 'V3') # (3) A750: 將 Tai_Gi_Zu_Im_Bun.xlsx 檔案,依 env 工作表的設定,另存新檔到指定目錄。 try: @@ -51,9 +52,9 @@ ).strip() # 設定檔案輸出路徑,存於專案根目錄下的 output2 資料夾 -output_path = wb.names['OUTPUT_PATH'].refers_to_range.value +output_path = wb.names['OUTPUT_PATH'].refers_to_range.value new_file_path = os.path.join( - ".\\{0}".format(output_path), + ".\\{0}".format(output_path), f"【河洛話注音】{file_name}.xlsx") # 儲存新建立的工作簿 diff --git "a/a704_\350\243\275\344\275\234\345\205\266\345\256\203\346\274\242\345\255\227\346\250\231\351\237\263.py" "b/a704_\350\243\275\344\275\234\345\205\266\345\256\203\346\274\242\345\255\227\346\250\231\351\237\263.py" new file mode 100644 index 0000000..e08afc6 --- /dev/null +++ "b/a704_\350\243\275\344\275\234\345\205\266\345\256\203\346\274\242\345\255\227\346\250\231\351\237\263.py" @@ -0,0 +1,67 @@ +import os +import sys + +import xlwings as xw + +from mod_file_access import copy_excel_sheet, reset_han_ji_piau_im_cells +from p704_漢字以十五音標注音 import zap_goo_im_piau_im + +# from p703_Kong_Un_Ca_Thak_Im import ca_han_ji_thak_im + +# (0) 取得專案根目錄。 +# 使用已打開且處於作用中的 Excel 工作簿 +try: + wb = xw.apps.active.books.active +except Exception as e: + print(f"發生錯誤: {e}") + print("無法找到作用中的 Excel 工作簿") + sys.exit(2) + +# 獲取活頁簿的完整檔案路徑 +file_path = wb.fullname +print(f"完整檔案路徑: {file_path}") + +# 獲取活頁簿的檔案名稱(不包括路徑) +file_name = wb.name +print(f"檔案名稱: {file_name}") + +# 顯示「已輸入之拼音字母及注音符號」 +named_range = wb.names['顯示注音輸入'] # 選擇名為 "顯示注音輸入" 的命名範圍# 選擇名為 "顯示注音輸入" 的命名範圍 +named_range.refers_to_range.value = True + +# (1) A720: 將 V3 儲存格內的漢字,逐個填入標音用方格。 +sheet = wb.sheets['漢字注音'] # 選擇工作表 +sheet.activate() # 將「漢字注音」工作表設為作用中工作表 +sheet.range('A1').select() # 將 A1 儲存格設為作用儲存格 + +# (2) 複製【漢字注音】工作表,並將【漢字注音】工作表已有漢字標清除(不含上列之【台語音標】) +# copy_excel_sheet(wb, '漢字注音', '十五音') +reset_han_ji_piau_im_cells(wb, '十五音') +zap_goo_im_piau_im(wb, sheet_name='十五音', cell='V3', hue_im="白話音") + +# (3) A740: 將【漢字注音】工作表的內容,轉成 HTML 網頁檔案。 +# tng_sing_bang_iah(wb, '漢字注音', 'V3') + +# (4) A750: 將 Tai_Gi_Zu_Im_Bun.xlsx 檔案,依 env 工作表的設定,另存新檔到指定目錄。 +try: + file_name = str(wb.names['TITLE'].refers_to_range.value).strip() +except KeyError: + # print("未找到命名範圍 'TITLE',使用預設名稱") + # file_name = "default_file_name.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) + +# 保存 Excel 檔案 +# wb.close() + diff --git "a/docs/\343\200\212\346\255\270\345\216\273\344\276\206\350\276\255\343\200\213\343\200\220\346\262\263\346\264\233\347\231\275\350\251\261\351\237\263\343\200\221.html" "b/docs/\343\200\212\346\255\270\345\216\273\344\276\206\350\276\255\343\200\213\343\200\220\346\262\263\346\264\233\347\231\275\350\251\261\351\237\263\343\200\221.html" new file mode 100644 index 0000000..03cb91a --- /dev/null +++ "b/docs/\343\200\212\346\255\270\345\216\273\344\276\206\350\276\255\343\200\213\343\200\220\346\262\263\346\264\233\347\231\275\350\251\261\351\237\263\343\200\221.html" @@ -0,0 +1,425 @@ + + + + + 《歸去來辭》【河洛白話音】 + + + + + 《歸去來辭》【河洛白話音】 +
+ + 《歸去來辭》【河洛白話音】 + +
+ +

+kui1規一求 +khi3居三去 +lai5皆五柳 +e5伽五英 + +tshan5干五出 +hng5鋼五喜 +tsiang3姜三ㄐ +bu5艍五門 +oo5沽五英 +m7姆七英 +kui1規一求 + +ki3居三求 +tsu7艍七曾 +i2居二英 +sim1金一ㄒ +ui7規七英 +hing5經五喜 +iah8迦八英 + +he5伽五喜 +tiu5丩五地 +tiong3恭三地 +li5居五柳 +tak8江八地 +pi1居一邊 + +goo7沽七語 +i2居二英 +ong2公二英 +tsi1居一ㄐ +m7姆七英 +kan3干三求 + +tsai1皆一曾 +lai5皆五柳 +tsia2迦二ㄐ +tsi1居一ㄐ +kho2高二去 +tui1規一地 + +sit8巾八ㄒ +be5伽五門 +too5沽五地 +ki5居五求 +bi7居七門 +hng7鋼七喜 + +kak4江四求 +kin1巾一求 +si7居七ㄒ +li5居五柳 +tsa7膠七曾 +hui1規一喜 + +tsiu1丩一ㄐ +iau5嬌五英 +iau5嬌五英 +i2居二英 +khin1巾一去 +iong5恭五英 + +hong1公一喜 +phiau1嬌一頗 +phiau1嬌一頗 +li5居五柳 +tshue1檜一出 +i1居一英 + +mng7鋼七毛 +tsing1經一ㄐ +hu1艍一喜 +i2居二英 +tsing5經五ㄐ +loo7沽七柳 + +hin7巾七喜 +sin5巾五ㄒ +kng1鋼一求 +tsi1居一ㄐ +hi1居一喜 +bi5居五門 + +nai2皆二耐 +tsiam1兼一ㄐ +hing5經五喜 +u2艍二英 + +tsai2皆二曾 +him1金一喜 +tsai2皆二曾 +phun1君一頗 + +tong5公五地 +phak4江四頗 +huann1官一喜 +ngia5迦五雅 + +ti7居七地 +kiann2驚二求 +hau7交七喜 +mng5鋼五毛 + +sann1監一時 +king3經三求 +tio7茄七地 +huinn1褌一喜 + +tshing5經五ㄑ +kik4經四求 +iau2嬌二英 +tsun5君五曾 + +he5伽五喜 +iu3丩三英 +jip8金八ㆢ +sit4巾四ㄒ + +u7艍七英 +tsiu2丩二ㄐ +ing5經五英 +tsun1君一曾 + +in2巾二英 +oo5沽五英 +siong1恭一ㄒ +i2居二英 +tsu7艍七曾 +tsiok4恭四ㄐ + +bian2堅二門 +tiann5驚五地 +kua1瓜一求 +i2居二英 +i5居五英 +gan5干五語 + +ua2瓜二英 +lam5甘五柳 +thang1江一他 +i2居二英 +kia3迦三求 +ngoo7沽七雅 + +sim2金二ㄒ +iong5恭五英 +sik4經四ㄒ +tsi1居一ㄐ +i7居七英 +an1干一英 + +hng5鋼五喜 +lit8巾八柳 +siap8兼八ㄒ +i2居二英 +siann5驚五ㄒ +tshu3艍三出 + +mng5鋼五毛 +sui1規一時 +siat4堅四ㄒ +li5居五柳 +siang5姜五ㄒ +kuan1觀一求 + +tshik4經四ㄑ +phoo5沽五頗 +lau7交七柳 +i2居二英 +lau5交五柳 +khe3伽三去 + +si5居五ㄒ +kiau2嬌二求 +siu2丩二ㄒ +li5居五柳 +ha5膠五喜 +kuan1觀一求 + +hun5君五喜 +bo5高五門 +sim1金一ㄒ +i2居二英 +tshut4君四出 +siu7丩七ㄒ + +tsiau2嬌二ㄐ +kuan7觀七求 +pue1檜一邊 +li5居五柳 +tsai1皆一曾 +huan5觀五喜 + +king2經二求 +e3伽三英 +e3伽三英 +i2居二英 +tsiang3姜三ㄐ +jip8金八ㆢ + +hu2艍二喜 +koo1沽一求 +tshing5經五ㄑ +li5居五柳 +puann5官五邊 +huan5觀五喜 + +

+

+kui1規一求 +khi3居三去 +lai5皆五柳 +e5伽五英 + +tshiann2驚二ㄑ +sit4巾四ㄒ +ka1膠一求 +i2居二英 +tsuat8觀八曾 +iu5丩五英 + +se3伽三時 +u2艍二英 +gua2瓜二語 +li5居五柳 +siunn1牛一ㄒ +i5居五英 + +hok4公四喜 +ka3膠三求 +gan5干五語 +e5伽五英 +ian1堅一英 +kiu5丩五求 + +iat8堅八英 +tshin1巾一ㄑ +tshik4經四ㄑ +tsi1居一ㄐ +tsing5經五ㄐ +hua7瓜七喜 + +loh8高八柳 +khim5金五去 +tsu1艍一曾 +i2居二英 +siau1嬌一ㄒ +iu1丩一英 + +long5公五柳 +lang5江五柳 +ko3高三求 +u5艍五英 +i2居二英 +tshun1君一出 +kip8金八求 + +tsiang3姜三ㄐ +u7艍七英 +tai7皆七地 +hoonn3姑三喜 +西sai1皆一時 +tiu5丩五地 + +iah8迦八英 +mia7迦七毛 +kun1君一求 +tshia1迦一ㄑ + +iah8迦八英 +tsau7交七曾 +koo1沽一求 +tsiu1丩一ㄐ + +ki3居三求 +iau2嬌二英 +thiau2嬌二他 +i2居二英 +tshue7檜七出 +hok4公四喜 + +iah8迦八英 +kia7迦七求 +khu1艍一去 +li5居五柳 +king1經一求 +khu1艍一去 + +bak8江八門 +him1金一喜 +him1金一喜 +i2居二英 +hiong3恭三喜 +ing5經五英 + +tsuann5官五曾 +kuan1觀一求 +kuan1觀一求 +li5居五柳 +su2艍二時 +lau5交五柳 + +sian7堅七ㄒ +ban7干七門 +mih8居八毛 +tsi1居一ㄐ +tit4巾四地 +si5居五ㄒ + +kam2甘二求 +ngoo5沽五雅 +senn1更一時 +tsi1居一ㄐ +kiann5驚五求 +hiu1丩一喜 + +

+

+i2居二英 +i2居二英 +hoonn3姑三喜 + +gu7艍七語 +hing5經五喜 +u2艍二英 +lai7皆七柳 +hok4公四喜 +kui2規二求 +si5居五ㄒ + +hat4干四喜 +m7姆七英 +ui2規二英 +sim1金一ㄒ +jim7金七ㆢ +khi3居三去 +lau5交五柳 + +oo5沽五英 +ui7規七英 +hong5公五喜 +hong5公五喜 +beh4伽四門 +ho5高五喜 +tsi1居一ㄐ + +hu3艍三喜 +kui3規三求 +hui1規一喜 +ngoo5沽五雅 +guan7觀七語 + +te3伽三地 +hiang1姜一喜 +m7姆七英 +kho2高二去 +ki5居五求 + +huai5乖五喜 +liang5姜五柳 +sin5巾五ㄒ +i2居二英 +koo1沽一求 +ong2公二英 + +iah8迦八英 +sit8巾八ㄒ +thng7鋼七他 +li5居五柳 +un5君五英 +tsu2艍二曾 + +ting1經一地 +tang1江一地 +ko1高一求 +i2居二英 +soo1沽一時 +siau3嬌三ㄒ + +lim5金五柳 +tshinn1梔一ㄑ +lau5交五柳 +li5居五柳 +hu3艍三喜 +si1居一ㄒ + +liau5嬌五柳 +sing5經五ㄒ +hua3瓜三喜 +i2居二英 +kui1規一求 +tsin7巾七ㄐ + +loh8高八柳 +hu1艍一喜 +thinn1梔一他 +mia7迦七毛 +hok4公四喜 +he5伽五喜 +gi5居五語 + +

+

+ + + \ No newline at end of file diff --git a/mod_file_access.py b/mod_file_access.py index 95ac439..4ab86a7 100644 --- a/mod_file_access.py +++ b/mod_file_access.py @@ -304,3 +304,36 @@ def save_as_excel_file(excel_workbook): time.sleep(3) +def copy_excel_sheet(excel_workbook, source_name='漢字注音', sheet_name='working'): + # 複製工作表 + try: + source_sheet = excel_workbook.sheets[source_name] + new_sheet = source_sheet.copy(after=source_sheet) + new_sheet.name = sheet_name + print(f"將【{source_name}】工作表複製成:,【{sheet_name}】工作表。") + except Exception as e: + print(f"複製工作表失敗,原因:{e}") + return + + # 等待一段時間讓 copy 完成 + time.sleep(3) + + +#-------------------------------------------------------------------------- +# 將【漢字標音】儲存格內的資料清除 +#-------------------------------------------------------------------------- +def reset_han_ji_piau_im_cells(wb, sheet_name='漢字注音'): + sheet = wb.sheets[sheet_name] # 選擇工作表 + sheet.activate() # 將「漢字注音」工作表設為作用中工作表 + sheet.range('A1').select() # 將 A1 儲存格設為作用儲存格 + + # 取得每頁總列數 = 迴圈執行總次數 + total_rows = int(wb.names['每頁總列數'].refers_to_range.value) + start_row_no = 6 + row_step = 4 # 每次跳過 4 行 + + for i in range(total_rows): + # 計算要清除的行號,從 start_row_no 開始,依次遞增 4 行 + current_row_no = start_row_no + i * row_step + # 清除指定範圍的內容 + sheet.range(f'D{current_row_no}:R{current_row_no}').clear_contents() \ No newline at end of file diff --git "a/mod_\346\250\231\351\237\263.py" "b/mod_\346\250\231\351\237\263.py" index 9328c03..b53502f 100644 --- "a/mod_\346\250\231\351\237\263.py" +++ "b/mod_\346\250\231\351\237\263.py" @@ -130,4 +130,71 @@ def TL_Tng_Zu_Im(siann_bu, un_bu, siann_tiau, cursor): '聲調': zu_im_siann_tiau } +# 台語音標轉換為方音符號 +def TLPA_Tng_Zap_Goo_Im(siann_bu, un_bu, siann_tiau, cursor): + """ + 根據傳入的台語音標聲母、韻母、聲調,轉換成對應的方音符號 + :param siann_bu: 聲母 (台語音標) + :param un_bu: 韻母 (台語音標) + :param siann_tiau: 聲調 (台語音標中的數字) + :param cursor: 數據庫游標 + :return: 包含方音符號的字典 + """ + + # 如果聲母為 None、空字串或空集合符號(無聲母),將其設為 '英' + if siann_bu in [None, '', '∅']: # 假設空集合符號用 '∅' 表示 + zu_im_siann_bu = '英' # 無聲母的情況 + else: + # 查詢聲母表,將台語音標的聲母轉換成方音符號 + cursor.execute("SELECT 十五音 FROM 聲母對照表 WHERE 台語音標 = ?", (siann_bu,)) + siann_bu_result = cursor.fetchone() + if siann_bu_result: + zu_im_siann_bu = siann_bu_result[0] # 取得方音符號 + else: + zu_im_siann_bu = '英' # 無聲母的情況 + + # 查詢韻母表,將台語音標的韻母轉換成方音符號 + cursor.execute("SELECT 十五音 FROM 韻母對照表 WHERE 台語音標 = ?", (un_bu,)) + un_bu_result = cursor.fetchone() + if un_bu_result: + zu_im_un_bu = un_bu_result[0] # 取得方音符號 + else: + zu_im_un_bu = '' + + # 查詢聲調表,將台語音標的聲調轉換成方音符號 + cursor.execute("SELECT 十五音聲調 FROM 聲調對照表 WHERE 台羅調號 = ?", (siann_tiau,)) + siann_tiau_result = cursor.fetchone() + if siann_tiau_result: + zu_im_siann_tiau = siann_tiau_result[0] # 取得方音符號 + else: + zu_im_siann_tiau = '' + + #======================================================================= + # 【聲母】校調 + # + # 齒間音【聲母】:ㄗ、ㄘ、ㄙ、ㆡ,若其後所接【韻母】之第一個符號亦為:ㄧ、ㆪ時,須變改 + # 為:ㄐ、ㄑ、ㄒ、ㆢ。 + #----------------------------------------------------------------------- + # 參考 RIME 輸入法如下規則: + # - xform/ㄗ(ㄧ|ㆪ)/ㄐ$1/ + # - xform/ㄘ(ㄧ|ㆪ)/ㄑ$1/ + # - xform/ㄙ(ㄧ|ㆪ)/ㄒ$1/ + # - xform/ㆡ(ㄧ|ㆪ)/ㆢ$1/ + #======================================================================= + # 比對聲母是否為 ㄗ、ㄘ、ㄙ、ㆡ,且韻母的第一個符號是 ㄧ 或 ㆪ + if siann_bu == 'z' and (un_bu[0] == 'i' or un_bu == 'inn'): + zu_im_siann_bu = 'ㄐ' + elif siann_bu == 'c' and (un_bu[0] == 'i' or un_bu == 'inn'): + zu_im_siann_bu = 'ㄑ' + elif siann_bu == 's' and (un_bu[0] == 'i' or un_bu == 'inn'): + zu_im_siann_bu = 'ㄒ' + elif siann_bu == 'j' and (un_bu[0] == 'i' or un_bu == 'inn'): + zu_im_siann_bu = 'ㆢ' + + return { + '漢字標音': f"{zu_im_un_bu}{zu_im_siann_tiau}{zu_im_siann_bu}", + '聲母': zu_im_siann_bu, + '韻母': zu_im_un_bu, + '聲調': zu_im_siann_tiau + } diff --git "a/output6/\343\200\220\346\262\263\346\264\233\350\251\261\346\263\250\351\237\263\343\200\221\343\200\212\346\255\270\345\216\273\344\276\206\350\276\255\343\200\213\343\200\220\346\262\263\346\264\233\347\231\275\350\251\261\351\237\263\343\200\221.xlsx" "b/output6/\343\200\220\346\262\263\346\264\233\350\251\261\346\263\250\351\237\263\343\200\221\343\200\212\346\255\270\345\216\273\344\276\206\350\276\255\343\200\213\343\200\220\346\262\263\346\264\233\347\231\275\350\251\261\351\237\263\343\200\221.xlsx" new file mode 100644 index 0000000..76e7550 Binary files /dev/null and "b/output6/\343\200\220\346\262\263\346\264\233\350\251\261\346\263\250\351\237\263\343\200\221\343\200\212\346\255\270\345\216\273\344\276\206\350\276\255\343\200\213\343\200\220\346\262\263\346\264\233\347\231\275\350\251\261\351\237\263\343\200\221.xlsx" differ diff --git "a/output6/\343\200\220\346\262\263\346\264\233\350\251\261\346\263\250\351\237\263\343\200\221\343\200\212\346\264\233\347\245\236\350\263\246\343\200\213\343\200\220\346\262\263\346\264\233\347\231\275\350\251\261\351\237\263\343\200\221.xlsx" "b/output6/\343\200\220\346\262\263\346\264\233\350\251\261\346\263\250\351\237\263\343\200\221\343\200\212\346\264\233\347\245\236\350\263\246\343\200\213\343\200\220\346\262\263\346\264\233\347\231\275\350\251\261\351\237\263\343\200\221.xlsx" new file mode 100644 index 0000000..13882bd Binary files /dev/null and "b/output6/\343\200\220\346\262\263\346\264\233\350\251\261\346\263\250\351\237\263\343\200\221\343\200\212\346\264\233\347\245\236\350\263\246\343\200\213\343\200\220\346\262\263\346\264\233\347\231\275\350\251\261\351\237\263\343\200\221.xlsx" differ diff --git "a/p704_\346\274\242\345\255\227\344\273\245\345\215\201\344\272\224\351\237\263\346\250\231\346\263\250\351\237\263.py" "b/p704_\346\274\242\345\255\227\344\273\245\345\215\201\344\272\224\351\237\263\346\250\231\346\263\250\351\237\263.py" new file mode 100644 index 0000000..50c0aff --- /dev/null +++ "b/p704_\346\274\242\345\255\227\344\273\245\345\215\201\344\272\224\351\237\263\346\250\231\346\263\250\351\237\263.py" @@ -0,0 +1,101 @@ +# 查找漢字讀音,並標註台語音標和注音符號 +import sqlite3 + +import xlwings as xw + +from mod_file_access import load_module_function +from mod_標音 import is_valid_han_ji, split_zu_im + + +# 十五音標注音 +def zap_goo_im_piau_im(wb, sheet_name='十五音', cell='V3', hue_im="白話音", han_ji_khoo="河洛話", db_name='Ho_Lok_Ue.db', module_name='mod_標音', function_name='TLPA_Tng_Zap_Goo_Im'): + # 顯示「已輸入之拼音字母及注音符號」 + named_range = wb.names['顯示注音輸入'] + named_range.refers_to_range.value = True + + # 選擇工作表 + sheet = wb.sheets[sheet_name] + sheet.activate() + sheet.range('A1').select() + + # 取得 V3 儲存格的字串及總漢字數 + v3_value = sheet.range(cell).value + total_length = len(v3_value) + + # 每頁最多處理 20 列 + TOTAL_ROWS = int(wb.names['每頁總列數'].refers_to_range.value) + # 每列最多處理 15 字元 + CHARS_PER_ROW = int(wb.names['每列總字數'].refers_to_range.value) + # 設定起始及結束的欄位 (【D欄=4】到【R欄=18】) + start = 4 + end = start + CHARS_PER_ROW + + # 檢查儲存格數是否足夠 + if total_length > (CHARS_PER_ROW * TOTAL_ROWS): + print("可供作業之儲存格數太少,無法進行作業!") + return + + # 動態載入查找函數:漢字標音轉換 + han_ji_tng_piau_im = load_module_function(module_name, function_name) + + # 連接指定資料庫 + conn = sqlite3.connect(db_name) + cursor = conn.cursor() + + # 初始化行數和索引 + row = 5 + index = 0 + + while index < total_length: + sheet.range((row, 1)).select() # 選擇行起始儲存格 + + for col in range(start, end): + if index >= total_length: + break # 當所有漢字處理完畢時,停止內部迴圈 + + # han_ji = v3_value[index] # 從 V3 字串中取得漢字 + col_name = xw.utils.col_name(col) + char = v3_value[index] + if char == "\n": + index += 1 + break + + cell_value = sheet.range((row, col)).value + if not is_valid_han_ji(cell_value): + msg = cell_value + print(f"({row}, {col_name}) = {msg}") + index += 1 + continue + else: + han_ji = cell_value + + # 從【台語音標】儲存格讀取聲母、韻母、聲調 + lo_ma_im_piau = sheet.range((row - 1, col)).value + if lo_ma_im_piau: + try: + siann_bu, un_bu, siann_tiau = split_zu_im(lo_ma_im_piau) + except ValueError as e: + print(f"【台語音標】資料格式錯誤於({row - 1}, {col}): {e}") + index += 1 + continue + + # 使用 TLPA_Tng_Zap_Goo_Im 函數轉換成十五音 + zu_im_hu_ho = han_ji_tng_piau_im(siann_bu=siann_bu, un_bu=un_bu, siann_tiau=siann_tiau, cursor=cursor) + + # 將十五音結果寫入【漢字注音】儲存格 + sheet.range((row + 1, col)).value = zu_im_hu_ho['漢字標音'] + print(f"({row + 1}, {xw.utils.col_name(col)}) = 【{han_ji}】{zu_im_hu_ho['漢字標音']}") + else: + print(f"缺少【台語音標】於({row - 1}, {col})") + + index += 1 # 處理下一個漢字 + + row += 4 # 移動到下一組儲存格區域 + + print("已完成【十五音】標注音工作。") + + # 關閉資料庫連線 + conn.close() + + # 保存活頁簿 + wb.save() diff --git a/p730_Tng_Sing_Bang_Iah.py b/p730_Tng_Sing_Bang_Iah.py index 6234aca..00fe5ba 100644 --- a/p730_Tng_Sing_Bang_Iah.py +++ b/p730_Tng_Sing_Bang_Iah.py @@ -173,7 +173,9 @@ def tng_sing_bang_iah(wb, sheet_name='漢字注音', cell='V3', page_type='含 global total_length # 宣告 end_of_source_row 為全域變數 # 選擇指定的工作表 - sheet = wb.sheets[sheet_name] + sheet = wb.sheets[sheet_name] # 選擇工作表 + sheet.activate() # 將「漢字注音」工作表設為作用中工作表 + sheet.range('A1').select() # 將 A1 儲存格設為作用儲存格 source_sheet_name = sheet.name # -----------------------------------------------------