es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Tabla externa no en el formato esperado de open xml.

Estoy tratando de subir un archivo de Excel (.xlsx) en mi aplicación que ha sido creado por la misma aplicación a través del Open XML SDK. Me está apareciendo la excepción ‘External table not in expected format’. Sin embargo, si abro manualmente el archivo y lo guardo, luego puedo subirlo sin errores.
¿Hay alguna forma de realizar programáticamente la tarea de abrir el archivo de Excel y guardarlo? No puedo pedirle a mi usuario/cliente que siga este método alternativo. Cualquier sugerencia sería útil. A continuación se muestra el fragmento de código que lanza la excepción. La línea ‘con.open()’ es la que genera la excepción mencionada. A continuación, se muestra la cadena de conexión utilizada:

private readonly string connectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties=\"Excel 12.0 Xml;HDR=Yes;MAXSCANROWS=0;IMEX=1\";";

public DataTable GetSheetData(string sheetName)
{
    System.IO.FileInfo fileInfo = new System.IO.FileInfo(this.filePath);

    DataTable excelData = new DataTable();
    excelData.Locale = CultureInfo.InvariantCulture;

    using (OleDbConnection con = new OleDbConnection(string.Format(CultureInfo.CurrentCulture, this.connectionString, this.filePath)))
    {
        con.Open();

        if (!string.IsNullOrEmpty(sheetName))
        {
            using (OleDbDataAdapter dataAdapter = new OleDbDataAdapter(string.Format(CultureInfo.CurrentCulture, "select * from [{0}$]", sheetName), con))
            {

                dataAdapter.Fill(excelData);
            }
        }
    }

    return excelData;
}
Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Parece que el problema está relacionado con el formato del archivo Excel generado por la aplicación a través de Open XML SDK. Una posible solución sería guardar el archivo manualmente usando Excel y luego subirlo. Sin embargo, si esto no es factible, puedes intentar usar Open XML SDK para abrir y guardar el archivo programáticamente.

    Para hacer esto, puedes utilizar la clase SpreadsheetDocument de Open XML SDK para abrir el archivo y luego guardarlo. Aquí tienes un ejemplo de fragmento de código:

    using (SpreadsheetDocument document = SpreadsheetDocument.Open(this.filePath, true))
    {
        // Realiza las modificaciones necesarias en el documento, si es requerido
    
        document.Save();
    }
    

    Puedes agregar este código antes de la parte en la que intentas subir el archivo usando OleDbConnection. Esto debería abrir y guardar el archivo de manera programática, asegurando que esté en el formato correcto y pueda ser subido sin errores.

Comments are closed.