C#写Excel(OleDB)
先辟谣(至少对Excel2010来说)
IMEX ( IMport EXport mode )设置
IMEX 有三种模式,各自引起的读写行为也不同,容後再述:
0 is Export mode:只能写入
1 is Import mode:只能读取
2 is Linked mode (full update capabilities):读写均可
我这里特别要说明的就是 IMEX 参数了,因为不同的模式代表著不同的读写行为:
当IMEX=0 时为“汇出模式”,这个模式开启的 Excel 档案只能用来做“写入”用途。
当 IMEX=1 时为“汇入模式”,这个模式开启的 Excel 档案只能用来做“读取”用途。
当 IMEX=2 时为“连結模式”,这个模式开启的 Excel 档案可同时支援“读取”与“写入”用途。
IMEX=2的是写不了的,还不如不加.0:写,1读
IMEX=1 / IMEX=2:不能修改表“用户”的设计。它在只读数据库中。
上代码:
using System; using System.Data; using System.Data.OleDb; namespace ConsoleApplication2 { class Program { static void Main(string[] args) { const string strPath = @"..\MyTable.xlsx"; OleDbConnection _conn = null; _conn = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + strPath + ";Extended Properties='Excel 12.0;IMEX=0'"); try { _conn.Open(); string sqlDropTb = "DROP TABLE [用户]"; string sqlCreate = "CREATE TABLE [用户] ([ID] INTEGER, [姓名] VarChar)"; string sqlInsert = "INSERT INTO [用户] VALUES ( 1, 'Andy' )"; string sqlUpdate = "UPDATE [用户] SET [姓名] = 'Cat' WHERE [ID]=1"; OleDbCommand _cmd = new OleDbCommand(sqlDropTb, _conn); Console.WriteLine(_cmd.ExecuteNonQuery() + "行受影响 Drop"); _cmd = new OleDbCommand(sqlCreate, _conn); Console.WriteLine(_cmd.ExecuteNonQuery() + "行受影响 Create"); _cmd = new OleDbCommand(sqlInsert, _conn); Console.WriteLine(_cmd.ExecuteNonQuery() + "行受影响 Insert"); _cmd = new OleDbCommand(sqlUpdate, _conn); Console.WriteLine(_cmd.ExecuteNonQuery() + "行受影响 Update"); } catch (Exception ex) { Console.WriteLine(ex.Message); } finally { if (_conn != null) { _conn.Close(); _conn = null; } } Console.ReadKey(); } } }
优点:像写数据库一样写Excel
缺点:只能像写数据库一样写Excel