Lập trình Word bên VB.net ??

Thảo luận về ngôn ngữ VB.NET

Người Điều Hành: qanlh_soft

Lập trình Word bên VB.net ??

Post dragons 03-09-2008, 18:58

Các bác pro ơi!. Giúp tui giải quyết vấn đề này với !?
Vấn đề của tui là:
Làm sao lấy được một dòng text của một đoạn văn bản trong File Word ?
Cụ thể như sau: Tui có file D:\DS MAIL ADDRESS.doc . trong file này tui muốn lấy dòng "Học VB.net thật là hay !!" ra
gán vào một biến nào đó thì làm sao ? ( dòng text này nằm trong một đoạn văn )
Tui đã làm được như sau, nhưng không biết bước tiếp theo phải làm như thế nào nữa mới lấy được text trong đó ?
(Để chạy được đoạn code này thì nên cài office 2007 -> add components của nó vào)
Các bác pro giúp tui với !! :ym_not_worthy: . Vì tui có > 1000 file word mà mỗi file phải trích xuất một dòng đã được định trước trong đó !!! hix ! ( việc dùng vòng lặp để chạy nó cũng là một vấn đề !!! :ym_doh: )
Tui đang cần gấp lắm.
Đợi tin từ các bác pro !!! :ym_doh:

Imports Microsoft.Office.Interop
Public Class MH_TIM_TEXT
Private Sub TIM_TEXT()
Dim UNGDUNG As Word.Application
UNGDUNG = New Word.Application 'CreateObject("Word.Application")
UNGDUNG.Visible = True
Dim TAILIEU As Word.Document
TAILIEU = UNGDUNG.Documents.Add("D:\DS MAIL ADDRESS.doc")
UNGDUNG.Application.Visible = True
End Sub

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
TIM_TEXT()
End Sub
End Class
dragons
Members
 
Bài viết: 18
Tham gia: 26-08-2008, 15:58

Re: Lập trình Word bên VB.net ??

Post tuannq 03-09-2008, 22:42

Việc này hơi bị nan giải, vì các dòng text ở trong file doc có thể nằm trong những đối tượng OLE khác nhau, ví dụ dòng đó đang ở trong 1 table, dòng đó đang nằm trong drawing object, hay thậm chí dòng đó đang nằm trong 1 đối tượng excel được nhúng vào (embedded)
Việc đọc file doc yêu cầu bạn cũng phải hiểu cấu trúc (format) của 1file .doc, tuy rằng .NET đã hỗ trợ đầy đủ, nhưng bạn phải xác định xem cần dùng đối tượng của class thích hợp nào ở trong cái namespace Microsoft.Office.Interop
THực sự là mình biết như vậy nhưng chưa làm 1 yêu cầu nào tựa tựa như bạn, nên chưa thể nêu chi tiết hơn.
Mà trong ứng dụng của bạn, thao tác với file Word, bạn không cần phải
UNGDUNG.Visible = True
UNGDUNG.Application.Visible = True

đâu, vì như vậy nó sẽ bung 1 window Winword ra, ta có thể xử lý ngầm ở dưới!
Chúc bạn thành công
Ví phỏng đường đời bằng phẳng cả, anh hùng hào kiệt có hơn ai. (Nguyễn Công Trứ)
namnqn@yahoo.com :: namnqn@gmail.com :: Skype: namnqn
Hình đại diện
tuannq
Founders
 
Bài viết: 1141
Tham gia: 06-06-2007, 00:44

Re: Lập trình Word bên VB.net ??

Post tuannq 03-09-2008, 23:34

à mình vừa google 1 phát "read a line in Word document C#" , nó ra cái này có thể tham khảo được
Code: Chọn hết
Imports System.IO.File
Imports sqld
Public Class Form1

Private ob1 As sqld.sqld.sqldb
Public Sub New()

' This call is required by the Windows Form Designer.
InitializeComponent()
ob1 = New sqld.sqld.sqldb()
' Add any initialization after the InitializeComponent() call.

End Sub
Private WordApp As New Word.ApplicationClass()

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
OpenFileDialog1.Filter = "Word Documents|*.doc"
txtFileName.Text = OpenFileDialog1.FileName
OpenFileDialog1.ShowDialog()
End Sub

Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
Dim WordApp As New Word.ApplicationClass()

Dim file As Object = OpenFileDialog1.FileName
'Dim wdLineType1 As Word.WdLineType = Word.WdLineType.wdTextLine

Dim nullobj As Object = System.Reflection.Missing.Value

Dim doc As Word.Document = WordApp.Documents.Open(file, nullobj, nullobj, nullobj, nullobj, nullobj, _
nullobj, nullobj, nullobj, nullobj, nullobj, nullobj, _
nullobj, nullobj, nullobj)
doc.Activate()
'Dim st As System.Type
'st = wdLineType1.GetType
'Dim doc1 As Word.Document = WordApp.ActiveDocument


