我正在使用OleDbConnection创建一个Excel文件:
String bewegungenDateiname = System.IO.Path.ChangeExtension(System.IO.Path.GetTempFileName(), ".xls");
string strConnectionString = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source="
+ System.IO.Path.GetDirectoryName(bewegungenDateiname) + @"" + System.IO.Path.GetFileName(bewegungenDateiname)
+ @";Extended Properties='Excel 8.0;HDR=YES'";
using (System.Data.OleDb.OleDbConnection objConn = new System.Data.OleDb.OleDbConnection(strConnectionString))
using (System.Data.OleDb.OleDbCommand cmd = new System.Data.OleDb.OleDbCommand("", objConn))
{
objConn.Open();
cmd.CommandText = "CREATE TABLE [Test] ([MyDecimal] DECIMAL NULL)";
cmd.ExecuteNonQuery();
cmd.Parameters.Clear();
Decimal value = 12.34m;
cmd.Parameters.AddWithValue("@P01", value);
cmd.CommandText = "INSERT INTO [Test$] ([MyDecimal]) VALUES (@P01)";
cmd.ExecuteNonQuery();
}
System.Diagnostics.Process.Start(bewegungenDateiname);
现在当Excel 2013打开Excel文件时,它会显示:
MyDecimal
1234
所以在我的例子中,Excel失去了点。现在我正在运行德语版本的Windows/Office,如果我使用以下行来添加参数,它将工作:
cmd.Parameters.AddWithValue("@P01", value.ToString());
德语数字本地化使用冒号而不是点来将分数与数值分开(即12,34而不是12.34)。所以似乎OleDbConnection使用错误的文化变体来编写Excel文件?
我担心我的版本可能会与不同版本的Excel或不同的区域设置打破-有没有一种方法来解决这个问题,并获得十进制值到Excel没有这样的风险?如果没有这个缺陷,我会用其他方法来创建Excel文件。
在Excel 2013中尝试使用以下方法:
strConnectionString = String.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties=""Excel 12.0;HDR=No;IMEX=1""", _filePath)
我不知道这是否能解决问题。