从IE复制数据到Word ,其中发生了什么?

不知道你有没有注意,如果你从IE复制表格数据到MS Word,会显得很慢,但是表格的格式和样式都会保存下来,但是在别的浏览器,比如Firefox,Opera等复制表格数据到MS Word,则会快很多,效果和复制到记事本是一样的。难道是因为不同的复制来源(不同的浏览器),使得在剪贴板的数据不一样吗?

    先看一下,从IE复制到Word(2003和2007效果是差不多的,就不上图了)里的效果:

ie_word03 

    如果从Firefox、Opera复制到Word,效果如下图(上面一段是从Opera,下面那一段是从Firefox复制的):

opera_firefox_word03

    在运行里输入"clipbrd.exe",查看剪贴板(没有?在这里可以下载>)上的内容(上面的是IE,下面的是Firefox,有“略微的区别”):

ie_clipbrd

firefox_clipbrd

    复制数据时,注意到word的状态栏提示“连接服务器”的字样,于是拿出Wireshark,抓包分析了一下,果然(注意第四项,word发送了一个Http Get请求,请求的内容恰好是该网页的css文件,"HTTP GET /inc/ftp.css HTTP/1.1”):

ie_copy_word 

    显然,如果是表格数据的话,CSS一定定义了样式,于是Word自己拿了过来并解析,将表格样式显示了出来,而从别的浏览器粘贴时,却没有这一步,自然就没有样式了。

    上面说到,复制到剪贴板上的数据也“略微的差别”,的确是这种差别导致了,粘贴到word时产生的不同行为。Windows中剪贴板有两种,一种是Windows标准剪贴板,一种是Ole(Object Linking and Embedding,对象链接和嵌入)剪贴板,但实际上,标准剪贴板的API接口虽然没变,但是内部实现实际上已经使用Ole数据传输机制来实现了。Ole支持UDT(Uniform Data Transfer,统一数据传输),并可以通过拖放操作实现剪贴板的剪切、复制和粘贴等操作。OLE剪贴板除了拥有标准Windows剪贴板的性能外,还支持传输用户自定义的剪贴板格式,并能够在传输数据时绑定OLE格式(如字体、字号等)。

    所以从IE复制数据时,使用的是Ole剪贴板,绑定了Ole格式,而格式的来源又是在网络上的css文件,所以word才会去获取这个css文件。微软的word、excel、ie等都可以被称作OLE文档包容器,粘贴时自然能够识别到Ole格式的数据。而别的浏览器复制的时候并没有这种Ole格式,自然粘贴时只是纯文本了。如果是Ole格式的数据,但是粘贴时不时Ole容器,比如记事本,就会当作普通的文本复制。这就是为什么有人喜欢先把网页上的内容先粘贴到记事本,清楚掉格式,然后再复制到Word中的原因。

    如果想了解更多关于:OLE(对象连接和嵌入),UDT(统一数据传输)可以参考《COM本质论》、《Visual C++技术内幕》 。
    如何使用Ole剪贴板进行编程可以参考MSDN:
    http://msdn.microsoft.com/en-us/library/6www2be1(VS.80).aspx
    http://support.microsoft.com/kb/83659/zh-cn

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值