I have created an override for the grid clipboard that includes the column headers with the copied text. This way, when you paste the values from grid to something like Excel, you can see what the values actually represent. Maybe someone else might find it useful.

To use, create:
ClipboardExt.js (I saved it in the overrides folder)
Code:
Ext.define('YourAppName.override.ClipboardExt', {
    extend: 'Ext.grid.plugin.Clipboard',

    alias: 'plugin.clipboardext',
    
    getCellData: function (format, erase) {
    	//debugger;
        var cmp = this.getCmp(),
            selModel = cmp.getSelectionModel(),
            ret = [],
            isRaw = format === 'raw',
            isText = format === 'text',
            viewNode,
            cell, data, dataIndex, lastRecord, record, row, view,
            hI, headerIndex = [], headerText = [], headerAdded = false;

        selModel.getSelected().eachCell(function (cellContext) {
            view = cellContext.column.getView();
            record = cellContext.record;

            if (lastRecord !== record) {
                lastRecord = record;
                if(cmp.includeHeaders && !headerAdded){
                	ret.push(headerText);
                	headerAdded=true;
            	}
                ret.push(row = []);
            }
            
            dataIndex = cellContext.column.dataIndex;
            if(cmp.includeHeaders){
	            hI = headerIndex.indexOf(dataIndex);
	            if(hI==-1){
	            	headerIndex.push(dataIndex);
	            	headerText.push(cellContext.column.text.replace(" ",""));
	            } else {
	            	headerText[hI] =cellContext.column.text.replace(" ",""); 
	            }            	
            }

            if (isRaw) {
                data = record.data[dataIndex];
            } else {
                // Try to access the view node.
                viewNode = view.all.item(cellContext.rowIdx);
                // If we could not, it's because it's outside of the rendered block - recreate it.
                if (!viewNode) {
                    viewNode = Ext.fly(view.createRowElement(record, cellContext.rowIdx));
                }
                cell = viewNode.down(cellContext.column.getCellInnerSelector());
                data = cell.dom.innerHTML;
                if (isText) {
                    data = Ext.util.Format.stripTags(data);
                }
            }

            row.push(data);

            if (erase && dataIndex) {
                record.set(dataIndex, null);
            }
        });

        return Ext.util.TSV.encode(ret);

    },

    getCells: function (format, erase) {
    	console.log("getCells");
        var cmp = this.getCmp(),
            selModel = cmp.getSelectionModel(),
            ret = [],
            dataIndex, lastRecord, record, row;

        selModel.getSelected().eachCell(function (cellContext) {
            record = cellContext.record;
            if (lastRecord !== record) {
                lastRecord = record;
                ret.push(row = {
                    model: record.self,
                    fields: []
                });
            }

            dataIndex = cellContext.column.dataIndex;

            row.fields.push({
                name: dataIndex,
                value: record.data[dataIndex]
            });

            if (erase && dataIndex) {
                record.set(dataIndex, null);
            }
        });

        return ret;
    },

    getTextData: function (format, erase) {
        return this.getCellData(format, erase);
    }
    
});
Then in the view, add:
Code:
requires: ['YourAppName.override.ClipboardExt"]
and in the grid object in the view:
Code:
plugins: ['clipboardext'],
includeHeaders: true