我正在使用oledb和c#将数据写入excel。 我遇到问题,我打算存储在excel文件中的一些数据是数字(Int变量),但在我尝试将其插入excel后,它变成了文本。另外,为了确保数据是Int,我使用Convert.ToInt32方法转换它。
当数据是最终的时,这意味着我在代码特定的数字中写了它在excel中保留数字,但其他数据变成文本。
结果对象(在代码中)是Dictionary(String,Object)
public void insertIntoDb()
{
string connectionString = String.Format(@"Provider=Microsoft.ACE.OLEDB.12.0;" + "Data Source={0};Extended Properties='Excel 12.0;HDR=YES;IMEX=0'", Globals.path);
OleDbConnection dbConnection = new OleDbConnection(connectionString);
String query = "INSERT INTO [SHEET1$] ([Id],[Name],[Email],[Phone],[Complete Date],[Destination],[Passengers],[Depart],[End],[Nights],[Price]) VALUES (@value1,@value2,@value3,@value4,@value5,@value6,@value7,@value8,@value9,@value10,@value11)";
dbConnection.Open();
OleDbCommand cmd = new OleDbCommand(query, dbConnection);
cmd.Parameters.AddWithValue("@value1", (this.getLastId()+1));
cmd.Parameters.AddWithValue("@value2", this.results["Name"]);
//TODO: Add email to MsgToText
cmd.Parameters.AddWithValue("@value3", this.results["Email"]);
cmd.Parameters.AddWithValue("@value4", this.results["Phone"]);
cmd.Parameters.AddWithValue("@value5", this.results["Date"]);
cmd.Parameters.AddWithValue("@value6", Convert.ToInt32(this.results["Destination"]));
cmd.Parameters.AddWithValue("@value7", Convert.ToInt32(this.results["Passengers"]));
cmd.Parameters.AddWithValue("@value8", this.results["Departure Date"]);
cmd.Parameters.AddWithValue("@value9", this.results["End Date"]);
cmd.Parameters.AddWithValue("@value10", Convert.ToInt32(this.results["Nights"]));
cmd.Parameters.AddWithValue("@value11", Convert.ToInt32(this.results["Price"]));
if(cmd.ExecuteNonQuery() > 0)
{
MessageBox.Show("Added to DB");
dbConnection.Close();
}
}
答案 0 :(得分:0)
如果我得到它,我认为问题是写入excel,最后你的int是文本格式。如果你把写入的代码放在excel上会很容易。您是否为文件使用Excel模板?如果是,您可以在模板中定义单元格的类型,以确保它是数字。如果没有,您可以在写入之前定义单元格的类型,如下例所示: 对于整数:xlYourRange.NumberFormat =“0”;
您可以像以下示例一样检查单元格的格式: string checkFormat = range.EntireColumn.NumberFormat.ToString();