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());    
        }
È stato utile?

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ò.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top