The incident occurred at around 7.35am near the Neuhausen am Rheinfall station on the Winterthur-Schaffhausen line.
"The trains crashed head-on into each other and derailed," David Togni, from Feuerthalen, told Blick.ch, the online news site.
"It looks really bad."
Anja Schudel, a spokesman from Schaffhausen police, said 17 people were injured, Blick reported.
Nine people were transported to hospital but there were no serious injuries, an official told a press conference.
A total of 220 rescue workers arrived at the site, where passengers were evacuated from the the trains, which collided 250 metres from the station. "We are in the process of evacuating," SBB spokesman Jean-Philippe Schmidt told AFP. The locomotive of one of the trains, a double-decker that had been heading for Winterthour in the canton of Zurich, 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 brakes 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."
The cause of the accident was not immediately known.
The crash seriously disrupted morning rail traffic on the Winterthur-Schaffhausen line.
Shuttle buses were pressed into service to move passengers to some destinations, Blick reported.