VB程序员博客

VB程序开发

    如题,注意不是两个word文件文件,而是一个。也就是将一个word文件存放于数据库Access中的两个字段,一个是OLE(存放图片、公式),一个是文本(存放图片以外的)。读取时,再读到VB的一个控件OLE中来。
    回答要有针对性,要具体,不要空洞的理论,更不要答非所问!可以是可以,不过你要多具体??

首先结合你的知识来看

你知道vba么??

ole的存放你会么?

问的具体,答的能具体….

word取文本的方案是 http://www.officexy.com/Articles/Word/Word_VBA20061027194952795.htm

读取图片的方案 利用shapes集合

如果需要代码的话,先理解了这些说的东西难点在图片上,是存不会还是取不会,再具体点回复liuxiaoyi666:谢谢您的关注,偶刚开始学VB6.0,还没学VBa。OLE的存取没问题,关键是解决如题所提出的问题。
回复liuxiaoyi666:谢谢您的关注,存取都须得到您的指教,一个word存取于一个OLE字段没问题了。主要解决的问题如题。分离文本和图片很好办。
文本可以循环所有的段落,取TEXT即可。
图片可以循环对象集合。

文本保存一下没问题。
图片一张时也好办,多张呢?需要打包吧?不需要怎么存到一个字段里?

保存解决了,恢复呢?
如果文中有N张图,恢复里你知道哪张在哪吗?

换个思路,将WORD文件保存为html,
得到一个HTML文件和一个含有所有图片的文件夹,
OK,HTML本身就是文本文件。
图片文件夹打成压缩包,压缩文件直接存到OLE字段。

还原时,只要写到本地解压一下,调用WORD打开HTML文件即可。楼主还不如直接把word存入ole字段中,需要的时候直接调用呢

遍历文档中所有的设置非常麻烦,涉及的内容不仅仅是成百上千,而且要恢复成一模一样难度太大。access image类型用appendchunk getchunk这样的技术存取

那光写代码估计你也不会理解了,一步步地教好了

http://topic.csdn.net/t/20020924/18/1049944.html

二进制文件的读取,先学学这个…..

然后讲 vba….接分回复liuxiaoyi666:不要小瞧人么,您说网页我早就拜读了,你直接往下讲吧!
回复其他网友:word里面除图片,还有公式,把整个word存放于一个OLE字段,太大了,所以想把公式和图片部分分离出来放在OLE内,将文本部分放在另一个文本字段里。网友liuxiaoyi666,您直接贴出代码吧,注意是用VB6.0。UP<
回复vansoft:一般不会超过2G,但存取速度较慢,主要是想提高存取速度,同时也想学习学习。高手都在忙什么了  一个也不见  呜呜 ~~~~(>_ <)~~~~ 变态的,解析Word,建议搜索RTF规范1.8.

我想问楼主:
1.存取OLE慢吗?ADO操作本地数据库不慢吧?
2.为什么要把文件(文本/图片)往数据库里塞?数据库里保存好文件路径,程序再根据路径来读取WORD不好么?<
回复vansoft:谢谢您的指教,与网络没关系。从access中的OLE类型字段读取时,首先须将数据库数据写入Stream对象,然后再将Stream对象数据保存为文件,最后再在OLE控件中显示;保存时正好相反。这个过程复杂,所以速度变慢了。补充:是Word文件,不是图片。图片存取速度还可以,这我知道。挂上来进一个星期了,都没人能解决,再挂两天,不然我结贴了,高手快进啊!<
<
感谢asftrhgjhkjlkttttttt、dingyanwei关心本贴!我的问题已经说得很清楚了,之所以想拆分word文件,主要是想提高存取速度,我也看到有些题库是这样处理的。为此,我把读取代码贴上来,大家分析分析,看是否有更好的读取方法:
Private Sub tk_ReadFile()
  Static i As Long
  Set tm_Stm = New ADODB.Stream
  Set jd_Stm = New ADODB.Stream
  Set xg_Stm = New ADODB.Stream
  With tm_Stm
      .Mode = adModeReadWrite
      .Type = adTypeBinary
      .Open
      .Write Rs("题目").GetChunk(Rs("题目").ActualSize)    '将数据库数据写入Stream对象
      .SaveToFile App.Path & "cache m" & CStr(i) & ".doc"    '将Stream对象数据保存为文件
  End With
  With jd_Stm
      .Mode = adModeReadWrite
      .Type = adTypeBinary
      .Open
      .Write Rs("解答").GetChunk(Rs("解答").ActualSize)    '将数据库数据写入Stream对象
      .SaveToFile App.Path & "cachejd" & CStr(i) & ".doc"    '将Stream对象数据保存为文件
  End With
  With xg_Stm
      .Mode = adModeReadWrite
      .Type = adTypeBinary
      .Open
      .Write Rs("相关知识").GetChunk(Rs("相关知识").ActualSize)  '将数据库数据写入Stream对象
      .SaveToFile App.Path & "cachexg" & CStr(i) & ".doc"
  End With
  With OLE1
      .SourceDoc = App.Path & "cache m" & CStr(i) & ".doc"
      .Action = 1                                              '从文件的内容中创建链接对象
  End With
  With OLE2
      .SourceDoc = App.Path & "cachejd" & CStr(i) & ".doc"
      .Action = 1
  End With
  With OLE3
      .SourceDoc = App.Path & "cachexg" & CStr(i) & ".doc"
      .Action = 1
  End With
  i = i + 1
  tm_Stm.Close
  jd_Stm.Close
  xg_Stm.Close
End Sub
看来高手也怕麻烦,都去挑选简单题拿专家分了,哈哈!如果没人解答我的问题,明天结贴了。

标签: , , ,