I have a similar situation with some order entry processes.
I save the template in a document library, and have my users use a button to request a new spreadsheet (instead of having them do it on their own).
When they click the 'create new ..' button, I get a unique name using the time, insert the document into the library, and then open the document for them to edit.
All they then have to do is save.
This function uses SPServices and is specific to an Excel file (and using the current user name as the document name), but there should be similar functionality in REST or SP2013 workflows that can access web services.
function addNew2(linkType) { var d = new Date(); var dTime = d.format('_MMddHHmmss'); var docName = cu["Title"]+ dTime; // note that this new doc is linked to the template, but we hide that // message on the property forms so the user doesn't see it. $().SPServices({ operation: "CopyIntoItemsLocal", async: false, SourceUrl: window.location.protocol + "//" + window.location.host + _spPageContextInfo.webServerRelativeUrl + "/Shared%20Documents/template.xlsm", DestinationUrls: [window.location.protocol + "//" + window.location.host + _spPageContextInfo.webServerRelativeUrl + "/SampleOrders/" + docName + ".xlsm"], completefunc: function(xData, Status) { // alert("Status=" + Status + " XML=" + xData.responseXML.xml); } }); editDocumentWithProgID2(window.location.protocol + "//" + window.location.host + _spPageContextInfo.webServerRelativeUrl + '/SampleOrders/' + docName + ".xlsm", '', 'SharePoint.OpenDocuments', '0', window.location.protocol + "//" + window.location.host + _spPageContextInfo.webServerRelativeUrl, '0') ; }