我用OLEDB操作Excel 2010文件,内容如下: 1:sheet1的第一行包括公司编号和公司名称。2:第二行是真实的HDR,如EmployeeID、EmployeeName、EmployeeAddr等。
现在我想使用 SQL 语句选择和更新这个文件,有一个问题,如何将 Excel HDR 指定为第二行?
假设您的文件如下所示:
Row Column A
1 Company information
2 Some other information
3 Status
4 A
5 B
6 C
7 D
8 E
9 F
您不想对第 1 行和第 2 行做任何事情。第 3 行包含真正的标题。第 4 到 9 行包含真实数据。首先,让我们创建一个命名范围。假设您使用的是 Excel 2010,选择 A3:A9,转到公式 - 命名经理 - 新建 - 给出名称usefulinformation
。然后使用以下代码:
using System;
using System.Data.OleDb;
namespace StackoverflowExcel
{
class Program
{
static void Main()
{
using(var myConnection = new OleDbConnection(GetExcelConnectionStringByWrite()))
using (var myCommand = new OleDbCommand())
{
myConnection.Open();
myCommand.Connection = myConnection;
myCommand.CommandText =
"UPDATE [usefulinformation] SET Status ='Imported' WHERE Status IN ( SELECT TOP 5 Status FROM [usefulinformation] )";
myCommand.ExecuteNonQuery();
myConnection.Close();
}
Console.WriteLine("Done");
Console.ReadKey();
}
private static string GetExcelConnectionStringByWrite()
{
return
@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=c:\users\cys\desktop\Test.xlsx;Extended Properties='Excel 12.0;HDR=YES;IMEX=0;MAXSCANROWS=10;READONLY=FALSE'";
}
}
}
注意更新语句。而不是使用[Sheet$1]
我使用命名范围[usefulinformation]
。唯一的风险是,如果添加了更多行并且usefulinformation
命名范围没有保持最新,您可能无法获得正确的结果。要克服这一点,请使用长命名范围,即使该命名范围中的许多单元格今天可能不会使用。
后:
Row Column A
1 Company information
2 Some other information
3 Status
4 Imported
5 Imported
6 Imported
7 Imported
8 Imported
9 F