title: What's the best way to generate Excel 2007+ files from XSLT?
body: <p>Coming from many different languages, I got stuck in ERP development. The thing is that our ERP is using XSL transformations to generate Excel files in SpreadsheetML format, which is saved with <code>.xls</code> extension, so that Windows open it within Excel.</p>
  
  <p>This results in many unnecessary clicks that our users are forced into; excel screaming about "repairing" the file, wanting to save it with <code>.xml</code> extension - so our users have to pick <em>correct</em> extension in order to send it to client / colleagues... That's just unnecessary load from user standpoint.</p>
  
  <p>Now, due to historical reasons we are unable to ditch the XSLT (and hey! it's awesome anyway) but what we <strong>do</strong> want to is to make the entire process streamlined from <em>the user standpoint</em>.</p>
  
  <h2>Generating 2007+ formats</h2>
  
  <p>In the end - after researching google <em>thoroughly</em>, I ended up writing xslt transformations "<em>engine</em>" which allows us to generate valid 2007 formats. All we do now is to generate the contents of <code>sheet.xml</code> in <a href="http://msdn.microsoft.com/en-us/library/office/gg278309.aspx" rel="nofollow noreferrer">OpenXML format</a>. It also allows us to generate macro-enabled excel files.</p>
  
  <p>But seriously, is there something I missed? Is there <strong>any</strong> other way how to generate the Excel OpenXML format with some already maintained solution?</p>
  
  <p>The SpreadsheetML is one way how to do it, I don't like it because it introduces a huge demand on end-user and does not contain images/macros. Or maybe I'm doing something wrong?</p>
  
  <h2>SpreadsheetML confusion</h2>
  
  <p>When I say <em>SpreadsheetML</em> I mean <a href="http://msdn.microsoft.com/en-us/library/aa140066%28office.10%29.aspx" rel="nofollow noreferrer">the "XML Spreadsheet"</a> . I've noticed that Microsoft is calling the OpenXML Excel format <strong>also</strong> as SpreadsheetML - which makes me confused.</p>