Giúp đỡ cách xoá đồng loạt một loại dữ liệu trong File Word

Liên hệ QC

kjttj

Thành viên hoạt động
Tham gia
10/9/12
Bài viết
105
Được thích
2
Mình chào mọi người!

Do mình có nhu cầu tải những File có đuôi .SRT (đuôi file sub của các bộ phim) về, rồi sau đó mở chúng bằng File Word rồi in ra để đọc các đoạn văn bản của bộ phim.

Nhưng vấn đề xuất hiện là các file này có số lượng trang khá lớn khoảng 100 trang là ít, mà chủ yếu chúng nhiều là do các dòng hiển thị số thứ tự và thời gian bắt đầu và kết thúc của đoạn hội thoại) - mọi người xem đoạn ví dụ bên dưới:

Ví dụ:
11
00:01:39,666 --> 00:01:42,362

All I knew was I'd been trying
to catch that fish...

Nhưng mình thì chỉ muốn lấy đoạn chữ đỏ thôi, tức là mình sẽ edit lại tập tin, bằng cách xoá các đoạn chữ xanh, rồi in ra giấy để xem, nhưng các đoạn chữ xanh quá nhiều, khoản 100 trang, mình rất ngại việc làm thủ công là bôi đen, rồi delete, hơn nữa làm tới mấy trăm trang thì sẽ không chính xác, có khi xoá luôn đoạn nội dung mình cần (chữ đỏ).

Và mình nghĩ là MS Word có một công cụ hay chức năng gì đó, cho phép tự độnt delete các đạon mà mình muốn xoá ở trên một cách nhanh nhất, mình thì nghĩ mơ hồ là dùng Macro hay Module Basic Visual gì đấy, hoặc là trong các Menu của MS Word cũng có chứng năng phục vụ nhu cầu trên của mình, nhưng mình chưa biết.

Vậy nên mình muốn nhờ mọi người chỉ giúp mình cách thực hiện mà mọi người biết nha, mình cảm ơn trước ạ!
 
Mọi người thấy câu hỏi cảu mình thế nào ạ? Nếu mọi người không biết nhưng suy nghĩ gì về câu hỏi thì chia sẻ giúp mình cũng được ạ!
 
Nếu chỉ đơn giản là lấy nội dung file .SRT in ra giấy thì cũng không quá phức tạp lắm. Mình dùng Notepad, Excel để thực hiện:
1: đầu tiên kéo cột A trong Excel rộng ra.
2: Dùng Notepad để mở file (bạn có thể dùng Word tùy thích).
3: Copy qua excel, bắt đầu từ ô A2, mỗi một hàng dữ liệu tương ứng với một cell.
4: đánh số thứ tự ô B2 đến Bn
5: Cfhọn tab Data chọn Filter
6: Ở ô A1 chọn lệnh Sort, dữ liệu đã được xắp xếp theo thứ tự, xóa những hàng không cần thiết
7: sau khi xong, ở Ô B1 chọn lệnh sort
8: xong--=0
 
Ây da, mình cảm ơn bạn nhiều lắm, nhưng mình thấy nó không hợp lý lắm bạn ạ, với lại khi mình lọc hết mấy dòng đó, xong mình còn in nhỏ lại nữa, để 100 trang chỉ còn lại vài trang thôi, in chữ nhỏ ấy, một trang là 8 mặt luôn ấy, làm trên ễcl chuyển qua là bị hư đấy bạn. Mà sao hổng thấy mấy cao thủ pro chỉ giúp mình ta, huhu!
 
Ví dụ chỗ màu xanh, tôi nghĩ có lẽ là thời gian ở mỗi giai đoạn nên có thể dữ liệu không đồng nhất, nên không thể dùng Replace, vì vậy chỉ còn cách Paste vào Excel xong Sort và nối chuổi. Thực hiện tuần tự như sau:

- Trong Excel cột A (TT), cột B (tiêu đề là gì thì tùy) xong Paste dữ liệu vào.
- Sort và chọn Descending (để phần chữ nằm phía trên) sau đó bạn xóa phần số không cần thiết phía bên dưới.
- Sort cột TT lại từ nhỏ đến lớn (để trả dữ liệu theo trình tự ban đầu).
- Dùng hàm nối chuổi lại (bạn đặt chỗ nào thì tùy ý), ở đây tôi chỉ nối 3 Cell.

