首页 新闻 会员 周边 捐助

【求助】asp.net 中 怎么样得到 Word 剪贴板 的内容?

0
悬赏园豆:20 [已解决问题] 解决于 2011-09-13 15:56

有谁遇到过类似的问题:
两个word文档之间进行copy、paste操作时出现以下错误:
此方法或属性无效,因为剪贴板是空的或无效的!

生成服务合同的时候,合同附件有一个服务内容描述,这是需要根据配置不同的产品服务内容都不一样。
从对应的字模板中读出内容显示在合同中。
生成服务合同我用的是Office的COM组件,从子模板中读内容到服务合同,我就用了复制方法。  
Range.Copy();

object Nothing = System.Reflection.Missing.Value;
Word.Application attachApp
= new Application();
object type = WdBreakType.wdSectionBreakContinuous;
Word.Document attachDoc
= attachApp.Documents.Open(ref docFile, ref Nothing, ref Nothing, ref Nothing,
ref Nothing, ref Nothing, ref Nothing, ref Nothing, ref Nothing, ref Nothing,
ref Nothing, ref Nothing, ref Nothing, ref Nothing, ref Nothing, ref Nothing);
attachDoc.Select();
attachApp.Selection.WholeStory();
attachDoc.Sections[
1].Range.Copy();
object attach_ServiceContent = "attach_ServiceContent";
doc.Bookmarks.get_Item(
ref attach_ServiceContent).Range.InsertBreak(ref type);
doc.Bookmarks.get_Item(
ref attach_ServiceContent).Range.PasteAndFormat(WdRecoveryType.wdPasteDefault);
attachApp.NormalTemplate.Saved
= true;
object doNotSaveChanges = WdSaveOptions.wdDoNotSaveChanges;
attachDoc.Close(
ref doNotSaveChanges, ref Nothing, ref Nothing);
attachApp.Quit(
ref doNotSaveChanges, ref Nothing, ref Nothing);

但是现在不稳定,有时间能生成成功,有时候报错:此方法或属性无效,因为剪贴板是空的或无效的。

我在网上找资料,也没有查出什么结果,有人说是:由于执行上述动作时间不够导致。
    如果能捕获这种错误,并进行延时直到它完成这个动作;则能解决这个问题;
    但我不知如果才能捕获上述错误;并进行相应处理.

//IDataObject data=Clipboard.GetDataObject();

有些人说用以上的做法,得到剪贴板的内容。
这种做法取到的data为null根本不能达到效果,此时是因为word中的剪切板和系统剪切板并不一样

求助,怎么样得到 Word 剪贴板 的内容,然后判断 Word 剪贴板 是否为空,为空就延时5秒再复制一次。

liuhh的主页 liuhh | 初学一级 | 园豆:179
提问于:2011-08-26 10:48
< >
分享
最佳答案
0

Office的COM组件很蛋疼的.我那时候搞~生成200多页word要4分钟.最后换到openxml~2秒以下~外部调用很费资源

 

请问一定要在word 2003上么?

收获园豆:15
dotNetDR_ | 老鸟四级 |园豆:2078 | 2011-08-26 12:45
不是,目前用的是 office 2007;因业务需求,暂时不考虑2003,呵呵
liuhh | 园豆:179 (初学一级) | 2011-08-26 14:40
http://www.microsoft.com/china/msdn/library/office/office/OfficeOpenXMLFormats.mspx?mfr=true

http://www.microsoft.com/download/en/details.aspx?displaylang=en&id=5124


OpenXMLSDKTool.msi这个会带一个工具给你去根据.docx去反编译出C#的OpenXML代码很好用的
dotNetDR_ | 园豆:2078 (老鸟四级) | 2011-08-26 15:09
其他回答(3)
0

asp.net是服务器端技术,你用C#在服务器端访问剪切板,那要看你服务器的剪切板里面有内容没有了。

想访问客户端的剪切板当然是用客户端技术,JavaScript。。。

收获园豆:5
顾晓北 | 园豆:10893 (专家六级) | 2011-08-26 10:58
我要得到的是 word 的剪贴板不是客户端的剪贴板,我的word 是生成好之后保存存在服务端的,客户端还有一个下载功能,并不是保存在客户端的。
支持(0) 反对(0) liuhh | 园豆:179 (初学一级) | 2011-08-26 11:03
你想让客户端下载这个word是么?那弄一个专门的下载页面,就行了,跟剪切板有什么关系?难道你是想先把服务器上这个word文件先复制,然后返回给客户端?如果是这想法的话,还是先去学习一下基础。
支持(0) 反对(0) 顾晓北 | 园豆:10893 (专家六级) | 2011-08-26 12:18
呵呵,可能我的意思没有表达清楚,我要实现的功能是在线生成word格式的 合同文档;这个合同文档中包含附件1,附件2等区域,而附件1,附件2等是也都是保存在服务端的word文件,需要通过office组件去读取这些附件word文档,然后把读取到的附件word文档的数据添加到合同文档中去,最后整合成一个完整的word文档, 生成好之后提供给客户端下载,这其中就涉及到两个word文档之间进行copy、paste操作,而我这个问题就是在2个word文档之间进行copy、paste操作中遇到的。。。
----------------------------------------------------------
例如我现在有2个word文件; 第一个word文件叫 【合同.doc】;第二个文档叫 【附件.doc】;【合同.doc】有一个区域为 显示附件的。我现在要做的就是 通过 office组件读取【附件.doc】然后把读取到的数据粘贴到 【合同.doc】的附件区域,这样就跟 word中的剪切板产生关系了;貌似贴出的代码里就可以看到。。。 不知道我这样解释是否清楚?
支持(0) 反对(0) liuhh | 园豆:179 (初学一级) | 2011-08-26 14:06
那是OFFICE组件的事情了,应该跟剪切板也没什么关系,你仔细看看OFFICE的组建里面提供的API吧,然后拼接到一块儿以后生成临时文件放到你的某个目录下,然后供客户端下载。
支持(0) 反对(0) 顾晓北 | 园豆:10893 (专家六级) | 2011-08-26 15:06

@liuhh: 我遇到跟你一摸一样的需求,你是怎么处理好的,求指教。 qq:804390150  感激不尽。

支持(0) 反对(0) lijianzhq | 园豆:202 (菜鸟二级) | 2014-06-13 10:24
0

你好,我也遇到了此问题,可以分享一下你是怎么解决的吗?

lijianzhq | 园豆:202 (菜鸟二级) | 2014-06-13 10:23
0

也可以尝试一下其他方法,比如Spire.Doc 类库,可以实现复制Word文档的功能,好用又方便
https://www.e-iceblue.cn/document/copy-word-document.html

UnSoleil | 园豆:228 (菜鸟二级) | 2022-09-15 15:28
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册