我使用OLEDB来操作Excel 2010文件,内容如下: 1:表1的第一行包括公司编号和公司名称。 2:第二行是真实的HDR,例如EmployeeID,EmployeeName,EmployeeAddr等。
现在我想使用SQL语句选择并更新此文件,有一个问题,如何将Excel HDR指定为第二行?
答案 0 :(得分:0)
假设你的文件是这样的:
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