=B2&" "&B3&" "&B4

- Sau đó Copy và Paste Special > Value > OK (ở sheet khác).

Do nối chuổi tốn rất nhiều công sức nên ta phải Paste sang sheet khác, còn hàm này ta sẽ tiếp tục sử dụng cho các lần sau.
 
Lần chỉnh sửa cuối:
- Sort và chọn Descending (để phần chữ nằm phía trên) sau đó bạn xóa phần số không cần thiết phía bên dưới.

Nếu trong đối thoại có những dòng kiểu như:
11
00:01:39,666 --> 00:01:42,362
Bạn bao nhiêu tuổi

12
00:01:44,666 --> 00:01:46,362
52 tuổi

13
00:01:48,666 --> 00:01:50,362
Tòa nhà này cao bao nhiêu mét

14
00:01:52,666 --> 00:01:54,362
145 mét

Nếu xóa phần số "phía dưới" thì mất đối thoại. Nếu dò tìm những dòng như thế thì mất thời gian, sau đó phải copy và dán lên phía trên. Lên chỗ nào thì cũng phải dò.

Không biết tôi nghĩ như thế có đúng không.
---------------

Cái này có thể làm theo nhiều cách. Thoạt tiên tôi nghĩ là dùng code VBA đọc nội dung tập tin vào String (trong Word hay Excel không quan trọng) rồi dùng Regular Expressions nhưng nó như phở ở ngoài đời ấy - phở mãi cũng ngán.
Thôi thì cứ dùng đại một phương pháp.
Và ta làm thẳng trong Word.

Nếu bạn cần làm cho nhiều tập tin, hoặc trong tương lai còn cần thì:

1. Trong Word nhấn Alt + F11 --> active ThisDocument của Project Normal (Normal --> Microsoft Word Objects --> ThisDocument) --> menu Insert --> Module --> dán code sau vào Module1

Mã:
Sub CreateMyMenu()
Dim NewMenu As CommandBarPopup
    Call DeleteMyMenu
    Set NewMenu = CommandBars(1).Controls.Add(Type:=msoControlPopup, Temporary:=True)
    NewMenu.Caption = "X" & ChrW(243) & "a d" & ChrW(242) & "ng trong SRT"

    With NewMenu.Controls.Add(Type:=msoControlButton)
        .Caption = "X" & ChrW(243) & "a s" & ChrW(7889) & " th" & ChrW(7913) & " t" & ChrW(7921) & " v" & ChrW(224) & " th" & ChrW(7901) & "i gian"
        .OnAction = "XoaDongSRT"
    End With
End Sub

Sub DeleteMyMenu()
On Error Resume Next
    CommandBars(1).Controls("X" & ChrW(243) & "a d" & ChrW(242) & "ng trong SRT").Delete
End Sub

Private Sub XoaDongSRT()
Dim k As Long, text As String, value As Long
    On Error Resume Next
    Application.ScreenUpdating = False
    For k = ActiveDocument.Paragraphs.count To 1 Step -1
        text = ActiveDocument.Paragraphs(k).Range.text
        value = CLng(text)
        If Err.Number = 0 Then
            ActiveDocument.Paragraphs(k).Range.Delete
        Else
            Err.Clear
            If text Like "[COLOR=#ff0000]##:##:##,###*[/COLOR]" Then ActiveDocument.Paragraphs(k).Range.Delete
        End If
    Next k
    On Error GoTo 0
    Application.ScreenUpdating = True
End Sub

2. Dán code sau vào ThisDocument
Mã:
Private Sub Document_Open()
    CreateMyMenu
End Sub

3. menu File --> Save Normal

4. Mỗi lần mở tập tin SRT: chọn mục menu "Xóa số thứ tự và thời gian"

5. Tôi nghĩ chỗ đỏ đỏ là được. Nếu cần thì chuyển thành "##:##:##,### --> ##:##:##,###"
 
Lần chỉnh sửa cuối:
siwtom

