See Extension only
Source Code
<script type="text/javascript" 	src="http://developerextensions.com/components/com_extensiondemo/views/extensiondemo/tmpl/ext5/ux/excel-grid/example/api.php"></script>

<!---------------------------- Excel Grid ux Start ------------------------------>
<link rel="stylesheet" type="text/css" href="http://developerextensions.com/components/com_extensiondemo/views/extensiondemo/tmpl/ext5/ux/excel-grid/EditorPasteCopyGrid.css" />
<script type="text/javascript" 	src="http://developerextensions.com/components/com_extensiondemo/views/extensiondemo/tmpl/ext5/ux/excel-grid/ExcelCellSelectionModel.js"></script>
<script type="text/javascript" 	src="http://developerextensions.com/components/com_extensiondemo/views/extensiondemo/tmpl/ext5/ux/excel-grid/EditorPasteCopyGrid.js"></script> 
<!---------------------------- Excel Grid ux End -------------------------------->

<script type="text/javascript"	src="http://developerextensions.com/components/com_extensiondemo/views/extensiondemo/tmpl/ext5/ux/excel-grid/example/demo.js"></script>

<h1 class="extensionHeading">Excel Editor Grid Example (Direct)</h1>
<p>How to create a Excel grid with inline editing.</p>

<div>
	<b>Selecting Cell range:</b>
	<ul>
		<li>Shift +  UP/DOWN/RIGHT/LEFT key</li>
		<li>Shift +  mouse down </li>
		<li>Mouse down + Mouse drag</li>
	</ul>
</div>
<p><b>Copy selected cell to clip board</b>:  CTRL/CMD+c </p>
<p><b>Paste selected cell to grid/excell sheet</b>:  CTRL/CMD+v </p>
<p><br /></p>
<div id="editor-grid"></div>
 
 				//We are using session for data storage.
			 
Ext.require([
    'Ext.direct.*',
    'Ext.data.*',
    'Ext.grid.*',
    'Ext.util.Format'
]);

Ext.define('Member', {
    extend: 'Ext.data.Model',
    fields: ['id', 'first_name', 'first_name', 'age']
});

Ext.onReady(function(){
	Ext.direct.Manager.addProvider(Remote.API);
	Ext.QuickTips.init();

    var reader = new Ext.data.JsonReader({
    	model: 'Member',
		totalProperty:'total',
		successProperty: 'success',
		idProperty:'id',
		rootProperty:'members',
		messageProperty:'msg'
	});
	var writer = new Ext.data.JsonWriter({
		encode: false,
		writeAllFields: true,
		rootProperty:'members'
	});
    
    // create the grid
    Ext.create('Ext.grid.EditorPasteCopyGridPanel', {
        height: 350,
        title: 'Users',
        renderTo: 'editor-grid',
        forceFit:true,
        selType: 'excelcellmodel',
        editable: true,
    	tbar: [{
			text: 'Add Record',
			handler : function(){
				var grid = this.up('grid');
				var p = new Member({});
				grid.editing.cancelEdit();
				var count = grid.getStore().getCount();
				grid.getStore().insert(count, p);
				grid.editing.startEditByPosition({
		            row: count,
		            column: 0
		        });
				grid.editing.cancelEdit();
				
				//grid.getSelectionModel().clearSelections();
				//grid.getSelectionModel().selectSingleCell(count, 0);
			}
		},{
			text:'Save',
			handler:function(){
				this.up('grid').store.save( );
			}			
		}],
        store: {
            model: 'Member',
            remoteSort1: true,
            autoLoad: true,
            sorters1: [{
                property: 'first_name',
                direction: 'ASC'
            }],
            proxy: {
                type: 'direct',
                api: {
                	read: Remote.Members.getRecords,
                	create: Remote.Members.createRecords,
                	update: Remote.Members.updateRecords,
                },

                reader:reader,
                writer:writer
            },
            
        },
        columns: [{
			id:'first_name',
			header: "First Name",
			dataIndex: 'first_name',
			editor: Ext.create('Ext.form.field.Text', {
			   allowBlank: false
			})
		},{
			header: "Last Name",
			dataIndex: 'last_name',
			width: 130,
			editor: Ext.create('Ext.form.field.Text', {
			   allowBlank: false
			})
		},{
			header: "Age",
			dataIndex: 'age',
			width: 70,
			align: 'center',
			editor:  Ext.create('Ext.form.field.Number', {
			   allowBlank: false
			})
		}]
    });


});
<?php
if(!isset($_SESSION['members'])){
    
$_SESSION['members'] = array(
        array(
'first_name'=>'Surinder''last_name'=>'Singh''age'=>30'id'=>1),
        array(
'first_name'=>'Jeet''last_name'=>'kaur''age'=>23'id'=>2),
        array(
'first_name'=>'Manpreet''last_name'=>'Singh''age'=>31'id'=>3),
        array(
'first_name'=>'JivanJot''last_name'=>'Singh''age'=>1'id'=>4),
        array(
'first_name'=>'Sunil''last_name'=>'Kumar''age'=>27'id'=>5)
    );
    
$_SESSION['members_id'] = count($_SESSION['members']);
}

class 
Members{

    function 
dump($data){
        
file_put_contents("./dump.txt"print_r($datatrue));
    }

    
/** @remotable */
    
function getRecords() {
        
$result          = new stdClass();
        
$result->members $_SESSION['members'];
        
$result->total     count($_SESSION['members']);
        
$this->dump($result->members);
        return 
$result;
    }
    
    
/** @remotable */
    
function createRecords($records){
        
$this->dump($records);
        if(
is_array($records->members)){
            
$members array_reverse($records->members);
            foreach(
$members as $record){
                
$record->id $this->insert($record);
            }
        }else{
            
$records->members->id $this->insert($records->members);
        }
        return 
$records;
    }
    
    
/** @remotable */
    
function updateRecords($records){
        global 
$database;
        
//$this->dump($records);
        
if(is_array($records->members)){
            foreach(
$records->members as $record){
                
$this->update($record);
            }
        }else{
            
$this->update($records->members);
        }
        return 
$records;
    }
    
    function 
insert($record){
        
$_SESSION['members_id']++;
        
$_SESSION['members'][] = @array('first_name'=>$record->first_name'last_name'=>$record->last_name'age'=>$record->age'id'=>$_SESSION['members_id']);
        return 
$_SESSION['members_id'];
    }
    
    function 
update($record){
        foreach(
$_SESSION['members'] as $key=>$r){
            if(
$r['id']==$record->id){
                
$_SESSION['members'][$key] = (array)$record;
                break;
            }
        }
    }
}
?>