gpt4 book ai didi

c# - 在Excel中获取删除的范围

转载 作者:太空宇宙 更新时间:2023-11-03 15:06:32 27 4
gpt4 key购买 nike

这就是我试图通过 Excel 插件实现的目标。 Excel 用户选择一个范围并将其删除。我想将该范围内的单元格数据(无论他删除什么)写入日志文件。 SO 上的多个问题说您无法在 SheetChange 事件处理程序中删除范围,您需要存储它。我将范围存储在选择更改事件方法处理程序中的全局变量 LastRange 中。我需要在 SheetChange 事件处理程序中使用 LastRange

问题是我得到 COM 异常 --

COM object that has been separated from its underlying RCW cannot be used.

我在某处知道 LastRange 正在被释放,因此是异常。我提到了另一个 SO 问题 here .即使我对委托(delegate)有很强的引用,问题仍然存在。

private  ADXExcelSheet_EventHandler sheetChangeEventHandler;
private ADXExcelSheet_EventHandler sheetSelectionChangeEventHandler;

private void InitializeComponent()
{
sheetChangeEventHandler = new AddinExpress.MSO.ADXExcelSheet_EventHandler(SheetChange);
excelEvents.SheetChange += sheetChangeEventHandler;
sheetSelectionChangeEventHandler = new ADXExcelSheet_EventHandler(SheetSelectionChange);
excelEvents.SheetSelectionChange += sheetSelectionChangeEventHandler;
}

//....

Range LastRange;

public void SheetSelectionChange(object sender, object sheet, object range)
{
LastRange = (range as Range);
}

public void SheetChange(object sender, object sheet, object range)
{
ClassX.Method1(range as Range, LastRange);
}

不确定为什么 LastRange 在 Method1 中仍然为 null。 LastRange 已从 SheetChange 正确传递到 Method1()。还有其他想法可以使它正常工作吗?

最佳答案

如果复制范围呢?

var sheetConcrete = (Worksheet)sheet;
var rangeConcrete = (Range)range;
LastRange = sheetConcrete.Range[rangeConcrete.Address]

(您可能需要使用语法才能使其正常工作)

加载项应该无法跟踪该 COM 对象,因此它应该保持事件状态。

关于c# - 在Excel中获取删除的范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43227993/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com