Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用详细查询在C中查询excel文件_C#_Excel - Fatal编程技术网

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