In General
Wolframalpha has a page about the manual computation of Fisher exact test:
http://mathworld.wolfram.com/FishersExactTest.html
The probability of occurance for a particular combination of cell values $a_{ij}$ for given row sums $R_i$, column sums $C_j$, and total sum $N$:
$$P(a_{ij}) = \frac{\prod_{\forall i } R_{i}! \prod_{\forall j } C_{j}!}{N! \prod_{\forall i,j } a_{ij}!} $$
To find a p-value you would have to compute the cumulative probability: compute the values for tables $a_{ij}$ with more extreme difference and sum them together.
Manual computation example
For a 2x2 table this can be easily done. For a 2x3 table it can also be done (although not very simple).
All the possibly combinations with the same row totals can be summarized by two parameters $a$, $b$
116+b 166-b ¦ 282
11+a-b 45-a+b ¦ 56
9-a 0+a ¦ 9
--------------------------------
136 211 ¦ 347
So all you need to do is compute $P(a_{ij})$ for all values of a and b and sum those which are equal or extremer.

Automized method
Those manual computations have been automized. In R for instance you can get the result by typing a single line:
fisher.test(matrix(c(116, 11, 9, 166, 45, 0), 3))
giving
Fisher's Exact Test for Count Data
data: matrix(c(116, 11, 9, 166, 45, 0), 3)
p-value = 2.476e-06
alternative hypothesis: two.sided
This function in R goes through all the options (like in the manual excel sheet but automatic). However when the tables get large then the computation will take a lot of time, also for a computer. The function in R can also estimate a p-value by generating random tables and see how often a worse deviation is observed.