David, you will love or hate me after this, but I see several problems with your code and design -- partly because there is plenty of unnecessary code, and I always go for the cleanest and simplest approach, which is more efficient, and easier to maintain and understand. More importantly, you have a lot of hard-coded texts, row numbers, etc., and since I assume that these are just sample goals and tasks (as are the dwarf names), you would have to recode things, not only to make it production-ready, but every time goals, tasks, or dwarfs are added or changed. Writing generic code up front takes a little more design effort, but pays off greatly because it will work without maintenance thereafter.

I'm working on some updates for you, but I'm done for the day, and will get back to you. I didn't want you to think you were being ignored.
-Nate