So, let me preface this by saying I'm not a python expert, so take it with a grain of salt 🙂
It looks like the openpyxl module assumes that it will be imported as a top level module named "openpyxl". When you import it like "from .Modules import openpyxl", that is a relative import, and there is no top level module named "openpyxl", because it's actually a child of the current module. E.g. if the current module was "MyModule", then the name of the openpyxl module would be MyModule.openpyxl.
So, when you import openpyxl like "import openpyxl", it searches all of the paths in sys.path for a subdirectory named openpyxl. So you can add the path to the Modules directory to sys.path, which allows python to find the openpyxl module when you import it that way. And importing it that way ensures that there is a top level module names openpyxl, which is what it expects.
Also, since fusion 360 has a single instance of python that all the plugins run in, you want to be sure to clean up after yourself and remove any entries to sys.path that you add, so that you have less chance of negatively affecting other plugins.