2010-09-30 10 views
5

Ho il seguente codice per aprire il file modello Excel e salvarlo come file .xlsx e ottengo l'errore qui sotto quando provo ad aprire il nuovo file. Si prega di aiutare a risolvere questo.Apri SDK XML - Salva un file modello (.xltx in .xlsx)

Excel non può aprire il file 'sa123.xlsx' perché il formato del file o l'estensione non è valido. Verificare che il file non sia stato danneggiato e che l'estensione del file corrisponda al formato del file.

 string templateName = "C:\\temp\\sa123.xltx"; 
     byte[] docAsArray = File.ReadAllBytes(templateName); 
     using (MemoryStream stream = new MemoryStream()) 
     { 
      stream.Write(docAsArray, 0, docAsArray.Length); // THIS performs doc copy 
      File.WriteAllBytes("C:\\temp\\sa123.xlsx", stream.ToArray());  
     } 

risposta

7

Per fare ciò è necessario utilizzare Open XML SDK 2.0. Di seguito è riportato un frammento di codice che ha lavorato per me quando l'ho provato:

byte[] byteArray = File.ReadAllBytes("C:\\temp\\sa123.xltx"); 
using (MemoryStream stream = new MemoryStream()) 
{ 
    stream.Write(byteArray, 0, (int)byteArray.Length); 
    using (SpreadsheetDocument spreadsheetDoc = SpreadsheetDocument.Open(stream, true)) 
    { 
     // Change from template type to workbook type 
     spreadsheetDoc.ChangeDocumentType(SpreadsheetDocumentType.Workbook); 
    } 
    File.WriteAllBytes("C:\\temp\\sa123.xlsx", stream.ToArray()); 
} 

cosa fa questo codice è necessario il file del modello e si apre in un oggetto SpreadsheetDocument. Il tipo di questo oggetto è Template, ma poiché lo si desidera come si chiama il metodo ChangeDocumentType per modificarlo da Template a Workbook. Funzionerà poiché l'XML sottostante è lo stesso tra un file .xltx e .xlsx ed era solo il tipo che ti causava un problema.

+0

Grazie. Questo aiuta. –

1

Excel vede l'estensione .xlsx e cerca di aprire come file foglio di lavoro. Ma non lo è. È un file modello. Quando hai un modello aperto in Excel e lo salvi come file .xlsx, lo converte nel formato del foglio di lavoro. Quello che stai facendo è come cambiare l'estensione nel nome del file. Provalo in Windows Explorer e otterrai lo stesso risultato.

Credo che si dovrebbe essere in grado di realizzare ciò che si desidera utilizzando il Excel Object Model. Non ho usato questo però.

+0

Qualsiasi idea cosa dovrei fare per nascondere/salvarlo nel formato del foglio di lavoro nel codice sopra. –

+0

@SA. Ho modificato la risposta per includere una risposta alla tua domanda. – YWE

+0

Il tuo primo paragrafo è una buona spiegazione del problema, ma raccomandare a qualcuno di utilizzare exop interop per risolvere questo problema è eccessivo. –