Central parts of the town on the German border have been sealed off, as police are searching for the attacker.
Police and ambulances are on the scene and rescue helicopters are circling overhead, police spokeswoman Cindy Beer said.
The police say the attack is not related to terrorism.
Police have released a picture of the alleged suspect, who is still on the run, but have not named him.
They have warned that the man, who is about 190cm (6.2ft) tall, with an unkempt appearance, is dangerous.
Local shops are also shut, and people have been told to avoid the area.
The alarm was raised at 10:39 local time (08:39 GMT), when an armed man was reported to have entered office buildings in Schaffhausen.
He then attacked a number of people working in the local branch of a health insurance company, according to local news site Swissinfo.
At a news conference, police reassured the public that a large number of officers had been deployed in the area.
According to news agency ATS, the vehicle he was believed to be driving - a white Volkswagen - has been found.
The attacker is still at large, however.
Schaffhausen is the capital of the Swiss canton with the same name.
About 36,000 people live in the historic town.
Five people have been injured, two seriously, in an attack by a man armed with a chainsaw in the Swiss town of Schaffhausen, police say.