Unfortunately, once a row height gets expanded, all subsequent row heights get expanded the same whether they need it or not. This appears to be hard-coded so I don't think there is any way around it. We use a clean up routine (C#) to fix these types of issues after Iso's are dropped. Here's the function I use for fixing tables - it compresses the row heights and optimizes the table positioning.
private static void RepositionIsoTables(Point3d firstTableInsertionPt)
{
Document doc = MiscTools.GetActiveDoc(); if (doc == null) return;
Editor ed = doc.Editor;
Database db = doc.Database;
// Set focus on drawing area
Autodesk.AutoCAD.Internal.Utils.SetFocusToDwgView();
// find shop, field, and spool tables
TypedValue[] tvArray = new TypedValue[1];
tvArray.SetValue(new TypedValue((int)DxfCode.Start, "ACAD_TABLE"), 0);
ObjectIdCollection idColl = MiscTools.GetObjIdColl(ref ed, true, tvArray);
// compress row heights
using (DocumentLock docLock = doc.LockDocument())
{
using (Transaction tr = db.TransactionManager.StartTransaction())
{
foreach (ObjectId id in idColl)
{
Table currTable = tr.GetObject(id, OpenMode.ForRead) as Table;
// make sure the table is shop or field table
string tableTitle = currTable.Cells[0, 0].TextString;
if (tableTitle.StartsWith("SHOP") || tableTitle.StartsWith("FIELD") || tableTitle.StartsWith("SPOOL"))
{
currTable.UpgradeOpen();
int rowCount = currTable.Rows.Count;
// delete shop/field table if it does not contain enough rows
if (tableTitle.StartsWith("SHOP") || tableTitle.StartsWith("FIELD"))
{
if (rowCount < 3)
{
currTable.Erase();
continue;
}
}
for (int i = 0; i < rowCount; i++)
{
try
{
// compress the row height if possible
currTable.Rows[i].Height = 0.15360000;
}
catch
{
ed.WriteMessage("\nWarning: Could not compress row height.");
}
}
currTable.DowngradeOpen();
}
}
tr.Commit();
}// end tr
}// end doclock
// re-position tables
Table shopTable = null;
Table fieldTable = null;
Table spoolTable = null;
tvArray = new TypedValue[1];
tvArray.SetValue(new TypedValue((int)DxfCode.Start, "ACAD_TABLE"), 0);
idColl = MiscTools.GetObjIdColl(ref ed, true, tvArray);
Point3d nextPos = firstTableInsertionPt;
using (DocumentLock docLock = doc.LockDocument())
{
using (Transaction tr = db.TransactionManager.StartTransaction())
{
foreach (ObjectId id in idColl)
{
// get the standard table types
Table currTable = tr.GetObject(id, OpenMode.ForRead) as Table;
string tableTitle = currTable.Cells[0, 0].TextString;
if (tableTitle.StartsWith("SHOP"))
shopTable = currTable;
if (tableTitle.StartsWith("FIELD"))
fieldTable = currTable;
if (tableTitle.StartsWith("SPOOL"))
spoolTable = currTable;
}
try
{
shopTable.UpgradeOpen();
shopTable.Position = nextPos;
nextPos = new Point3d(nextPos.X, nextPos.Y - shopTable.Height - .075, nextPos.Z);
}
catch
{
//ed.WriteMessage("\nCould not reposition shopTable");
}
try
{
fieldTable.UpgradeOpen();
fieldTable.Position = nextPos;
nextPos = new Point3d(nextPos.X, nextPos.Y - fieldTable.Height - .075, nextPos.Z);
}
catch
{
//ed.WriteMessage("\nCould not reposition fieldTable");
}
try
{
spoolTable.UpgradeOpen();
spoolTable.Position = nextPos;
}
catch
{
//ed.WriteMessage("\nCould not reposition spoolTable");
}
tr.Commit();
}// end tr
}// end doclock
}