Mördaren, en 42-årig man som hade arbetat på fabriken i 10 år, är bland de döda.
Skottlossning bröt ut i matsalen vid Kronospans träförädlingsanläggning i staden Menznau omkring 09:00 (08:00 GMT).
En talesman sa att skottlossningen ägde rum under några minuter.
Fem av de skadade rapporteras vara i ett allvarligt tillstånd, rapporter Associated Press.
"Arbetarna åt ett mellanmål i cafeterian under morgonen, och det var en massaker", sade en man citeras av den schweiziska nyhetssajten 20minuter, som hade ringt fabriken för att kontrollera välfärden för sin far.
En nödtelefonlinje sattes upp för familjer till fabrikens anställda.
"Det var tre döda och sju skadade, några av dem allvarligt skadade," åklagare talesman Simon Kopp berättade schweiziska tidningen Blick.
Kronospans verkställande direktör, Mauro Capozzo, förnekade rykten om att nedskärningar av antalet arbetstillfällen skulle tillkännages.
Han beskrev mannen som öppnade eld som tyst och anspråkslös.
"Man såg eller lade nästan inte märke till honom", sade han, enligt Reuters.
Schweiz har en av de högsta andelarna vapenägande i världen, med uppskattningsvis 2,3 miljoner skjutvapen som ägs av landets åtta miljoner människor, men sådana vapenattacker är relativt sällsynta.
Alla friska schweiziska män mellan 18 och 34 år är skyldiga att göra militärtjänst och alla är utrustade med överfallsgevär eller pistoler som de ska hålla hemma.
Fram till nyligen behöll många sina vapen även efter att ha avslutat sin militärtjänst - även om reglerna om detta nyligen har skärpts.
Enligt Genève-baserade Small Arms Survey ligger Schweiz på tredje plats när det gäller vapenägande, bakom Förenta staterna och Jemen.
Gatuvapenvåld är mycket sällsynt i Schweiz, säger Emma Jane Kirby, som nyligen undersökte ämnet för BBC News.
Det finns dock fler inhemska mord och självmord med skjutvapen i Schweiz än praktiskt taget någon annanstans i Europa utom Finland, säger hon.
Tre personer har dödats och sju skadades under en skottlossning på en fabrik i närheten av den schweiziska staden Lucerne, har polisen sagt.