Pregunta

Tengo el siguiente código para abrir el archivo de plantilla de Excel y guardarlo como archivo .xlsx y obtengo el error a continuación cuando intento abrir el nuevo archivo. Por favor, ayude a resolver esto.

Excel no puede abrir el archivo 'sa123.xlsx' porque el formato de archivo o la extensión no es válido. Verifique que el archivo no se haya dañado y que la extensión del archivo coincida con el formato del archivo.

        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());    
        }
¿Fue útil?

Solución

Para hacer esto, necesitará usar el Abrir XML SDK 2.0. A continuación se muestra un fragmento de código que funcionó para mí cuando lo probé:

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()); 
}

Lo que hace este código es tomar su archivo de plantilla y lo abre a un SpreadsheetDocument objeto. El tipo de este objeto es Template, pero como lo quieres como un Workbook llamas al ChangeDocumentType método para cambiarlo de un Template a un Workbook. Esto funcionará ya que el XML subyacente es lo mismo entre un archivo .xltx y un archivo .xlsx y era el tipo que le estaba causando un problema.

Otros consejos

Excel ve la extensión .xlsx e intenta abrirla como un archivo de hoja de trabajo. Pero no lo es. Es un archivo de plantilla. Cuando tiene una plantilla abierta en Excel y guárdela como un archivo .xlsx, lo convierte en el formato de hoja de trabajo. Lo que está haciendo es lo mismo que cambiar la extensión en el nombre de archivo. Pruébelo en Windows Explorer y obtendrá el mismo resultado.

Creo que deberías poder lograr lo que quieres usando el Modelo de objeto de Excel. Aunque no he usado esto.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top