吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1192|回复: 8
收起左侧

[讨论] C#中的COM Object

[复制链接]
DamianRice 发表于 2022-5-25 20:47

背景

最近在考虑做一个C#监听WordTable的数据变化的工具
Table中的数据改变,自动匹配刷到Excel
由于原生的Microsoft.Office.Interop.Word中没有类似TableChangedEventHandler可以监听表格的变动

我就开了一个Thread在后台扫描Document.Tables
但是发现,Application下的Document对象可以保持唯一HashCode,但是Table对象的HashCode每次循环扫描都不一样

想请教各位大佬

  1. COM Object的唯一性要怎么实现?
  2. 为什么DocumentTable同为COM Object,但是HashCode表现会不同

感谢!

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

GitHubList 发表于 2022-5-26 00:14
可以考虑用NPOI
 楼主| DamianRice 发表于 2022-5-26 07:31

NPOI和Aspose我都有尝试和考虑过,但用第三方的库有一个问题就是
:我需要System.Runtime.InteropServices.Marshal.GetActiveObject("Word.Application");来抓取已经打开的Word或Excel文档app,假如先打开文档,再通过NPOI扫描的话,读写好像会有些问题

如果所有的操作都是通过程序完成当然NPOI库,Aspose库都非常不错,但这个操作是混合在一起的,不知道您还有什么好的方案么?

7R903 发表于 2022-5-26 09:15
GitHubList 发表于 2022-5-26 09:16
文件不能关闭也简单,定时保存打开的文件

然后把文件复制到别的路径读取,获取是否变动了
Brinish 发表于 2022-5-26 09:42
都用excel来处理,需要word文件的时候从excel中读取现生成都来得及
 楼主| DamianRice 发表于 2022-5-26 20:58
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写数据,不是崩溃就是没法保存
 楼主| DamianRice 发表于 2022-5-26 21:02
GitHubList 发表于 2022-5-26 09:16
文件不能关闭也简单,定时保存打开的文件

然后把文件复制到别的路径读取,获取是否变动了

这个也是个好办法,但是如果文件比较大
全量保存一次是耗时操作的话,这个监控线程就有点呆了

不过您提供了一个思路,可以用OpenXML来做监控,然后增量拷贝检测变动
可能具体实现起来稍微有点麻烦
 楼主| DamianRice 发表于 2022-5-26 21:03
Brinish 发表于 2022-5-26 09:42
都用excel来处理,需要word文件的时候从excel中读取现生成都来得及

奥这个可能不太能满足我的需求,涉及Word在操作中是因为,从Excel向Word转换的过程没法约定格式,Word的格式调整Excel不能完全匹配和实现,比如缩进,所有页字号统一这些问题
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 11:27

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表