想必许多同志们会用组件Microsoft.Office.Interop.Excel来操作Excel文档,但是这种方法不够简便,这不如利用C#配合OleDb编辑Excel文档的方式容易,这种法使得Excel表格变得像数据表那样容易地被用于查寻,更新和删除记录.下面就介绍这种方法的常用编码方式:
protected
void
DoOleSql(
string
sql,
string
database)
{
OleDbConnection conn = new OleDbConnection();
conn.ConnectionString = " Provider=Microsoft.Jet.OLEDB.4.0;Data Source= " + Server.MapPath( " \\ " ) + database + " ; Extended Properties='Excel 8.0;HDR=no;IMEX=0' " ;
try
{ // 打开连接
conn.Open();
}
catch (Exception e)
{
Response.Write(e.ToString());
}
OleDbCommand olecommand = new OleDbCommand(sql, conn);
try
{ // 执行语句
olecommand.ExecuteNonQuery();
}
catch (Exception eee)
{
Response.Write(eee.ToString());
conn.Close();
}
finally
{
conn.Close(); // 关闭数据库
}
conn.Close();
}
{
OleDbConnection conn = new OleDbConnection();
conn.ConnectionString = " Provider=Microsoft.Jet.OLEDB.4.0;Data Source= " + Server.MapPath( " \\ " ) + database + " ; Extended Properties='Excel 8.0;HDR=no;IMEX=0' " ;
try
{ // 打开连接
conn.Open();
}
catch (Exception e)
{
Response.Write(e.ToString());
}
OleDbCommand olecommand = new OleDbCommand(sql, conn);
try
{ // 执行语句
olecommand.ExecuteNonQuery();
}
catch (Exception eee)
{
Response.Write(eee.ToString());
conn.Close();
}
finally
{
conn.Close(); // 关闭数据库
}
conn.Close();
}
注:
1
)使用 Excel 工作簿时,默认情况下,区域中的第一行是标题行(或字段名称)。如果第一个区域不包含标题,您可以在连接字符串的扩展属性中指定 HDR
=
NO。如果您在连接字符串中指定 HDR
=
NO,Jet OLE DB 提供程序将自动为您命名字段(F1 表示第一个字段,F2 表示第二个字段,依此类推);
2
)IMEX
=
1将所有读入数据看作字符,其他值(
0
、
2
)请查阅相关帮助文档;
3
)如果出现“找不到可安装的isam”错误,一般是连接字符串错误
3 、从excel文件读取数据
string sql = " select * from [sheet1$] " ;
DoOleSql(sql, " test.xls " );
4 、更新excel文件中的数据
string sql = " update [sheet1$] set FieldName1='333' where FieldName2='b3' " ;
DoOleSql(sql, " test.xls " );
5 、向excel文件插入数据
string sql = " insert into [sheet1$](FieldName1,FieldName2,…) values('a',’b’,…) " ;
DoOleSql(sql, " test.xls " );
6 、删除excel文件中的数据:不提倡使用这种方法
7 、对于非标准结构的excel表格,可以指定excel中sheet的范围
1 )读取数据: string sql = " select * from [sheet1$A3:F20] " ;
2 )更新数据: string sql = " update [sheet1$A9:F15] set FieldName='333' where AnotherFieldName='b3' " ;
3 )插入数据: string sql = " insert into [sheet1$A9:F15](FieldName1,FieldName2,…) values('a',’b’,…) " ;
4 )删除数据:不提倡
注: 1 ) 代码根据需要可以自行修改; 2 )如果出现“操作必须使用一个可更新的查询”错误,可能sql语句中对excel文件中的“字段”引用有错误,或对 excel文件不具有“修改”权限; 3 )如果出现“不能扩充选定范围”错误,可能是对excel文件引用的“范围”有错误。
3 、从excel文件读取数据
string sql = " select * from [sheet1$] " ;
DoOleSql(sql, " test.xls " );
4 、更新excel文件中的数据
string sql = " update [sheet1$] set FieldName1='333' where FieldName2='b3' " ;
DoOleSql(sql, " test.xls " );
5 、向excel文件插入数据
string sql = " insert into [sheet1$](FieldName1,FieldName2,…) values('a',’b’,…) " ;
DoOleSql(sql, " test.xls " );
6 、删除excel文件中的数据:不提倡使用这种方法
7 、对于非标准结构的excel表格,可以指定excel中sheet的范围
1 )读取数据: string sql = " select * from [sheet1$A3:F20] " ;
2 )更新数据: string sql = " update [sheet1$A9:F15] set FieldName='333' where AnotherFieldName='b3' " ;
3 )插入数据: string sql = " insert into [sheet1$A9:F15](FieldName1,FieldName2,…) values('a',’b’,…) " ;
4 )删除数据:不提倡
注: 1 ) 代码根据需要可以自行修改; 2 )如果出现“操作必须使用一个可更新的查询”错误,可能sql语句中对excel文件中的“字段”引用有错误,或对 excel文件不具有“修改”权限; 3 )如果出现“不能扩充选定范围”错误,可能是对excel文件引用的“范围”有错误。