Label2.Text = doc.Range(0, 9).Text

' Label2.Text += " " + doc.'wdLineType1.GetValues(st).GetValue(1).ToString
'Dim m_Content As String = doc1.Content.Text
'Label2.Text = m_Content

'doc.ActiveWindow.Selection.WholeStory()
'doc.ActiveWindow.Selection.Copy()

'Dim data As IDataObject = Clipboard.GetDataObject()

''Do whatever with the text.
'Label2.Text = data.GetData(DataFormats.StringFormat)





'Close doc and shutdown Word application.
doc.Close(nullobj, nullobj, nullobj)
WordApp.Quit(nullobj, nullobj, nullobj)
End Sub

Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
Dim temp As String = Label2.Text.ToString()
Dim ch As Char() = {":"}
Dim str1 As String() = Label2.Text.Split(ch)
Try
For i As Integer = 0 To str1.GetUpperBound(0)
'MessageBox.Show(str1(3).ToString())


'Dim str22 As String = ob1.insertNData(str1(1), str1(3), str1(5), str1(7)).ToString()


i = i + 1
Next
Catch ie As IndexOutOfRangeException
ie.ToString()
End Try
End Sub
End Class


Bạn để ý dòng
Code: Chọn hết
Label2.Text = doc.Range(0, 9).Text
Ví phỏng đường đời bằng phẳng cả, anh hùng hào kiệt có hơn ai. (Nguyễn Công Trứ)
namnqn@yahoo.com :: namnqn@gmail.com :: Skype: namnqn
Hình đại diện
tuannq
Founders
 
Bài viết: 1141
Tham gia: 06-06-2007, 00:44

Re: Lập trình Word bên VB.net ??

Post dragons 05-09-2008, 11:11

Cám ơn banc Pro Tuan nghen !
Tui đã chọn được dòng cần thiết trong file word rồi (dòng cần thiết đã được tô đen).
Bây giờ làm sao lấy cái dòng tô đen đó gán vào một biến, mục đích là lấy nội dung dòng đó ra ngoài.
Tui đã dùng puơng thức Copy -> lấy trong Cipboar nhưng tới file thứ 2 thì bị lỗi !! hic !!! chỗ:
Dim DULIEU As IDataObject = Clipboard.GetDataObject
từ vòng lặp thứ 2
Code như sau:
Tui chỉ lấy những thủ tục cơ bản thôi, vì Paste lên đây rắc rối lắm:
Vào được file word -> chạy đến và chọn dòng cần lấy -> copy nó -> gán nội dung trong clibboard vào biến:
Ý của tui là có lệnh nào lấy dòng đã được chon đó dễ dàng hay không ? ( vì đã chọn rồi thì cứ lấy thôi), Cách copy không khả thi lắm !!.
Còn nếu dùng Range, ví dụ như doc.Range(0, 9).Text thì lúc nào nó cũng tính từ đầu văn bản mà số kí tự của đoạn đó khác nhau ở mỗi file nên không được. còn vị trí dòng thì cố định (trường hợp của tui)
Các bác Pro giúp tui với !!! Cần gấp lắm !! :ym_not_worthy:
==============================================================
Private Sub XUONG_DONG(ByVal CONTRO As Word.Selection, ByVal SO_DONG_XUONG As Byte)
CONTRO.MoveDown(Unit:=5, Count:=SO_DONG_XUONG) 'Số 5 tương đương với 1 dòng, 16 là đếm từ đầu văn bản xuống 16 dòng ( dòng bắt đầu là dòng số 0)
End Sub
Private Sub CHON_DONG(ByVal CONTRO As Word.Selection)
CONTRO.EndKey(Unit:=5, Extend:=2) 'Số 2 đi với EndKey nghĩa là chọn 1 dòng hiện hành
End Sub
Private Sub VE_DAU_DONG(ByVal CONTRO As Word.Selection)
CONTRO.HomeKey(Unit:=5) 'Tham số này nghĩa là trở về đầu dòng ( số 5 phải đi với Homekey)
End Sub
==================================================
Private Sub TIM_TEXT(ByVal PATH_FILE As String)
Dim UNGDUNG As Word.Application
UNGDUNG = New Word.Application 'CreateObject("Word.Application")
Dim TAILIEU As Word.Document
TAILIEU = UNGDUNG.Documents.Open(PATH_FILE)
Dim CHON As Word.Selection
CHON = TAILIEU.Application.Selection
UNGDUNG.Visible = True
Dim DULIEU As IDataObject = Clipboard.GetDataObject
With CHON
XUONG_DONG(CHON, 17)
CHON_DONG(CHON)
.Copy()
CHUOI = DULIEU.GetData(DataFormats.UnicodeText).ToString
MsgBox(CHUOI)
XUONG_DONG(CHON, 2)
VE_DAU_DONG(CHON)
CHON_DONG(CHON)
.Copy()
CHUOI += "|" & DULIEU.GetData(DataFormats.UnicodeText).ToString & vbNewLine
End With
TAILIEU.Close()
UNGDUNG.Quit()
End Sub
========================================================
dragons
Members
 
