我正在使用 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 文件。