Nếu xóa phần số "phía dưới" thì mất đối thoại. Nếu dò tìm những dòng như thế thì mất thời gian, sau đó phải copy và dán lên phía trên. Lên chỗ nào thì cũng phải dò.

Bạn đưa ra giải pháp dùng VBA rất hay, nhưng có nhiều khi tác giả chưa biết VBA là gì thì có khi lại rắc rối, hỏi tới hỏi lui. Vì vậy, giải pháp thủ công sử dụng cho người chưa biết gì về VBA là phù hợp.

Bạn đưa ra vấn đề vừa số, vừa chữ thì khi Sort (chọn Descending) nó vẫn đáp ứng việc xóa đồng loạt, vì Sort thì trình tự ưu tiên như sau:

- Chữ (1), số và chữ (2), giờ, phút, giây (3), rồi đến các con số (4). Như vậy chọn (3), (4) và xóa đi thì không có gì là quá khó.
 
Woa, đúng là chỉ có mấy anh em GPE mới nhiệt tình giúp đỡ từ A-Z như vậy thôi, mình sẽ nghiên cứu từng phần cả VBA lẫn Excel luôn, cảm ơn mọi người nhiều nha!
 
Mình làm được rồi mọi người à, và mình thấy làm bằng VBA thì hiệu quả hơn, nhưng có một điều là khi xóa xong, thì lại xuất hiện rất nhiều dòng ENTER (cách dòng), và mình cũng muốn xóa đồng loạt các dòng ENTER đó, thì mọi người có thể hướng dẫn thêm luôn giúp mình được không ạ - tức là cho các đoạn dính liền nhau luốn ấy, không còn các dòng enter nữa? Mình cảm ơn nhiều ạ.
 
Mình làm được rồi mọi người à, và mình thấy làm bằng VBA thì hiệu quả hơn, nhưng có một điều là khi xóa xong, thì lại xuất hiện rất nhiều dòng ENTER (cách dòng), và mình cũng muốn xóa đồng loạt các dòng ENTER đó, thì mọi người có thể hướng dẫn thêm luôn giúp mình được không ạ - tức là cho các đoạn dính liền nhau luốn ấy, không còn các dòng enter nữa? Mình cảm ơn nhiều ạ.

Bạn viết: "nhưng có một điều là khi xóa xong, thì lại xuất hiện rất nhiều dòng ENTER". Người đọc có cảm giác là code đã làm sinh ra những dòng trống đó. Như thế oan cho code quá. Những dòng trống là những dòng có từ trước.

Nếu đã viết thì dùng "vẫn còn" chứ sao lại "lại xuất hiện"?

Tại sao bạn muốn xóa các dòng trống? Như thế các đối thoại sẽ dính thành một cục, biết cái nào là cái nào?
---------------
Nếu bạn vẫn cứ muốn xóa dòng trống thì trong code của Private Sub XoaDongSRT():

đổi

Mã:
If Err.Number = 0 Then

thành

Mã:
If Err.Number = 0 [COLOR=#ff0000]Or text = vbCr Or text = vbCrLf[/COLOR] Then

Tức viết thêm đoạn đỏ đỏ
 
Lần chỉnh sửa cuối:
Í à, không phải ý mình là muốn làm nó dính vào một cục đâu, ý mình là bỏ bớt các dòng enter thôi, còn dòng nào vẫn ở nguyên dòng đấy, chứ mình hổng định kéo dòng này lên dòng kia đâu, là mình muốn tiết kiệm số trang giấy sẽ in đó bạn à. Cảm ơn bạn nhiều nha!
 
Công cụ office thông thường đủ để xử lý cái này, không cần đến fomular.

1. Trong word mở file crt ra
2. Ctrl+h để tìm và thay thế
3. Trong bảng này bấm vào more
4. Trong bảng này bấm tiếp vào special
5. Trong special này có tìm được nào là đủ thứ để thay thế, vd: Paragraph marK là xuống dòng, any digit là bất kỳ số nào (bị hạn chế chỗ này, nhưng suy cho cùng số đâu cần dịch).
 
Bạn làm như bạn tquang1976vn nói đó.
Tìm kiếm thay thế ^p^p thay bằng ^p hoặc viết code cũng được
 
Web KT

Bài viết mới nhất

Back
Top Bottom