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
看来高手也怕麻烦,都去挑选简单题拿专家分了,哈哈!如果没人解答我的问题,明天结贴了。