Apri XML SDK - Salva un file modello (.xltx su .xlsx)
-
26-09-2019 - |
Domanda
Ho il seguente codice per aprire il file modello Excel e salvarlo come file .xlsx e ricevo l'errore di seguito quando provo ad aprire il nuovo file. Si prega di aiutare a risolvere questo problema.
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 corrotto 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());
}
Soluzione
Per fare ciò dovrai usare il Apri XML SDK 2.0. Di seguito è riportato uno snippet di codice che ha funzionato 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());
}
Quello che fa questo codice è che prende il tuo file modello e lo apre in a SpreadsheetDocument
oggetto. Il tipo di questo oggetto è Template
, ma dal momento che lo vuoi come un Workbook
chiami il ChangeDocumentType
metodo per cambiarlo da a Template
a a Workbook
. Funzionerà dal momento che l'XML sottostante è lo stesso tra un file .xltx e un file .xlsx ed era solo il tipo che ti stava causando un problema.
Altri suggerimenti
Excel vede l'estensione .xlsx e cerca di aprirla come file del foglio di lavoro. Ma non lo è. È un file modello. Quando hai un modello aperto in Excel e salvalo come file .xlsx, lo converte in formato del foglio di lavoro. Quello che stai facendo è lo stesso della modifica dell'estensione nel nome file. Provalo in Windows Explorer e otterrai lo stesso risultato.
Credo che dovresti essere in grado di realizzare ciò che vuoi usando il Modello a oggetti Excel. Non l'ho usato però.