Bài viết: 18
Tham gia: 26-08-2008, 15:58

Re: Lập trình Word bên VB.net ??

Post dragons 05-09-2008, 11:58

Nội dung lỗi là : "Requested Clipboard operation did not succeed."
Tên hộp thoại đưa ra lỗi là : ExternalException was unhandled
Không hiểu sao luôn, các bác Pro giúp tui với !!! :ym_sad:
dragons
Members
 
Bài viết: 18
Tham gia: 26-08-2008, 15:58

Re: Lập trình Word bên VB.net ??

Post dragons 11-09-2008, 16:28

:ym_happy:
Tui làm thành công roài các bác !
Cũng với code như thế thôi, cõng chỗ lỗi thì trước khi chạy thì tui Debug chỗ dòng lỗi đó để cho nó chạy từng bước một, sau
khi qua 2 vòng lặp thì cho nó chạy thoải mái !. Tui làm được > 1000 file đấy !
Tui sử dụng để duyệt qua các File word như sau:
===========================================
Private Sub Button1_Click_1(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
If LBL.Text = "" Then Exit Sub
LBL.Text = DINH_VITRI() 'định đường dẫn cho Folder
Dim TENTAPTIN, DS_TAPTIN() As String'Mảng này để chứa tên các tập tin
DS_TAPTIN = Directory.GetFiles(LBL.Text) 'Gán các tập tin của một folder vào mảng DS_TAPTIN
For Each TENTAPTIN In DS_TAPTIN 'Duyệt qua các tập tin trong Folder
TEN = My.Computer.FileSystem.GetName(TENTAPTIN) 'ứng với mỗi tên tập tin
BANG_TIM.LOC_DULIEU("PH = '" & TEN & "'") 'lọc trong CSDL
If BANG_TIM.SO_DONG > 0 Then
TIM_TEXT(TENTAPTIN)
End If
Next
End Sub
-----------------------------
Ps: Nó chưa được hoàn thiện lắm, tui chỉ dùng để sao được kết quả thôi, không có bẩy lỗi gì hết !!!
Ở trên là tui lấy thông tin roài đặt vào những Field tương ứng trong CSDL (Access) luôn !
BANG_TIM được kế thừa từ Table có thêm phương thức LOC_DULIEU, tính số dòng (SO_DONG ).......
dragons
Members
 
Bài viết: 18
Tham gia: 26-08-2008, 15:58

Re: Lập trình Word bên VB.net ??

Post chienpham984 10-04-2009, 23:20

các bạn ơi, mình đang làm convert file word sang file powerpoint, nhưng cách duyệt từng trang word và chọn các paragraph của trang đó để mình copy chưa được, bạn nào biết thì giúp mình với nhé. thanks cả nhà
chienpham984
Members
 
Bài viết: 1
Tham gia: 10-04-2009, 23:06

Re: Lập trình Word bên VB.net ??

Post Vbose88 22-01-2010, 16:48

Mình đang làm một đề tài và cần tương tác với nội dụng file word. mình muốn đọc 1 lần 1 từ trong file word và kèm theo vị trí của từ đó trong file này. Xin giúp đỡ.
Vbose88
Members
 
Bài viết: 10
Tham gia: 28-12-2009, 14:23

Re: Lập trình Word bên VB.net ??

Post Vbose88 23-01-2010, 11:34

Mình đã lấy được từng từ trong file word vào trong 1 mảng, nhưng hiện mình chưa tìm ra cách xác định vị trí của từng từ trong file.
Mình muốn là đầu vào là 1 từ ví dụ "hello" thì sẽ mở file word ra và hiển thị ngay dòng có từ đó.
Xin các pro giúp đỡ..
Vbose88
Members
 
Bài viết: 10
Tham gia: 28-12-2009, 14:23

Re: Lập trình Word bên VB.net ??

Post dragons 25-01-2010, 14:17

Chào ban !
Mình không rõ mục đích của bạn lắm !
Theo bạn nói thì mình hiểu là bạn muốn lưu vị trí hiển thị => sau này mở ra => tìm được vị trí đó dễ dạng ?
Nếu như vậy thì bạn thử dùng Find hoặc BookMark như thế này xem sao.
Code: Chọn hết
Private Sub BTN_TIM_TU_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BTN_TIM_TU.Click
        oWord = New Word.Application
        oWord.Visible = True
        oDoc = oWord.Documents.Open(FileName:="c:\a.doc")
    End Sub

    Private Sub BTN_TIMTIEP_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BTN_TIMTIEP.Click
        oWord.Selection.Find.ClearFormatting()
        With oWord.Selection.Find
            .Text = "Step 2"
            .Forward = True
            .Wrap = Word.WdFindWrap.wdFindAsk
            .Format = False
            .MatchCase = False
            .MatchWholeWord = False
            .MatchWildcards = False
            .MatchSoundsLike = False
            .MatchAllWordForms = False
        End With
        oWord.Selection.Find.Execute()
    End Sub

    Private Sub BTN_TIM_BOOKMARK_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BTN_TIM_BOOKMARK.Click
        oWord.Selection.GoTo(Word.WdGoToItem.wdGoToBookmark, Name:="a")
    End Sub

Hy vọng là hữu dụng !
dragons
Members
 
Bài viết: 18
Tham gia: 26-08-2008, 15:58

Re: Lập trình Word bên VB.net ??

Post Vbose88 26-01-2010, 14:33

Mục tiêu của mình là như vầy:
giả sử như mình có file .doc có nội dung như sau: "xin chào các bạn" ( dĩ nhiên thực tế nội dung lớn hơn nhiều) mình muốn duyệt từng từ trong file này và lấy nội dung từng từ cho ra 1 listbox hay 1 mảng thứ 1, đồng thời lấy vị trí(range) của mỗi từ tuơng ứng xuât ra listbox hay mảng thứ 2.
kết quả:
xin -> (0,3)
chào (4,8)
các (9,11)
...............
mình viết thế này

Code: Chọn hết
Dim UNGDUNG As Word.Application
        UNGDUNG = New Word.Application 'CreateObject("Word.Application")
        UNGDUNG.Visible = False
        Dim File As Word.Document
        File = UNGDUNG.Documents.Add("D:\text.doc")
        UNGDUNG.Application.Visible = False
        Dim objselection As Word.Selection
        'Gán vị trí hiện hành trong Document vào biến selection
        objselection = File.Application.Selection()
       
       Do until hết file
            objselection.MoveRight(Word.WdUnits.wdCharacter, 1, Word.WdMovementType.wdMove)
           listbox1.items.add(......)
           ListBox2.Items.Add(objselection.Range)
        Loop


Cái chỗ do until hết file mình không biết viết thế nào
với cái chố add cái từ ở objselection hiện hành mình ko biết viết thế nào.
Mong các bạn chỉ giúp.
Vbose88
Members
 
Bài viết: 10
Tham gia: 28-12-2009, 14:23

Re: Lập trình Word bên VB.net ??

Post dragons 26-01-2010, 16:13

Mình là dân amatuer không rành nhiềum nhưng theo bạn nói thì ý của mình trong trường hợp file word toàn text, không có đối tượng khác thì như sau:
Mỗi từ cách nhau bởi một khoảng trắng => chọn hết tại liệu => gán hết vào một biến chuỗi => tạo mảng cho chuỗi nhờ khoảng trắng => duyệt qua mỗi phần tử => gán phần tử và vị trí của phần tử vào Listbox
- Tọa độ thì có thể thêm 2 biến nữa => ghép nối lại dùng hàm lenght => đếm ...
- Mình không nghiên cứu hết được VBA Word, cần tới đâu làm tới đó thôi. Không biết nó có hàm lấy tọa độ không nữa.
- Nếu không có thì mình có thể chế vòng vèo => cũng ra !

Chỗ hết file anh có thể dùng : số pt trong mảng + số khoảng trắng trong chuỗi hoặc số từ trong file kể cả khoảng trắng !
dragons
Members
 
Bài viết: 18
Tham gia: 26-08-2008, 15:58

Re: Lập trình Word bên VB.net ??

Post songoku 26-07-2010, 15:10

Chào bạn, ứng dụng của mình cũng liên quan đến .doc, của mình làm hiển thị nội dung file word đó lên listbox, mình load tên file đó lên nhưng ko hiển thị nội dung vô listbox được,
đây là code btn hiển thị nội dung file vô listbox
Code: Chọn hết
Dim x As String
        While sr.Peek <> -1
            Console.WriteLine(sr.ReadLine())
            x = sr.ReadLine()
            lbx1.Items.Add(x)
        End While
        sr.Close()
songoku
Members
 
Bài viết: 4
Tham gia: 07-07-2010, 10:07


Trở về VB.NET

Ai đang truy cập

Đang xem diễn đàn này: 0 thành viên và 3 khách