J'écris un add-in Excel utilisant C# et doivent être en mesure de dire quand les utilisateurs cellules Autofill.Excel événement autofill en C#
Comment puis-je attraper l'événement autofill?
J'écris un add-in Excel utilisant C# et doivent être en mesure de dire quand les utilisateurs cellules Autofill.Excel événement autofill en C#
Comment puis-je attraper l'événement autofill?
Je me suis trouvé la solution après de nombreuses tentatives. La solution n'est pas idéale mais elle semble fonctionner.
Assurez-vous de gérer l'événement de changement de feuille de calcul:
displayWorksheet.Change += new Excel.DocEvents_ChangeEventHandler(CellsChange);
la méthode pour manipuler devrait alors ressembler à ceci:
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
}
}
}
Voici comment je determmine si une seule cellule a changé ou multiples soit en collant une gamme de cellules ou par des valeurs de drague
//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
}
}
}
J'espère cela aide d'une certaine manière à déterminer comment les cellules ont été changées.
Deezos