Skip to content

Commit

Permalink
重構程式,以便未來方便修訂
Browse files Browse the repository at this point in the history
  • Loading branch information
AlanJui committed Sep 26, 2024
1 parent 53fe5e8 commit 1d32e8c
Show file tree
Hide file tree
Showing 11 changed files with 248 additions and 153 deletions.
Binary file modified Tai_Gi_Zu_Im_Bun.xlsx
Binary file not shown.
2 changes: 0 additions & 2 deletions a710_清理原填入漢字及注音.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@

import settings
from p701_Clear_Cells import clear_hanji_in_cells
from p710_thiam_han_ji import fill_hanji_in_cells


def get_input_and_output_options(argv):
Expand Down Expand Up @@ -77,7 +76,6 @@ def get_input_and_output_options(argv):
# - 下方:台語注音符號
# =========================================================================
clear_hanji_in_cells(wb) # 清除先前已填入的漢字、注音符號
wb.sheets['漢字注音'].range("V3").value = ""

# =========================================================================
# (3) 依據《文章標題》另存新檔。
Expand Down
1 change: 0 additions & 1 deletion a730_將漢字注音填入.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@

import settings
from p720_Thiam_Zu_Im import thiam_zu_im
from p730_Tng_Sing_Bang_Iah import tng_sing_bang_iah


def get_input_and_output_options(argv):
Expand Down
4 changes: 3 additions & 1 deletion docs/assets/styles/styles.css
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,9 @@
}

