Create the tablecloth object (1), subdivide it, give it a Curve modifier with a spiral (2) as Curve Object, select all its vertices and assign them to a vertex group, give it a Vertex Weight Proximity modifier.
In this Vertex Weight Proximity modifier select the vertex group as Vertex Group, select object 3 as Target Object (this is a subdivided plane that you duplicate on Z), select Proximity Mode > Geometry and tweak the Lowest and Highest values.
Give a Cloth simulation to your tablecloth with the vertex group as Pin Group, enable Self Collisions.
Parent the tablecloth and the spiral to the vertex weight proximity object (3). Create a table object (4) and give it a Collision simulation:
![enter image description here](https://cdn.statically.io/img/i.sstatic.net/9f9tb.jpg)
Object 3 is the Vertex Weight Proximity object, is a subidivided plane that is duplicated on Z:
![enter image description here](https://cdn.statically.io/img/i.sstatic.net/riP7U.jpg)
The tablecloth modifier settings:
![enter image description here](https://cdn.statically.io/img/i.sstatic.net/FnqUE.jpg)
Keyframe the location of the vertex weight proximity object (3) and of the tablecloth:
![enter image description here](https://cdn.statically.io/img/i.sstatic.net/z9oHh.gif)