public Map<String, TestScript> getTestScripts() throws Exception{
		File[] scriptFiles = this.file.getTestScripts();
		Map<String, TestScript> allScripts = new HashMap<String, TestScript>();
		for(File script : scriptFiles){
			ExcelReader reader = new ExcelReader(script);
			ExcelModel excel = reader.loadExcel();
			List<TestScriptItem> items = new ArrayList<TestScriptItem>();
			Map<String, DataItem> sheetData = new HashMap<String, DataItem>();
			//TODO Validate header
			for(int i = 0; i < excel.getSheets().size(); i++){
				if(i == 0){
					for(RowModel row : excel.getSheets().get(i).getBody()){
						List<String> v = row.getCells();
						if(this.isEmpty(this.getValue(v, 1))){
							//BPC Name is required, or else no new item create
							continue;
						}
						TestScriptItem singleScript = new TestScriptItem();
						singleScript.setNeedOrNot(this.toBoolean(getValue(v, 0)));
						singleScript.setBPCName(getValue(v, 1));
						singleScript.setComments(getValue(v, 2));
						items.add(singleScript);
					}
				} else {
					Map<String, String> keyV = new HashMap<String, String>();
					SheetModel st = excel.getSheets().get(i);
					if(!st.getHeader().isEmpty() && !st.getBody().isEmpty()){
						List<String> keys = excel.getSheets().get(i).getHeader();
						List<String> vals = excel.getSheets().get(i).getBody().get(0).getCells(); //By default, it at least have 2nd row.
						for(int k = 0; k < keys.size(); k++){
							keyV.put(getValue(keys,k), getValue(vals,k));
						}
						sheetData.put(excel.getSheets().get(i).getName(), new DataItem(keyV));
					}
				}
			}
			allScripts.put(this.getName(script.getName()), new TestScript(items, sheetData));
		}
		return allScripts;
	}