recorrer leer insertar importar guardar escribir desde datos archivo abrir c# excel

leer - Cómo consultar el archivo de Excel en C#utilizando una consulta detallada



leer datos de un archivo excel c# (3)

El siguiente código devuelve los datos de una hoja de cálculo a una cuadrícula perfectamente

[ string excelConnectString = "Provider = Microsoft.Jet.OLEDB.4.0;" + "Data Source = " + excelFileName + ";" + "Extended Properties = Excel 8.0;"; OleDbConnection objConn = new OleDbConnection(excelConnectString); OleDbCommand objCmd = new OleDbCommand("Select * From [Accounts$]", objConn); OleDbDataAdapter objDatAdap = new OleDbDataAdapter(); objDatAdap.SelectCommand = objCmd; DataSet ds = new DataSet(); objDatAdap.Fill(ds); fpDataSet_Sheet1.DataSource = ds;//fill a grid with data ]

La hoja de cálculo que estoy usando tiene columnas nombradas de A, y así sucesivamente (solo nombres de columna estándar) y el nombre de la hoja es Cuentas.

Tengo un problema con la consulta ...

[OleDbCommand objCmd = new OleDbCommand("Select * From [Accounts$]", objConn);]

¿Cómo puedo hacer que la cadena de consulta sea así ...

"Select <columnA>,<columnB>,SUM<columnG> from [Accounts$] group by <columnA>,<columnB>"

..so que devuelve los resultados de esta consulta

Nota: la columna A es A en la hoja, la columna B es B en la hoja y la columna G es G en la hoja

Otras posibles alternativas:

  1. Tengo los datos de ese Excel distribuidos en un objeto DataTable, ¿cómo puedo consultar el objeto DataTAble?
  2. Leí acerca de un objeto DataView que puede tomar una tabla y devolver la tabla manipulada de acuerdo con ( <dataviewObject>.RowFilter = "where..." ), pero no sé cómo usar la consulta que quiero.

En su ejemplo, ¿SUM representa un nombre de columna potencial o un funcitón de SQL?

¿Está tratando de obtener su consulta para que pueda hacer referencia a la columna A, B, C, D, etc. ... desde la hoja de Excel como ColumnA, ColumnB, ColumnC, ColumnD, etc ... en su consulta SQL?

Supongo que quiero decir: ¿desea escribir su consulta como esta: "Seleccione Columna A, Columna B, Columna C de [Cuentas $]", en lugar de esto: "Seleccione * de [Cuentas $]"?

De ser así, puede colocar encabezados de columna en la primera fila de su hoja de Excel y tratarlos como los nombres de columna en la cadena de conexión. Para hacer esto, haz que tu línea de cadena de conexión se vea así:

excelConnectString = "Provider = Microsoft.Jet.OLEDB.4.0;" + "Data Source = " + excelFileName + ";" + "Extended Properties = Excel 8.0; HDR=Yes;";

La diferente es la porción "HDR = Yes" en la sección Propiedades Extendidas. Una vez que pueda hacer referencia a las columnas en su hoja de Excel utilizando nombres de columna, podrá usar el método Select de DataTable y la propiedad RowFilter de DataView como mencionó.

¿Esto ayuda o incluso aborda su pregunta?


¿Quieres algo como esto?

SELECT Sum([NameOfFieldAsPerHeader]) FROM [Accounts$]

O

SELECT [ForExampleEmployeeID], Sum([NameOfFieldAsPerHeader]) FROM [Accounts$] GROUP BY [ForExampleEmployeeID]

O

SELECT [ForExampleEmployeeID], Year([SomeDate]), Sum([NameOfFieldAsPerHeader]) FROM [Accounts$] GROUP BY [ForExampleEmployeeID], Year([SomeDate])

O

SELECT [ForExampleEmployeeID], Year([SomeDate]), Sum([NameOfFieldAsPerHeader]) FROM [Accounts$] WHERE Year([SomeDate])>2000 GROUP BY [ForExampleEmployeeID], Year([SomeDate])


Si no desea agrupar, la clase DataTable tiene un método llamado Compute que ejecuta pocas funciones SQL.
Las siguientes funciones son compatibles: COUNT, SUM, MIN, MAX, AVG, STDEV, VAR .

string salary = empTable.Compute("SUM( Salary )", "").ToString(); string averageSalaryJan = empTable.Compute("AVG( Salary )", "Month = 1").ToString(); // Assuming you have month stored in Month column and Salary stored in Salary column

Otras alternativas que puedes explorar son:

  1. Puede usar el artículo de Microsoft KB CÓMO: Implementar un grupo de DataSet GROUP BY Helper en Visual C # .NET

  2. Si está usando .NET 3.5, puede usar Linq ref: LINQ DataTable Query - Group Aggregation