0

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

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

4

1 回答 1

1

假设您的文件如下所示:

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
于 2013-09-09T05:05:16.320 回答