public int insertDataTableToExcel(DataTable dt, string tableName) { int flag = -1; try { this.Open(); string sql = "insert into [" + tableName + "$] (A1, A2, A3, A4, A5) values ("; int loop_1 = 0; OleDbParameter[] param = new OleDbParameter[dt.Columns.Count]; OleDbCommand command = new OleDbCommand(); //生成SQL语句, 构建入参数组 for (loop_1 = 0; loop_1 < dt.Columns.Count; loop_1++) { switch (dt.Columns[loop_1].DataType.ToString()) { case "System.Decimal": case "System.Int32": sql = sql + "{" + loop_1 + "}, "; break; default: sql = sql + "'{" + loop_1 + "}', "; break; } //sql = sql + "@param_" + loop_1 + ", "; //Console.WriteLine(dt.Columns[loop_1].DataType.ToString()); //switch (dt.Columns[loop_1].DataType.ToString()) //{ // case "System.DateTime": // param[loop_1] = new OleDbParameter("@param_" + loop_1, OleDbType.Date); // break; // case "System.Decimal": // param[loop_1] = new OleDbParameter("@param_" + loop_1, OleDbType.Decimal); // break; // case "System.Int32": // param[loop_1] = new OleDbParameter("@param_" + loop_1, OleDbType.Integer); // break; // default: // param[loop_1] = new OleDbParameter("@param_" + loop_1, OleDbType.LongVarWChar); // break; //} } sql = sql.Substring(0, sql.Length - 2) + ")"; //插入数据 for (loop_1 = 0; loop_1 < dt.Rows.Count; loop_1++) { string _sql = String.Format(sql, dt.Rows[loop_1].ItemArray); Console.WriteLine(_sql); command.CommandText = _sql; command.Connection = conn; flag = flag + command.ExecuteNonQuery(); //command.CommandText = sql; //command.CommandType = CommandType.Text; //command.Connection = conn; //for (loop_2 = 0; loop_2 < dt.Rows[loop_1].ItemArray.Length; loop_2++) //{ // param[loop_2].Value = dt.Rows[loop_1].ItemArray[loop_2]; // command.Parameters.Add(param[loop_2]); //} //flag = flag + command.ExecuteNonQuery(); //command.Parameters.Clear(); } } catch (Exception e) { flag = -3; Console.WriteLine(e.ToString()); } finally { this.Close(); } return flag; }
代码如上。。我已经区分了字符串和数字了 怎么到了Excel里面的时候还是会默认成字符串呢?而且明明没有说要加粗的。。。但是有部分数据却加粗了。。明明说是自动换行的。。有部分却没有换。。
其实我找到原因了。。。是因为数据里面出现空字符的问题~ 而数据格式和样式目测是参照上一列为标准的 因为上一列为空所以导致随后插入的数据样式和格式都改变了。谢谢你的解答。。。。。
还要自己再答一次呀。。。那么再详细点说明白好了 给后人指个路什么的
conn = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" + URL + "; Extended Properties='Excel 8.0; HDR=NO; IMEX=2'; Persist Security Info=False");
链接语句是上面那个。然后HDR设成什么其实已经不重要了。。因为是参照第一行的格式的。。。然后IMEX是什么,感觉也不是很重要,反正2就很无敌的样子。。。其实主要还是出现了空字符的关系。。。所以代码是用回了注释掉的。。。然后判断一下是否为空。。。然后空的话加个空格给他。。然后就妥了。。。。
给你推荐一个专业的excel第三方插件 EPPlus
把拼接的sql语句弄出来看下。
insert into [Sheet1$] values (xx, xx, xx, xx, xx);
其中第一,三个xx是System.String 第二个是System.DateTime, 第四个是System.Decimal, 第五个是System.Int32
其实我找到原因了。。。是因为数据里面出现空字符的问题~ 而数据格式和样式目测是参照上一列为标准的 因为上一列为空所以导致随后插入的数据样式和格式都改变了。谢谢你的解答。
@Gssl: 呵呵,解决问题就好~一般来说,写数据我还是推荐第三方,如楼上NPOI,Epplus等。