如何使用详细的查询在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:
- 我把这个excel的数据传播到一个DataTable对象中,我怎样才能查询DataTAble对象
- 我读了一个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是:
-
您可以使用Microsoft知识库文章如何:在Visual C#.NET中实现DataSet GROUP BY帮助程序类
-
如果您使用.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属性。
这是否有助于解决您的问题?