如何使用详细的查询在C#中查询excel文件

以下代码将电子表格中的数据完美地返回到网格中

[ 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 ] 

我使用的电子表格有从A等名字(仅标准列名称)列名,并且工作表名称是帐户。

我有一个查询问题…

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

我怎样才能使这样的查询string…

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

所以它返回这个查询的结果

注意:columnA是表单上的A,columnB是表单上的B,而columnG是表单上的G

其他可能的select:

  1. 我把这个excel的数据传播到一个DataTable对象中,我怎样才能查询DataTAble对象
  2. 我读了一个DataView对象,它可以获取一个表并返回根据( <dataviewObject>.RowFilter = "where..." )操纵的表,但我不知道如何使用我想要的查询。

你想要的东西像:

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

要么

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

要么

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

要么

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

如果你不想做Group,那么DataTable类就有一个叫做Compute的方法来执行一些SQL函数。
支持以下function: 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 

你可以探索的其他select是:

  1. 您可以使用Microsoft知识库文章如何:在Visual C#.NET中实现DataSet GROUP BY帮助程序类

  2. 如果您使用.NET 3.5,则可以使用Linq ref: LINQ DataTable Query – Group Aggregation

在你的例子中,SUM是否代表一个潜在的列名或SQLfunction?

您是否试图让您的查询,以便您可以引用列A,B,C,D等等从Excel表格中的ColumnA,ColumnB,ColumnC,ColumnD等…在您的SQL查询?

我想我的意思是:你是否想写你的查询,如下所示:“从[Accounts $]中selectColumnA,ColumnB,ColumnC,而不是:”Select * from [Accounts $]“?

如果是这样,您可以将列标题放在Excel工作表的第一行,并将它们作为连接string中的列名。 要做到这一点,使您的连接string行如下所示:

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

不同的是扩展属性部分中的“HDR =是”部分。 一旦你能够通过使用列名来引用Excel工作表中的列,你应该可以像上面提到的那样使用DataTable的Select方法和DataView的RowFilter属性。

这是否有助于解决您的问题?