According to Spanish media, the boy broke into the school and arrived in a classroom at Instituto Joan Fuster on Monday morning and injured a teacher and her daughter, who was a student at Instituto Joan Fuster.
Another teacher - reportedly a male substitute - heard their screams, and came into the classroom, and was then killed by the pupil, reports claim.
A student under the age of 14 - the age of criminal responsibility in Spain - was arrested on Monday on suspicion of having killed a teacher and wounding four other people, a police spokesman told AFP.
Students, believed to be from the classroom where the attack took place, could be seen leaving the school on a bus, and a body bag was wheeled out into a black van.
The Mayor of Barcelona, Xavier Trias, tweeted his shock and horror at the news, saying in Catalan that he was "dismayed by the tragic event" and was going to the scene.
Police have not confirmed that a crossbow was used, or whether or not the boy was a pupil at the Instituto Joan Fuster, according to the BBC.
Spanish ANPE teachers union says this is the first incident of a pupil killing a teacher in the country's history.
If the boy were 13 as reports suggest, he wouldn't face charges as the age of criminal responsibility in Spain is 14.
The killings took place on the 16th anniversary of the massacre of students in shootings at Columbine High School in Colorado.