如何指定Excel HDR

时间:2013-09-09 04:06:41

标签: c# excel oledb

我使用OLEDB来操作Excel 2010文件,内容如下: 1:表1的第一行包括公司编号和公司名称。 2:第二行是真实的HDR,例如EmployeeID,EmployeeName,EmployeeAddr等。

现在我想使用SQL语句选择并更新此文件,有一个问题,如何将Excel HDR指定为第二行?

1 个答案:

答案 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