C# 如何使用详细查询在C中查询excel文件
下面的代码将数据从电子表格返回到网格中C# 如何使用详细查询在C中查询excel文件,c#,excel,C#,Excel,下面的代码将数据从电子表格返回到网格中 [ string excelConnectString = "Provider = Microsoft.Jet.OLEDB.4.0;" + "Data Source = " + excelFileName + ";" + "Extended Properties = Excel 8.0;"; OleDbConnection objConn = new OleDbConnect
[
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命名的列,以此类推,只有标准列名
表名为Accounts
我对查询有问题
[OleDbCommand objCmd = new OleDbCommand("Select * From [Accounts$]", objConn);]
如何使查询字符串像这样
"Select <columnA>,<columnB>,SUM<columnG> from [Accounts$] group by <columnA>,<columnB>"
…以便返回此查询的结果
注:A列为图纸上的A列,B列为图纸上的B列,G列为图纸上的G列
其他可能的替代办法:
我将excel的数据分散到DataTable对象中,如何查询DataTable对象
我了解到一个DataView对象,它可以获取一个表并返回根据.RowFilter=where…,操作的表,但是我不知道如何使用我想要的查询。
在您的示例中,SUM表示潜在的列名还是SQL函数
您是否试图获取查询以便能够引用列A、B、C、D等。。。从Excel表格中选择A列、B列、C列、D列等。。。在您的SQL查询中
我想我的意思是:您想这样写您的查询:从[Accounts$]中选择ColumnA、ColumnB、ColumnC,而不是从[Accounts$]中选择*
如果是这样,您可以将列标题放在Excel工作表的第一行,并将其视为连接字符串中的列名。为此,请使连接字符串行如下所示:
excelConnectString = "Provider = Microsoft.Jet.OLEDB.4.0;" + "Data Source = "
+ excelFileName + ";" + "Extended Properties = Excel 8.0; HDR=Yes;";
不同的是扩展属性部分中的HDR=Yes部分。一旦您能够使用列名引用Excel工作表中的列,您就应该能够使用DataTable的Select方法和DataView的RowFilter属性,如您所述
这是否有助于甚至解决您的问题?如果您不想执行Group by,则DataTable类有一个名为Compute的方法,该方法执行很少的SQL函数。
支持以下函数:COUNT、SUM、MIN、MAX、AVG、STDEV、VAR
您可以探索的其他备选方案包括:
您可以使用Microsoft知识库文章
如果您使用的是.NET 3.5,则可以使用Linq ref:
您想要类似于:
SELECT Sum([NameOfFieldAsPerHeader]) FROM [Accounts$]
或
或
或
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])