[英]ThisShutdown Event file deletion in Excel addins VSTO using c#
[英]How to handle mouse moving of ranges event in Excel using C# VSTO
简介:我有一个类,它用相似的逻辑表示表列:
class ColumnWrapper
{
int _column;
int _row;
string _name;
string _caption;
Worksheet _worksheet;
Dictionary<int, string> _values; // <row offset index, value>
public void Open()
{
// ...
// Connect to server and get values
// ...
Range r = _worksheet.Range[_column, _row];
r.Value2 = _caption;
foreach (Range item in _values)
{
Range r = _worksheet.Range[_column, _row + item.Key];
r.Value2 = item.Value;
}
var addressStart = String.Concat(ExcelColumnFromNumber(_column), _row);
var addressEnd = String.Concat(ExcelColumnFromNumber(_column), (_row + _values.Keys.Max()));
Range range = _worksheet.Range[addressStart, addressEnd];
_worksheet.Names.Add(_name, )
}
public void Delete(string value)
{
// Delete row and shift all rows below to up
int index = _values.First(i => i.Value == value).Key;
foreach(var key in _values.Where(i => i.Key > index))
// decrement index
RefreshValues();
}
}
Excel中的用户可以选择某个范围,然后将其移动到某个地方。
我需要处理此事件,因为要允许用户仅移动标题单元格,并在所有其他情况下放弃移动。
次要问题:如何以编程方式移动范围? 现在,在删除行时,我将进行_values收集并递减所有索引,该索引大于已删除值的索引。 之后,我将所有范围的值重置,它是如此之慢。 但是,如果可以移动范围,则速度会更快。
没有开箱即用的此类事件。 您可以通过使用一些其他逻辑来模拟许多事件。 我认为您可以使用以下逻辑来实现所需的事件:
这应该使您非常接近解决方案,但是您可能需要添加一些其他检查,...或者您可以将此逻辑限制为只允许某些不希望移动的范围。
至于第二个问题, 请看Range.Cut方法 。 我记录了一个移动范围的宏,这是excel用于移动范围的代码。
同样, 设置整个范围的值比循环遍历单元格和设置单元格值要快得多。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.