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;
}
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:
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.