使用OleDbConnection创建的Excel文件使用无效的CultureInfo

时间:2013-06-05 12:56:39

标签: excel cultureinfo oledbconnection

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

1 个答案:

答案 0 :(得分:1)

使用Excel 2013尝试使用以下内容:

strConnectionString = String.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties=""Excel 12.0;HDR=No;IMEX=1""", _filePath)

我不知道它是否能解决问题。