在C#中的Excel自动填充事件

我正在使用C#编写一个Excel加载项,并且需要能够告诉用户何时自动填充单元格。

我怎样才能抓住自动填充事件?

这里是我如何确定单个单元格是否已更改或通过粘贴一个单元格范围或通过拖拉值的倍数

//Get the currentCell/s changed object missing = System.T string currentCell = Target.get_Address( missing, missing, Microsoft.Office.Interop.Excel.XlReferenceStyle.xlA1, missing, missing); //Split the currentCell variable this aids the logic in getting cell letter and number char[] delimiter = new char[] {'$'}; string[] CellSplit = currentCell.Split(delimiter); //try parse the value in position 1 if this is true then a whole sheet has been pasted and needs to be checked //usually will be false if 1 cell is changed or multiple by dragging Int32 int32Val; bool result; result = Int32.TryParse(CellSplit.GetValue(1).ToString).Replace":", ""),System.Globalization.NumberStyles.Integer, null, out int32Val); //check the length of the array as this will help in determining how the cells have been changed int numCellSplit = CellSplit.Length; //the result is false if a single cell was changed and the length is 3 if (CellSplit.Length == 3 && result == false) { \\your code here } //the result is true if the whole sheet has been pasted if (CellSplit.Length == 3 && result == true) { \\your code here } //if the user dragged the data from one cell across others if (CellSplit.Length == 5 && result == false) { //create char arrays to get the Alphabetical letters to use to loop char[] FirstLetter = CellSplit.GetValue(1).ToString().ToCharArray(); char[] SecondLetter = CellSplit.GetValue(3).ToString().ToCharArray(); int Alphaletter = (char)FirstLetter.GetValue(0); int Betaletter = (char)SecondLetter.GetValue(0); //Alphabetical letters have an int value so they can be used to loop through the cells for (int CellCheck = Alphaletter; CellCheck <= Betaletter; CellCheck++) { int LoopStart = int.Parse(CellSplit.GetValue(2).ToString().Replace(":", "")); int LoopEnd = int.Parse(CellSplit.GetValue(4).ToString()); for (; LoopStart <= LoopEnd; LoopStart++) { //your code here } } } 

我希望这有助于确定细胞如何改变。

Deezos

经过多次尝试,我自己find了解决scheme。 解决scheme不理想,但它接缝工作。

确保处理工作表更改事件:

 displayWorksheet.Change += new Excel.DocEvents_ChangeEventHandler(CellsChange); 

处理它的方法应该如下所示:

 private void CellsChange(Excel.Range Target) { if ((this.Application.Selection as Excel.Range) != null) { Excel.Range selectedRange = thisAddIn.Application.Selection as Excel.Range; if (selectedRange.Rows.Count > 1) { //put your code to handle autofill here } } }