ASP.NET 非“自动化”处理 Excel-操作

作者:vkvi 来源:ITPOW(原创) 日期:2008-2-27

使用 SQL 来操作 Excel 没有太多特殊的,但最特殊的一点是 SQL 语句 FROM 后面的表名,如何使用呢?

方法一,使用 Excel 中的表名加美元符号。

string sql = @"select * from [Sheet1$]";

OleDbConnection conn = new OleDbConnection("Provider=Microsoft.Jet.OleDb.4.0;Data Source=" +
                        Server.MapPath("foo.xls") + ";" +
                        "Extended Properties='Excel 8.0;HDR=NO;'");
conn.Open();
OleDbCommand cmd = new OleDbCommand(sql, conn);
OleDbDataReader reader = cmd.ExecuteReader();

while (reader.Read())
{
    Response.Write(reader.GetString(0) + "<br />");
}

reader.Close();
reader.Dispose();
cmd.Dispose();
conn.Close();
conn.Dispose();

方法二,在 Excel 中指定区域。

打开 Excel,选中要操作的一个或多个单元格,单击右键,单击“命名单元格区域”,假如我们将其命名为 Range1,在 SQL 语句中 Range1 就是表名了。

示例:

string sql = @"update [Range1] set F1='foo'";

OleDbConnection conn = new OleDbConnection("Provider=Microsoft.Jet.OleDb.4.0;Data Source=" +
                        Server.MapPath("foo.xls") + ";" +
                        "Extended Properties='Excel 8.0;HDR=NO;'");
conn.Open();
OleDbCommand cmd = new OleDbCommand(sql, conn);
cmd.ExecuteNonQuery();

cmd.Dispose();
conn.Close();
conn.Dispose();

执行上述语句后,区域 Range1 中的第一列内容就全部变成 foo 了。

方法三,在 SQL 语句中指定区域。

在 Excel 的表名后加美元符号,再加起始单元格编号,冒号,结束单元格编号。

string sql = @"update [Sheet1$C2:D10] set F1='foo'";

如果起始单元格和结束单元格相同,则表示只处理该单元格。

说明

打开 Excel 的空白表,可以看到很多单元格,我们可以在任何一个单元格中写数据。但对于使用上面这种方式来操作 Excel 就要克服这一观念,要始终把它看作一个数据库,一个空白表,它是没有任何数据的,而不是空白数据。

比如只有三行数据,我们现在要 UPDATE 第四行的数据,对第四行就不会有影响,因为第四行根本不存在。

但如果我们把第五行的单元格边框设置一下,或者把第四行写点数据(写了再删除也可以),此时就相当于执行了数据填充,第四行就可以被更新了。

相关文章