One train had rammed into the side of another one at the Neuhausen-am-Rheinfall train station near the German border at around 7:30 am (0630 GMT), the SBB rail company said.
"We are in the process of evacuating," SBB spokesman Jean Philippe Schmidt told AFP, saying the company would leave it up to police to comment on any injuries.
Swiss media meanwhile reported that at least 30 people had been injured and that four ambulances were on site.
The locomotive of one of the trains, a double-decker that had been heading for Winterthour in the canton of Zurich, had derailed when it was hit by a regional train.
A rescue train had been sent in to help put it back on the track, and was also carrying rescue personnel to help with any injuries, Schmidt said.
"The train hit the emergency breaks and everyone was thrown out of their seats," one of the passengers told the 20minutes.ch website.
"One person was bleeding heavily from the head," he added.
Another passenger told the online paper that he had seen "an old lady lying unconscious on the ground who was bleeding a lot."