Something else to add -- travel insurance. Your travel insurance should (I don't know your specific policy) cover a cancellation of excursion due to a missed port.
This happened to us with an excursion that was booked independently. The tour operator in Guatemala would only refund us 50%.
We missed this port because of a transportation strike in the country, so all roads were closed and transportation had come to a stop. Our captain chose to keep on sailing.
Our travel insurance was prepared to refund us the other 50% that the tour operator would not refund, HOWEVER...and this is a BIG however, we had ONE person in our group (from our roll call, actually) collecting the money for our entire group. So, the excursion wasn't in our name; it was in HIS name. Therefore, we had no way to prove to our travel insurance company that we were actually scheduled for this cancelled excursion.
Live and learn.