Dự án tạo Ebook tự động

tuhocvba

Administrator
Thành viên BQT
Sau một vài ngày mày mò để đưa ra định dạng html cho phù hợp với mục đích của mình cộng với sự giúp đỡ của các bạn bên , tôi đã có được form mà tôi cho là tốt.
Bạn cần đăng nhập để thấy hình ảnh

Tôi nghĩ, việc soạn code trực tiếp là rất vất vả. Do đó tôi nghĩ tới việc sẽ cho sinh code tự động từ dữ liệu Excel hoặc Word.
Về Word, 100% sẽ lấy được furigana. Còn với Excel thì 50-50. Nên tôi cần test thử khi định hình thiết kế.
Việc đầu tiên tôi có thể thử đó là thử với , có vẻ không ổn, tôi tiến hành add language japanese trên Excel.
Bây giờ chúng ta hãy nhìn vào code dưới đây.
HTML:
<table class="chinh">

    <tbody>

      <tr>
        <th style="width:30%">1-Tuấn</th>
        <th rowspan="4">
            <p>
              <ruby class="to">
              俊足
              <rp>(</rp><rt>しゅんそく</rt><rp>)</rp>
              </ruby><span>: người tài giỏi, nhanh nhẹn, tháo vát</span>
            </p>
            
            <p>
              <ruby class="to">
              俊才
              <rp>(</rp><rt>しゅんさい</rt><rp>)</rp>
              </ruby><span>: tài năng xuất chúng</span>
            </p>
            <p>
              <ruby class="to">
              俊敏
              <rp>(</rp><rt>しゅんびん</rt><rp>)</rp>
              </ruby><span>: Thông minh lanh lợi,sắc sảo(đánh giá),nhạy bén,nhanh chóng(năng lực)</span>
            </p>
        </th>
      </tr>

      <tr class="cao">
        <td class="sieuto">俊</td>
      </tr>

      <tr>
        <td>KUN:(すばやい)</td>
      </tr>

      <tr>
        <td>ON:シュン</td>
      </tr>

      <tr>
        <td colspan="3" style="font-style:italic;">Cách nhớ:Muruta-san là người rất tháo vát</td>
      </tr>

    </tbody>

  </table>

  <!-- O cach viet -->

  <br/>

  <br/>

  <table class="phu">

    <tbody>

      <tr>
        <td class="cham"></td>
        <td></td>
      </tr>

      <tr class="cham">
        <td class="cham"></td>
        <td></td>
      </tr>

    </tbody>

  </table>
 

Đính kèm

tuhocvba

Administrator
Thành viên BQT
Tôi xây dựng giao diện đơn giản như sau:
Bạn cần đăng nhập để thấy hình ảnh

Nhìn chung các phần đều dễ, chúng ta đã có code và chỉ cần điền nội dung tương ứng vào là được. Duy chỉ có phần màu vàng là ta cần phải tạo ra được output như sau:
INPUT:
Mã:
俊足: người tài giỏi, nhanh nhẹn, tháo vát
OUTPUT: Mong muốn
Mã:
<ruby class="to">
              俊足
              <rp>(</rp><rt>しゅんそく</rt><rp>)</rp>
              </ruby><span>: người tài giỏi, nhanh nhẹn, tháo vát</span>
Trước hết tôi cần biết cells có furigana hay không, nếu có thì nó bắt đầu từ đâu và kết thúc ở ký tự nào, nội dung furigana là gì.
Mã:
'http://www.eurus.dti.ne.jp/~yoneyama/Excel/vba/vba_phonetics.html
'https://learn.microsoft.com/en-us/office/vba/api/excel.characters.phoneticcharacters
Sub layruby()
    Dim s As String
    Dim n   As Long, l As Long, j As Long, cnt As Long
    Dim arr
    '1
    '3
    'phonectic
    cnt = 1
    With ThisWorkbook.Sheets(1).Cells(3, 3)
        If .Phonetics.Visible = True Then
            .Phonetics.CharacterType = xlHiragana
            n = .Phonetics.Count
            If n = 0 Then GoTo thoat
            Do
                l = Len(CStr(.Value))
                For i = 1 To l Step 1
                    For j = 1 To l - i + 1 Step 1
                        s = .Characters(Start:=i, Length:=j).PhoneticCharacters
                        If Len(s) > 0 Then
                            If cnt = 1 Then
                                ReDim arr(1 To 3, 1 To cnt)
                            Else
                                ReDim Preserve arr(1 To 3, 1 To cnt)
                            End If
                                arr(1, cnt) = i
                                arr(2, cnt) = j
                                arr(3, cnt) = s
                                cnt = cnt + 1
                                n = n - 1
                            Exit For
                        End If
                    Next j
                Next i
            Loop Until n = 0
            
        End If
    End With
thoat:
End Sub
 

tuhocvba

Administrator
Thành viên BQT
Bạn cần đăng nhập để thấy đính kèm

Có thể thấy 1,4 là các vị trí không chứa furigana. 2 là kanji và 3 là phần furigana. 4 là phần ko chứa furigana. Vậy ta sẽ code như sau:
Như vậy s sẽ được tách ra làm 4 phần.
Phần 1: trước khi phát sinh furigana.
Phần 2: kanji phát sinh furigana
Phần 3: furigana
Phần 4: Không phát sinh furigana

Cả câu văn sẽ tách ra làm 3 phần:
s1: Chưa phát sinh furigana
s2: Phát sinh furigana
s3: Phần phía sau
 
Top