body {
width: 100%;
/* width: 100%; */
margin: 10px auto;
width: 60%;
color: #333;
line-height: 2.0;
font-size: 28pt;
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,125 @@

<!DOCTYPE html>
<html lang="zh-TW">
<head>
<title>《金剛般若波羅蜜經。如理實見分第五》【漢字注音】</title>
<meta charset="UTF-8">
<link rel="stylesheet" href="assets/styles/styles.css">
</head>
<body>
《金剛般若波羅蜜經。如理實見分第五》【漢字注音】
<div class='separator' style='clear: both'>
<a href='圖片' style='display: block; padding: 1em 0; text-align: center'>
<img alt='金剛般若波羅蜜經。如理實見分第五' border='0' width='400' data-original-height='630' data-original-width='1200'
src='https://shoplineimg.com/5db585d59db3cb0012a18bce/5f2a9d3f30cc6200455c1c25/1296x.webp?source_format=jpg' />
</a>
</div>

<div class='Siang_Pai'><p>
<span></span>
<ruby><rb></rb><rt>kim¹</rt><rtc>ㄍㄧㆬˉ</rtc></ruby>
<ruby><rb></rb><rt>kong¹</rt><rtc>ㄍㆲˉ</rtc></ruby>
<ruby><rb></rb><rt>pⁿua¹</rt><rtc>ㄅㄨㆩˉ</rtc></ruby>
<ruby><rb></rb><rt>na²</rt><rtc>ㄋㄚˋ</rtc></ruby>
<ruby><rb></rb><rt>pho¹</rt><rtc>ㄆㄜˉ</rtc></ruby>
<ruby><rb></rb><rt>lo⁵</rt><rtc>ㄌㄜˊ</rtc></ruby>
<ruby><rb></rb><rt>bit⁸</rt><rtc>ㆠㄧㆵ˙</rtc></ruby>
<ruby><rb></rb><rt>king¹</rt><rtc>ㄍㄧㄥˉ</rtc></ruby>
<span></span>
</p><p>
<ruby><rb></rb><rt>ju⁵</rt><rtc>ㆡㄨˊ</rtc></ruby>
<ruby><rb></rb><rt>li²</rt><rtc>ㄌㄧˋ</rtc></ruby>
<ruby><rb></rb><rt>sit⁸</rt><rtc>ㄒㄧㆵ˙</rtc></ruby>
<ruby><rb></rb><rt>kⁿi³</rt><rtc>ㄍㆪ˪</rtc></ruby>
<ruby><rb></rb><rt>hun¹</rt><rtc>ㄏㄨㄣˉ</rtc></ruby>
<ruby><rb></rb><rt>te⁷</rt><rtc>ㄉㆤ˫</rtc></ruby>
<ruby><rb></rb><rt>goo⁷</rt><rtc>ㆣㆦ˫</rtc></ruby>
</p><p>
<span></span>
<ruby><rb></rb><rt>su¹</rt><rtc>ㄙㄨˉ</rtc></ruby>
<ruby><rb></rb><rt>phoo⁵</rt><rtc>ㄆㆦˊ</rtc></ruby>
<ruby><rb></rb><rt>theh⁸</rt><rtc>ㄊㆤㆷ˙</rtc></ruby>
<span></span>
<ruby><rb></rb><rt>u⁵</rt><rtc>ㄨˊ</rtc></ruby>
<ruby><rb></rb><rt></rt><rtc>ㄧ˪</rtc></ruby>
<ruby><rb></rb><rt>un⁵</rt><rtc>ㄨㄣˊ</rtc></ruby>
<ruby><rb></rb><rt>ho⁵</rt><rtc>ㄏㄜˊ</rtc></ruby>
<span></span>
<ruby><rb></rb><rt>kho²</rt><rtc>ㄎㄜˋ</rtc></ruby>
<ruby><rb></rb><rt></rt><rtc>ㄧˋ</rtc></ruby>
<ruby><rb></rb><rt>sin¹</rt><rtc>ㄒㄧㄣˉ</rtc></ruby>
<ruby><rb></rb><rt>siong¹</rt><rtc>ㄒㄧㆲˉ</rtc></ruby>
<ruby><rb></rb><rt>kⁿi³</rt><rtc>ㄍㆪ˪</rtc></ruby>
<ruby><rb></rb><rt>ju⁵</rt><rtc>ㆡㄨˊ</rtc></ruby>
<ruby><rb></rb><rt>lai⁰</rt><rtc>ㄌㄞ˙</rtc></ruby>
<ruby><rb></rb><rt>put⁴</rt><rtc>ㄅㄨㆵ</rtc></ruby>
<span></span>
<span></span>
<span></span>
<ruby><rb></rb><rt>put⁴</rt><rtc>ㄅㄨㆵ</rtc></ruby>
<ruby><rb></rb><rt>ia⁷</rt><rtc>ㄧㄚ˫</rtc></ruby>
<span></span>
<ruby><rb></rb><rt>se³</rt><rtc>ㄙㆤ˪</rtc></ruby>
<ruby><rb></rb><rt>zun¹</rt><rtc>ㄗㄨㄣˉ</rtc></ruby>
<span></span>
<ruby><rb></rb><rt>put⁴</rt><rtc>ㄅㄨㆵ</rtc></ruby>
<ruby><rb></rb><rt>kho²</rt><rtc>ㄎㄜˋ</rtc></ruby>
<ruby><rb></rb><rt></rt><rtc>ㄧˋ</rtc></ruby>
<ruby><rb></rb><rt>sin¹</rt><rtc>ㄒㄧㄣˉ</rtc></ruby>
<ruby><rb></rb><rt>siong¹</rt><rtc>ㄒㄧㆲˉ</rtc></ruby>
<ruby><rb></rb><rt>tit⁴</rt><rtc>ㄉㄧㆵ</rtc></ruby>
<ruby><rb></rb><rt>kⁿi³</rt><rtc>ㄍㆪ˪</rtc></ruby>
<ruby><rb></rb><rt>ju⁵</rt><rtc>ㆡㄨˊ</rtc></ruby>
<ruby><rb></rb><rt>lai⁰</rt><rtc>ㄌㄞ˙</rtc></ruby>
<span></span>
<ruby><rb></rb><rt>ho⁵</rt><rtc>ㄏㄜˊ</rtc></ruby>
<ruby><rb></rb><rt></rt><rtc>ㄧˋ</rtc></ruby>
<ruby><rb></rb><rt>koo³</rt><rtc>ㄍㆦ˪</rtc></ruby>
<span></span>
<ruby><rb></rb><rt>ju⁵</rt><rtc>ㆡㄨˊ</rtc></ruby>
<ruby><rb></rb><rt>la⁰</rt><rtc>ㄌㄚ˙</rtc></ruby>
<ruby><rb></rb><rt>soo²</rt><rtc>ㄙㆦˋ</rtc></ruby>
<ruby><rb></rb><rt>suat⁴</rt><rtc>ㄙㄨㄚㆵ</rtc></ruby>
<ruby><rb></rb><rt>sin¹</rt><rtc>ㄒㄧㄣˉ</rtc></ruby>
<ruby><rb></rb><rt>siong¹</rt><rtc>ㄒㄧㆲˉ</rtc></ruby>
<span></span>
<ruby><rb></rb><rt>ziah⁴</rt><rtc>ㄐㄧㄚㆷ</rtc></ruby>
<ruby><rb></rb><rt>hui¹</rt><rtc>ㄏㄨㄧˉ</rtc></ruby>
<ruby><rb></rb><rt>sin¹</rt><rtc>ㄒㄧㄣˉ</rtc></ruby>
<ruby><rb></rb><rt>siong¹</rt><rtc>ㄒㄧㆲˉ</rtc></ruby>
<span></span>
<span></span>
<ruby><rb></rb><rt>put⁸</rt><rtc>ㄅㄨㆵ˙</rtc></ruby>
<ruby><rb></rb><rt>ko³</rt><rtc>ㄍㄜ˪</rtc></ruby>
<ruby><rb></rb><rt>su¹</rt><rtc>ㄙㄨˉ</rtc></ruby>
<ruby><rb></rb><rt>phoo⁵</rt><rtc>ㄆㆦˊ</rtc></ruby>
<ruby><rb></rb><rt>theh⁸</rt><rtc>ㄊㆤㆷ˙</rtc></ruby>
<span></span>
<span></span>
<ruby><rb></rb><rt>huan⁵</rt><rtc>ㄏㄨㄢˊ</rtc></ruby>
<ruby><rb></rb><rt>soo²</rt><rtc>ㄙㆦˋ</rtc></ruby>
<ruby><rb></rb><rt>u⁷</rt><rtc>ㄨ˫</rtc></ruby>
<ruby><rb></rb><rt>siong¹</rt><rtc>ㄒㄧㆲˉ</rtc></ruby>
<span></span>
<ruby><rb></rb><rt>kai¹</rt><rtc>ㄍㄞˉ</rtc></ruby>
<ruby><rb></rb><rt>si⁷</rt><rtc>ㄒㄧ˫</rtc></ruby>
<ruby><rb></rb><rt>hi¹</rt><rtc>ㄏㄧˉ</rtc></ruby>
<ruby><rb></rb><rt>bong⁷</rt><rtc>ㆠㆲ˫</rtc></ruby>
<span></span>
<ruby><rb></rb><rt>na²</rt><rtc>ㄋㄚˋ</rtc></ruby>
<ruby><rb></rb><rt>kⁿi³</rt><rtc>ㄍㆪ˪</rtc></ruby>
<ruby><rb></rb><rt>zu¹</rt><rtc>ㄗㄨˉ</rtc></ruby>
<ruby><rb></rb><rt>siong¹</rt><rtc>ㄒㄧㆲˉ</rtc></ruby>
<ruby><rb></rb><rt>hui¹</rt><rtc>ㄏㄨㄧˉ</rtc></ruby>
<ruby><rb></rb><rt>siong¹</rt><rtc>ㄒㄧㆲˉ</rtc></ruby>
<span></span>
<ruby><rb></rb><rt>ziah⁴</rt><rtc>ㄐㄧㄚㆷ</rtc></ruby>
<ruby><rb></rb><rt>kⁿi³</rt><rtc>ㄍㆪ˪</rtc></ruby>
<ruby><rb></rb><rt>ju⁵</rt><rtc>ㆡㄨˊ</rtc></ruby>
<ruby><rb></rb><rt>lai⁰</rt><rtc>ㄌㄞ˙</rtc></ruby>
<span></span>
<span></span>
</p></div>
</body>
</html>

Binary file added output2/《金鋼經》004.xlsx
Binary file not shown.
Binary file added output2/《金鋼經》005.xlsx
Binary file not shown.
127 changes: 33 additions & 94 deletions p701_Clear_Cells.py
Original file line number Diff line number Diff line change
@@ -1,51 +1,6 @@
# 全域常數
TOTAL_ROWS = 12

# 填漢字等標音:將整段的文字拆解,個別填入儲存格,以便後續人工手動填入台語音標、注音符號。
import getopt
import sys

import xlwings as xw

import settings


def get_input_and_output_options(argv):
arg_input = ""
arg_output = ""
arg_user = ""
arg_help = "{0} -i <input> -u <user> -o <output>".format(argv[0])

try:
opts, args = getopt.getopt( # pyright: ignore
argv[1:], "hi:u:o:", ["help", "input=", "user=", "output="]
)
except Exception as e:
print(e)
print(arg_help)
sys.exit(2)

for opt, arg in opts:
if opt in ("-h", "--help"):
print(arg_help) # print the help message
sys.exit(2)
elif opt in ("-i", "--input"):
arg_input = arg
elif opt in ("-u", "--user"):
arg_user = arg
elif opt in ("-o", "--output"):
arg_output = arg

print("input:", arg_input)
print("user:", arg_user)
print("output:", arg_output)

return {
"input": arg_input,
"user": arg_user,
"output": arg_output,
}


def clear_hanji_in_cells(wb, sheet_name='漢字注音', cell='V3'):
# 選擇指定的工作表
Expand All @@ -54,56 +9,40 @@ def clear_hanji_in_cells(wb, sheet_name='漢字注音', cell='V3'):
# 取得 V3 儲存格的字串
v3_value = sheet.range(cell).value

# 確認 V3 不為空
if v3_value:
# 計算字串的總長度
total_length = len(v3_value)

# 每列最多處理 15 個字元,計算總共需要多少列
chars_per_row = 15

# 迴圈清空所有漢字的上下方儲存格 (羅馬拼音和台語注音符號)
row = 5
for i in range(TOTAL_ROWS):
for col in range(4, 19): # 【D欄=4】到【R欄=18】
# 清空漢字儲存格 (Row)
sheet.range((row, col)).value = None
# 清空上方的台語拼音儲存格 (Row-1)
sheet.range((row - 1, col)).value = None
# 清空下方的台語注音儲存格 (Row+1)
sheet.range((row + 1, col)).value = None
# 清空填入注音的儲存格 (Row-2)
sheet.range((row - 2, col)).value = None

# 每處理 15 個字元後,換到下一行
row += 4

# sheet.range(cell).value = None



if __name__ == "__main__":
# =========================================================================
# (1) 取得需要注音的「檔案名稱」及其「目錄路徑」。
# =========================================================================
# 取得 Input 檔案名稱
file_path = settings.get_tai_gi_zu_im_bun_path()
if not file_path:
print("未設定 .env 檔案")
# sys.exit(2)
opts = get_input_and_output_options(sys.argv)
if opts["input"] != "":
CONVERT_FILE_NAME = opts["input"]
else:
CONVERT_FILE_NAME = "Tai_Gi_Zu_Im_Bun.xlsx"
else:
CONVERT_FILE_NAME = file_path
print(f"CONVERT_FILE_NAME = {CONVERT_FILE_NAME}")

# 打開 Excel 檔案
wb = xw.Book(CONVERT_FILE_NAME)
# 計算字串的總長度
total_length = len(v3_value)
print(f" {total_length} 個字元")

# 每頁最多處理 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

# 迴圈清空所有漢字的上下方儲存格 (羅馬拼音和台語注音符號)
row = 5
for i in range(TOTAL_ROWS):
for col in range(start, end): # 【D欄=4】到【R欄=18】
# 清空漢字儲存格 (Row)
sheet.range((row, col)).value = None
# 清空上方的台語拼音儲存格 (Row-1)
sheet.range((row - 1, col)).value = None
# 清空下方的台語注音儲存格 (Row+1)
sheet.range((row + 1, col)).value = None
# 清空填入注音的儲存格 (Row-2)
sheet.range((row - 2, col)).value = None

# 顯示清空的儲存格
col_name = xw.utils.col_name(col)
print(f"清空第 {row} 列,第 {col_name} 欄")

# 每處理 15 個字元後,換到下一行
row += 4
print("\n")

# =========================================================================
# (2) 清除原先已填入的漢字
# =========================================================================
clear_hanji_in_cells(wb, '漢字注音', 'V3')
sheet.range("V3").value = ""
19 changes: 16 additions & 3 deletions p710_thiam_han_ji.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,6 @@
import xlwings as xw


def fill_hanji_in_cells(wb, sheet_name='漢字注音', cell='V3'):
# 選擇指定的工作表
sheet = wb.sheets[sheet_name]
Expand All @@ -9,17 +12,23 @@ def fill_hanji_in_cells(wb, sheet_name='漢字注音', cell='V3'):
if v3_value:
# 計算字串的總長度
total_length = len(v3_value)
print(f" {total_length} 個字元")

# 每列最多處理 15 個字元,計算總共需要多少列
chars_per_row = 15
# 每頁最多處理 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

# 逐字處理字串,並填入對應的儲存格
row = 5
index = 0 # 用來追蹤目前處理到的字元位置

# 逐字處理字串
while index < total_length: # 使用 while 而非 for,確保處理完整個字串
for col in range(4, 19): # 【D欄=4】到【R欄=18】
for col in range(start, end): # 【D欄=4】到【R欄=18】
# 確認是否還有字元可以處理
if index < total_length:
# 取得當前字元
Expand All @@ -28,6 +37,9 @@ def fill_hanji_in_cells(wb, sheet_name='漢字注音', cell='V3'):
if char != "\n":
# 將字元填入對應的儲存格
sheet.range((row, col)).value = char

col_name = xw.utils.col_name(col)
print(f"【{row} 列, {col_name} 欄】:{char}")
else:
# 若遇到換行字元,直接跳過
index += 1
Expand All @@ -39,6 +51,7 @@ def fill_hanji_in_cells(wb, sheet_name='漢字注音', cell='V3'):
break # 若字串已處理完畢,退出迴圈

# 每處理 15 個字元後,換到下一行
print("\n")
row += 4

# 保存 Excel 檔案
Expand Down
Loading

0 comments on commit 1d32e8c

Please sign in to comment.