Analizar un archivo de Excel en C #, las células parecen tener cortada en 255 caracteres ... ¿cómo hago para dejar que?

StackOverflow https://stackoverflow.com/questions/926453

Pregunta

Estoy de análisis a través de un reproductor de archivos subidos Excel (.xlsx) en asp.net con C #. Estoy utilizando el siguiente código (simplificado):

string connString = string.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + fileLocation + ";Extended Properties=\"Excel 12.0 Xml;HDR=YES\";");
OleDbDataAdapter adapter = new OleDbDataAdapter("SELECT * FROM [Sheet1$]", connString);
DataSet ds = new DataSet();
adapter.Fill(ds);
adapter.Dispose();
DataTable dt = ds.Tables[0];
var rows = from p in dt.AsEnumerable() select new { desc = p[2] };

Esto funciona perfectamente, y si hay algo más de 255 caracteres en la celda, será más corta. Cualquier idea de lo que estoy haciendo mal? Gracias.

EDIT:. Al ver la hoja de Excel, se muestra mucho más de 255 caracteres, por lo que no creo que la propia hoja es limitada

¿Fue útil?

Solución

Sólo a partir de una búsqueda en Google rápida del sujeto, parece que eso es un límite de Excel.

Editar solución posible (por desgracia en VB)

Otros consejos

La Solución!

He estado luchando contra esto hoy en día también. Finalmente conseguí que funcione mediante la modificación de algunas claves del registro antes de analizar la hoja de cálculo Excel.

Debe actualizar esta clave de registro antes de analizar la hoja de cálculo Excel:

// Excel 2010
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\14.0\Access Connectivity Engine\Engines\Excel\
or
HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Office\14.0\Access Connectivity Engine\Engines\Excel\

// Excel 2007
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\12.0\Access Connectivity Engine\Engines\Excel\

// Excel 2003
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\4.0\Engines\Excel\

Cambiar TypeGuessRows a 0 y ImportMixedTypes a Text en esta clave. También tendrá que actualizar su cadena de conexión para incluir IMEX=1 en las propiedades extendidas:

string connString = string.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + fileLocation + ";Extended Properties=\"Excel 12.0 Xml;HDR=YES;IMEX=1\";");

Referencias

http: //blogs.vertigo.com/personal/aanttila/Blog/archive/2008/03/28/excel-and-csv-reference.aspx

http://msdn.microsoft.com/en-us/library/ ms141683.aspx

  

... caracteres pueden truncarse. Para importar   datos de una columna memo sin   truncamiento, debe asegurarse de que   la columna de la memo en al menos una de las   filas muestreadas contiene un valor más largo   de 255 caracteres, o debe   aumentar el número de filas muestreadas por   al conductor que incluye una fila de tales.   puede aumentar el número de filas   muestreada por el aumento del valor de   TypeGuessRows bajo la   HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Jet \ 4.0 \ Engines \ Excel   clave de registro ....

He encontré con esto, y la solución que funcionó para mí fue para mover las celdas con texto largo de la parte superior de la hoja de cálculo.

He encontrado este comentario en un foro que describe el tema

  

Este es un problema con el proveedor Jet OLEDB. Se ve en los primeros 8 filas
  del   hoja de cálculo para determinar el tipo de datos en cada columna. Si la columna
  no contienen   un valor de campo más de 256 caracteres en los primeros 8 filas , entonces se asume el
  tipo de datos   Se texto, que tiene un límite de caracteres de 256. El siguiente artículo KB ha
  más   información sobre este tema: http://support.microsoft.com/kb/281517

Espero que esto ayuda a alguien más!

¿Ha intentado establecer el tipo de datos columnas de texto dentro de la hoja de cálculo? Creo que haciendo esto permitirá que las células contienen mucho más que 255 caracteres.

[Editar] Para lo que vale la pena rel="nofollow este diálogo con el MS- equipo de Excel es una lectura interesante. En la sección de comentarios en la parte inferior se meten en algunas discusiones acerca de que 255 de corte. Dicen Excel 12 puede soportar 32k caracteres por celda.

Si eso es cierto tiene que haber una manera de llegar a estos datos. Aquí es dos cosas a tener en cuenta.

  1. En el pasado he utilizado la opción "IMEX = 1" en mi cadena de conexión para hacer frente a las columnas que contienen datos mixtos que muestran como vacía. Es una posibilidad remota, pero que podría darle una oportunidad.

  2. ¿Puede exportar el archivo a un archivo plano delimitado por tabuladores? En mi humilde opinión esta es la manera más confiable de hacer frente a los datos de Excel, ya que Excel tiene muchas trampas.

SpreadsheetGear para .NET puede leer y escribir (y más) xls y xlsx libros de trabajo y apoya la misma limitaciones como Excel para el texto - en otras palabras, que se acaba de trabajar. Hay una evaluación gratuita si quieres darle una oportunidad.

exención de responsabilidad: Soy dueño de SpreadsheetGear LLC

En cuanto al último mensaje, también uso SpreadsheetGear y parece que también sufre de los 255 caracteres por limitación de células durante la lectura del formato XLS mayores (no XLSX).

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