I would suggest, As a first step of driver script create table type project variable(s) for each sheets which you want to access the data in one go.
Then wherever you can just getting from project variable. I have been using this approach for long time and i'm getting faster execution and without any hang.
Sample code which i'm using,
function fn_getTestCaseObject(gTestDataPath,strSheetName)
{
try
{
var tempTCExcelObject;
tempTCExcelObject = DDT.ExcelDriver(gTestDataPath,strSheetName,false);
Project.Variables.AddVariable("tblTestData","Table");
for (var i = 0;i< tempTCExcelObject.ColumnCount;i++)
{
Project.Variables.tblTestData.AddColumn(tempTCExcelObject.ColumnName(i));
}
tempTCExcelObject.DriveMethod("<UnitName>.fn_driveTestData");
DDT.CloseDriver(tempTCExcelObject.Name);
}
catch(ex)
{
Log.Error("Error occured in fn_getTestCaseObject function , Error Description: " + ex.stack);
}
}
function fn_driveTestData()
{
var intRowCount=1,i,tempValue;
try
{
intRowCount = Project.Variables.tblTestData.RowCount;
Project.Variables.tblTestData.RowCount = intRowCount + 1;
for(i = 0 ; i < DDT.CurrentDriver.ColumnCount ; i++)
{
Project.Variables.tblTestData.$set(DDT.CurrentDriver.ColumnName(i),intRowCount,aqConvert.VarToStr(DDT.CurrentDriver.Value(i)));
}
}
catch(ex)
{
Log.Error("Error occured in fn_driveTestData function , Error Description: " + ex.stack);
}
}