Excel is _very_ powerful, …and very buggy and inconsistent, in my experience.
Refreshing a QueryTable object or ListObject that has the filldown option enabled to automatically copy formatting and formulæ to all cells in the same column of the object can cause all or part of the object's header row to be copied into the body of the object. There are workarounds of varying ease and varying reliability.
There's still no visible indication whether an edit box that accepts cell references or formulæ is currently in the mode where using the arrow keys inserts cell references and has no undo stack, or is in the mode where it acts like a normal textbox.
The security model still allows a user to specify that sorting and autofiltering a locked worksheet is allowed, but does not actually implement it. Trying to use those features on a locked sheet fails with a permissions error.
Similarly, if a formula returns an array, you cannot use Autofilter or right-click->Sort. Even if the array is 1-dimensional (and thus, your action applies to the entire array), Excel complains that you cannot modify part of an array. There's a workaround, that amounts to re-implementing both Autofilter and Sort using lambda(), let(), and parameter cells.
Excel doesn't like to switch reliably between sheets that aren't at the same zoom level, sometimes drawing one of them at the previous's sheet's zoom…but using blurry upscaling. Or sometimes just stops drawing part a sheet or parts of the UI, requiring Excel to be relaunched.
The web version is really a completely new spreadsheet …with unfortunately the same name as the desktop application. They have different bugs, and different features.
They have too many kinds of add-ins, each with a different management interface, and too many scripting languages. Actually, the mere number of them wouldn't be a problem…if they all worked both in desktop and on the web. As is, there's no way to script the two Excels that guarantees function in both the online and offline applications. Some of types of add-in or scripting actions can be implemented with lambda().
…Euh…I could go on for far-far too long. (^_^);