doc用二进制方式,HTML用文本方式

解决方案 »

  1.   

    doc文件用OLEAutomation打开然后再读取并写入数据库。
    HTML的话需要建立一个过程分析代码,可以用ShdocVW+MSHtml
    www.applevb.com
      

  2.   

    能说的再详细点吗?我的目的是将文件的内容读入数据库,然后再通过一个richbox显示出来,最好能作到看到的东西和原来文件的格式差不多。我会再加分的。谢了!
      

  3.   

    1.使用二进制方式操作文件。
    2.使用ADO的getchunk()和appendchunk()
      

  4.   

    LOUYP说的对,但好象取出数据后还要写入文件才可以
      

  5.   

       使用Byte类型的数组变量,就可以很方便地把读出的数据(用ADO的getchunk()函数)按二进制方式写入文件。
      

  6.   

    可我读出来后为什么在richtxtbox中显示出来的却是乱码,该如何才能显示出内容来呢
      

  7.   

        你可以先把读出来的数据写到一个文件中,在windows下打开这个文件,看看读出来的东西对不对。
      

  8.   

    我是一个字节读的,我试了一下,读一个字节同时写入一个新文件,可打开新文件却是乱码,看来一个字节一个字节的读 *.doc格式的文件不太对,能告诉我怎样才可以吗
      

  9.   

    或者这样吧,不用richtextbox
    用HTMLView
      

  10.   

    我用type类型读出是可以的,但再把它赋给richtextbox,结果能显示出内容来,但前后却有许多的乱码,这些可能就是word的控制字符,richtextbocx无法识别,请问有什么办法可以让richtextbox显示的内容和word中看到的大致差不多。
      

  11.   

    要用传统方式:open filename for binary as handle 打开文件,使用get和put函数读写;
    FSO方式不支持二进制方式。
      

  12.   

    我用byte类型数组读出是可以的,再把它赋给richtextbox,结果也能显示出内容来,但前后却有许多的乱码,这些可能就是word的控制字符,richtextbocx无法识别,请问有什么办法可以让richtextbox显示的内容和word中看到的大致差不多。
      

  13.   

    richtextbox好像是不能识别word文档,可以使用windows api函数shellexcute调用word。
      

  14.   

    使用WORD控件,打开文件后,将其TEXT值赋值给RICHTEXTBOX.TEXT 。
      

  15.   

    以下代码可将二进制文件读进数据库以及读出
      写进数据库的代码:      
            Dim delsql As String
            Dim db As Database
            Dim reporttab As Recordset
            Set db = OpenDatabase("f:\报表系统\reportmodal.mdb")
            Set reporttab = db.OpenRecordset("reportmodal", dbOpenDynaset)
            
            
            
            Dim FileNumber As Integer, DataLen As Long
            Dim Chunks As Long, ChunkAry() As Byte
            Dim ChunkSize As Long, Fragment As Long
            Dim str5 As String
            ''On Error GoTo errh:
            
            
            FileName = App.Path + "\rpttmp.kts"
            AppendBlobFromFile = False
            ChunkSize = 2048
            
            FileNumber = FreeFile
            Open FileName For Binary Access Read As FileNumber
            DataLen = LOF(FileNumber)    ' 档案中资料的长度
            If DataLen = 0 Then Close FileNumber: Exit Function
            Chunks = DataLen \ ChunkSize
            Fragment = DataLen Mod ChunkSize
            reporttab.AddNew
            reporttab!frptname = RPTNAME
            ReDim ChunkAry(Fragment - 1)
            Get FileNumber, , ChunkAry()
            reporttab.Fields("frptdata").AppendChunk ChunkAry
            ReDim ChunkAry(ChunkSize - 1)
            For i = 1 To Chunks
                Get FileNumber, , ChunkAry()
                reporttab.Fields("frptdata").AppendChunk ChunkAry
            Next i
            reporttab.Update
            Close FileNumber
            AppendBlobFromFile = True
            db.Close
            Set reporttab = Nothing
    从数据库读出的代码:
        Dim intfilenum As Integer
        Dim lngsize As Long
        Dim intchunks As Integer
        Dim intremainder As Integer
        Dim ardata() As Byte
        Dim i As Integer
        Dim lngaffected As Long
        Dim befordata As Long
        Dim findstr As String
        Dim db As Database
        Dim reporttab As Recordset
        Set db = OpenDatabase("f:\方文书用\报表系统\reportmodal.mdb", dbOpenDynaset)
        Set reporttab = db.OpenRecordset("reportmodal", dbOpenDynaset)
        
        findstr = "frptname='" & Trim(reportname) & "'"
        reporttab.FindFirst findstr
        
        If reporttab.NoMatch Then
            MsgBox "打开报表错误,请与灵通公司联系!", vbExclamation, msgtitle
            Exit Function
        End If
        
        FileName = App.Path + "\rpttmp.kts"
        intfilenum = FreeFile
        Open FileName For Binary Access Write As intfilenum
        lngsize = reporttab.Fields("frptdata").FieldSize
        
        intchunks = lngsize \ 32768
        intremainder = lngsize Mod 32768
        ReDim ardata(8192)
        For i = 1 To intchunks
            ardata() = reporttab.Fields("frptdata").GetChunk(befordata, 32768)
            befordata = befordata + 32768
            Put intfilenum, , ardata()
        Next i
        
        ReDim ardata(intremainder)
        ardata() = reporttab.Fields("frptdata").GetChunk(befordata, intremainder)
        Put intfilenum, , ardata()
        
        Close intfilenum
        
        
            For i = 1 To 800
                .row = i
                .col = .MaxCol - 1
                If Trim(.Text) = "" Then Exit For
                formulastr(i, 1) = Trim(.Text)
                .col = .MaxCol
                formulastr(i, 2) = Trim(.Text)
            Next i
            
            cellformulas(1) = i - 1
            .ColHidden(.MaxCol - 1) = True
            .ColHidden(.MaxCol) = True
        End With
        db.Close
        Set reporttab = Nothing
      

  16.   

    用richbox显示doc和html是件麻烦事,建议采用浏览器控件,当需要显示doc文档时,发一个application/doc的MIME类型就行了
      

  17.   

    pent,能说的具体一点吗,谢谢
      

  18.   

    lou_df老兄,哪个是word控件
      

  19.   

    1.使用二进制方式操作文件。
    2.使用ADO/DAO的appendchunk() 写入到数据库的字段(binary)
    3.使用ADO/DAO的getchunk() 读入到文件
    4.使用ole 控件显示内容
        OLE1.SourceDoc = "c:\test.doc"
        OLE1.Action = 0
    我试过,对.doc 可以
      

  20.   

    用OLE我也知道是可以的,但是速度实在太慢了,我看到过人家做的一个程序就可以很快的将word格式的文件导入数据库,然后再基本按照原来格式显示出来,就是不知道是怎么做的。
      

  21.   

    建立OLE对象,用VBA语言(宏语言)读出DOC中不带格式的纯文本,再写入数据库.
      

  22.   

    可以用VB中的引用,将WORD.APPLICATION 做为一个对象,然后再打开文件,再用WORD.document 对象的另存为方法将其保存为RTF 格式,再用RICHBOX 的 loadfile 方法来调入RICHBOX 显示。
    Option Explicit
    Dim w As New Word.Application
    Dim doc As Word.DocumentPrivate Sub Form_Resize()
        rb.Left = 0
        rb.Top = 0
        rb.Width = Me.ScaleWidth
        rb.Height = Me.ScaleHeight
    End SubPrivate Sub Form_Unload(Cancel As Integer)
        w.Quit
        Set w = Nothing
    End SubPrivate Sub mun_Load_Click()
        '假设你已将文件完整的从数据库中DUMP 出来,存为一个文件。
        'Set doc = w.Documents.Open("C:\My Documents\《新神雕侠侣》一篇全攻略.doc", , True)
        Set doc = w.Documents.Open("C:\My Documents\FlightSim_Com Review Phoenix Simulation Software Boeing 777.htm", , True)
        doc.SaveAs "c:\temp\temp.rtf", wdFormatRTF
        doc.Close
        Set doc = Nothing
        rb.LoadFile "c:\temp\temp.rtf"
    End Sub
      

  23.   

    如果用vba速度很慢的,但看来也只能这样了
    谢谢各位了。