C#中的COM Object
# 背景最近在考虑做一个C#监听`Word`中`Table`的数据变化的工具
当`Table`中的数据改变,自动匹配刷到`Excel`里
由于原生的`Microsoft.Office.Interop.Word`中没有类似`TableChangedEventHandler`可以监听表格的变动
我就开了一个`Thread`在后台扫描`Document.Tables`
但是发现,`Application`下的`Document`对象可以保持唯一`HashCode`,但是`Table`对象的`HashCode`每次循环扫描都不一样
## 想请教各位大佬
1. COM Object的唯一性要怎么实现?
2. 为什么`Document`和`Table`同为COM Object,但是`HashCode`表现会不同
感谢! 可以考虑用NPOI GitHubList 发表于 2022-5-26 00:14
可以考虑用NPOI
NPOI和Aspose我都有尝试和考虑过,但用第三方的库有一个问题就是
:我需要`System.Runtime.InteropServices.Marshal.GetActiveObject("Word.Application");`来抓取已经打开的Word或Excel文档app,假如先打开文档,再通过NPOI扫描的话,读写好像会有些问题
如果所有的操作都是通过程序完成当然NPOI库,Aspose库都非常不错,但这个操作是混合在一起的,不知道您还有什么好的方案么? NPOI或者Aspon.Cell来实现吧 文件不能关闭也简单,定时保存打开的文件
然后把文件复制到别的路径读取,获取是否变动了 都用excel来处理,需要word文件的时候从excel中读取现生成都来得及 cn005897 发表于 2022-5-26 09:15
NPOI或者Aspon.Cell来实现吧
可能我现在的问题是不能单纯只用NPOI或者Aspose.Cell处理,VSTO可以检测Microsoft.Office.Interop.Excel的Application,并抓到Excel.Workbook对象,但是Aspose.Cell.Workbook对象和Excel.Workbook对象不能强转。我试过用VSTO打开一个Excel,然后用Aspose.Cell代替Interop.Excel写数据,不是崩溃就是没法保存 GitHubList 发表于 2022-5-26 09:16
文件不能关闭也简单,定时保存打开的文件
然后把文件复制到别的路径读取,获取是否变动了
这个也是个好办法,但是如果文件比较大
全量保存一次是耗时操作的话,这个监控线程就有点呆了
不过您提供了一个思路,可以用OpenXML来做监控,然后增量拷贝检测变动
可能具体实现起来稍微有点麻烦 Brinish 发表于 2022-5-26 09:42
都用excel来处理,需要word文件的时候从excel中读取现生成都来得及
奥这个可能不太能满足我的需求,涉及Word在操作中是因为,从Excel向Word转换的过程没法约定格式,Word的格式调整Excel不能完全匹配和实现,比如缩进,所有页字号统一这些问题
页:
[1]