Method for dealing with as-built pile locations.
1. Design the pile cap for a selected eccentricity in both directions. In the past I have added an Mxx and Myy of P x 3" eccentricity with reasonable success. If allowed and desired, consider an additional pile overstress in the eccentric design (I believe IBC has a 10% allowance for as-built conditions). Warning - this may require additional piles to be added to the design and I suggest this be discussed with the owner prior to implementing.
2. During installation, have the piles surveyed on a regular schedule. Don't wait until you go to the field to find the piles out of location (hint - they are always out of location). In rare cases, you will need to tell the installer to place another pile. If he hasn't demobilized, you get better options. If you are partnered with the installer, you can even run the numbers while he is installing the piles so that you can provide corrected locations for the last piles in each pile cap.
3. Once you have a pile group, run the numbers for final pile cap eccentricity (P/A +- M y / I). If its less than what was designed for, great. Otherwise, tighten the numbers using the actual pile allowables. If a pile is overstressed then consider an additional pile or use a grade beam tied to another pile cap to balance out the eccentricity - I use the term "pump handle" or strap beam, but whatever you call it, you use it to transfer some shear and bending from one adjacent cap into another.
4. Not done yet. Some of those piles will be outbound from the edge of the pile cap by more than what was designed. You need to detail a bump out for those piles in the pile cap so that the hooked reinforcement is developed to the outside edge of each outbound pile and lapped in with the main reinforcement. Further, if the design eccentricity was exceeded, then you need to check the main reinforcement. Finally, have a quick look at 2-way shear for any piles that encroach on the adjacent pile spacing.
As for software, Excel has worked for me. If the design assumptions were reasonable, this becomes more of a data entry issue than design.