Isabela, parte de este gran staff, nos hizo el favor de crear esta reseña ya que conoce muy bien el tema.
Solución:
Hay muchas formas excelentes de hacer esto, que otros ya han sugerido. Siguiendo con “obtener datos de Excel a través de la pista SQL”, aquí hay algunos consejos.
-
Excel tiene el “Asistente de conexión de datos” que le permite importar o vincular desde otra fuente de datos o incluso dentro del mismo archivo de Excel.
-
Como parte de Microsoft Office (y los sistemas operativos) hay dos proveedores de interés: el antiguo “Microsoft.Jet.OLEDB” y el último “Microsoft.ACE.OLEDB”. Búsquelos al configurar una conexión (como con el Asistente de conexión de datos).
-
Una vez conectado a un libro de Excel, una hoja de trabajo o un rango es el equivalente a una tabla o vista. El nombre de la tabla de una hoja de trabajo es el nombre de la hoja de trabajo con un signo de dólar (“$”) adjunto y entre corchetes (“[” and “]”); de un rango, es simplemente el nombre del rango. Para especificar un rango de celdas sin nombre como su fuente de registro, agregue la notación estándar de fila / columna de Excel al final del nombre de la hoja entre corchetes.
-
El SQL nativo será (más o menos) el SQL de Microsoft Access. (En el pasado, se llamaba JET SQL; sin embargo, Access SQL ha evolucionado y creo que JET es una tecnología antigua en desuso).
-
Ejemplo, leyendo una hoja de trabajo:
SELECT * FROM [Sheet1$]
-
Ejemplo, leyendo un rango:
SELECT * FROM MyRange
-
Ejemplo, leyendo un rango de celdas sin nombre:
SELECT * FROM [Sheet1$A1:B10]
-
Hay muchos libros y sitios web disponibles para ayudarlo a trabajar con los detalles.
=== Notas adicionales ===
De forma predeterminada, se asume que la primera fila de su fuente de datos de Excel contiene encabezados de columna que se pueden usar como nombres de campo. Si este no es el caso, debe desactivar esta configuración, o su primera fila de datos “desaparecerá” para usarse como nombres de campo. Esto se hace agregando el opcional HDR= setting
a las Propiedades extendidas de la conexión string. El valor predeterminado, que no necesita especificarse, es HDR=Yes
. Si no tiene encabezados de columna, debe especificar HDR=No
; el proveedor nombra sus campos F1, F2, etc.
Una advertencia sobre la especificación de hojas de trabajo: el proveedor asume que su tabla de datos comienza con la celda superior, más a la izquierda y que no está en blanco en la hoja de trabajo especificada. En otras palabras, su tabla de datos puede comenzar en la Fila 3, Columna C sin ningún problema. Sin embargo, no puede, por ejemplo, escribir el título de una hoja de trabajo arriba y a la izquierda de los datos en la celda A1.
Una advertencia sobre la especificación de rangos: cuando especifica una hoja de trabajo como su fuente de registros, el proveedor agrega nuevos registros debajo de los registros existentes en la hoja de trabajo según lo permita el espacio. Cuando especifica un rango (con o sin nombre), Jet también agrega nuevos registros debajo de los registros existentes en el rango según lo permita el espacio. Sin embargo, si vuelve a consultar el rango original, el conjunto de registros resultante no incluye los registros recién agregados fuera del rango.
Tipos de datos (vale la pena intentarlo) para CREATE TABLE: Short, Long, Single, Double, Currency, DateTime, Bit, Byte, GUID, BigBinary, LongBinary, VarBinary, LongText, VarChar, Decimal
.
Conexión a Excel de “tecnología antigua” (archivos con extensión xls): Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:MyFolderMyWorkbook.xls;Extended Properties=Excel 8.0;
. Utilice el tipo de base de datos de origen de Excel 5.0 para los libros de trabajo de Microsoft Excel 5.0 y 7.0 (95) y utilice el tipo de base de datos de origen de Excel 8.0 para los libros de trabajo de Microsoft Excel 8.0 (97), 9.0 (2000) y 10.0 (2002).
Conexión al “último” Excel (archivos con la extensión de archivo xlsx): Provider=Microsoft.ACE.OLEDB.12.0;Data Source=Excel2007file.xlsx;Extended Properties="Excel 12.0 Xml;HDR=YES;"
Tratar los datos como texto: la configuración de IMEX trata todos los datos como texto. Provider=Microsoft.ACE.OLEDB.12.0;Data Source=Excel2007file.xlsx;Extended Properties="Excel 12.0 Xml;HDR=YES;IMEX=1";
(Más detalles en http://www.connectionstrings.com/excel)
Más información en http://msdn.microsoft.com/en-US/library/ms141683(v=sql.90).aspx y en http://support.microsoft.com/kb/316934
Conexión a Excel a través de ADODB a través de VBA detallada en http://support.microsoft.com/kb/257819
Detalles de Microsoft JET 4 en http://support.microsoft.com/kb/275561
tl; dr; Excel hace todo esto de forma nativa: use filtros o tablas
(http://office.microsoft.com/en-gb/excel-help/filter-data-in-an-excel-table-HA102840028.aspx)
Puede abrir Excel mediante programación a través de una conexión oledb y ejecutar SQL en las tablas dentro de la hoja de trabajo.
Pero puede hacer todo lo que está pidiendo sin fórmulas, solo filtros.
- haga clic en cualquier lugar dentro de los datos estas mirando
- ir a los datos en la barra de la cinta
- seleccione “Filtro” se trata de la mitad y parece un embudo
- ahora tendrá flechas en el lado apretado de cada celda en la primera fila de su tabla
- haga clic en la flecha del número de teléfono y deseleccionar espacios en blanco (ultima opcion)
- haga clic en la flecha del apellido y seleccionar orden az (opción superior)
jugar … algunas cosas a tener en cuenta:
- puede seleccionar las filas filtradas y pegarlas en otro lugar
- en la barra de estado de la izquierda, verá cuántas filas cumplen con sus criterios de filtrado del número total de filas. (por ejemplo, 308 de 313 registros encontrados)
- puede filtrar por color en Excel 2010 en salas
- A veces creo columnas calculadas que dan estados o versiones limpias de datos que luego puede filtrar u ordenar por tesis también. (por ejemplo, como las fórmulas en las otras respuestas)
HAZLO con filtros a menos que vayas a hacerlo mucho o quieras automatizar la importación de datos en algún lugar o algo … pero para completar:
Una opción de c #:
OleDbConnection ExcelFile = new OleDbConnection( String.Format( "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=0;Extended Properties="Excel 12.0;HDR=YES"", filename));
ExcelFile.Open();
un lugar útil para comenzar es echar un vistazo al esquema, ya que puede haber más de lo que cree:
List excelSheets = new List();
// Add the sheet name to the string array.
foreach (DataRow row in dt.Rows)
string temp = row["TABLE_NAME"].ToString();
if (temp[temp.Length - 1] == '$')
excelSheets.Add(row["TABLE_NAME"].ToString());
luego, cuando desee consultar una hoja:
OleDbDataAdapter da = new OleDbDataAdapter("select * from [" + sheet + "]", ExcelFile);
dt = new DataTable();
da.Fill(dt);
NOTA – ¡Utilice tablas en Excel !:
Excel tiene una funcionalidad de “tablas” que hace que los datos se comporten más como una tabla … esto le brinda grandes beneficios pero no le permitirá hacer todo tipo de consultas.
http://office.microsoft.com/en-gb/excel-help/overview-of-excel-tables-HA010048546.aspx
Para datos tabulares en Excel, este es mi valor predeterminado. Lo primero que hago es hacer clic en los datos y luego seleccionar “formatear como tabla” en la sección de inicio de la cinta. esto le brinda filtrado y clasificación por defecto y le permite acceder a la tabla y los campos por nombre (por ejemplo, tabla[fieldname] ) esto también permite funciones agregadas en columnas, por ejemplo, máximo y promedio
Puede hacer esto de forma nativa de la siguiente manera:
- Seleccione la tabla y use Excel para ordenarla por Apellido
- Cree un criterio de filtro avanzado de 2 filas por 1 columna, digamos en E1 y E2, donde E1 está vacío y E2 contiene la fórmula
=C6=""
donde C6 es la primera celda de datos de la columna del número de teléfono. - Seleccione la tabla y use el filtro avanzado, copie a un rango, usando el rango de criterios en E1: E2 y especifique dónde desea copiar la salida
Si desea hacer esto mediante programación, le sugiero que use la Grabadora de macros para registrar los pasos anteriores y mirar el código.
Comentarios y valoraciones
Recuerda dar recomendación a esta noticia si te ayudó.