Excel文件上载更改数据类型

时间:2015-04-14 07:32:14

标签: c#

我必须上传excel文件,我有正确格式的excel文件,我有一个包含大数字的列,所以在excel中它显示带有Exponent的数字,例如我有这个值8.99681E + 18( 8996812351321100000)

我通过在运行时读取它来创建DataTable,在生成Datatable之后,这个值被更改为(8996812351321100288)。 这就是我在做的事情

var conn = new OleDbConnection();
 if (fileExtension == ".xls")
      //4.0 Connection String
 if (fileExtension == ".xlsx")
                //12.0 Connection String

           conn.Open();
            DataTable dtSheets = conn.GetSchema("Tables");
            string firstSheet = dtSheets.Rows[0]["TABLE_NAME"].ToString();
            using (var comm = new OleDbCommand())
            {
                comm.CommandText = "select * from [" + firstSheet + "]";
                comm.Connection = conn;                
                using (var da = new OleDbDataAdapter())
                {
                    da.SelectCommand = comm;
                    da.Fill(dt);
                    if (dt.Columns.Contains("SIMNo"))
                    {
                        DataTable dtCloned = dt.Clone();
                        dtCloned.Columns["SIMNo"].DataType = typeof(Int64);
                        foreach (DataRow row in dt.Rows)
                        {
                            dtCloned.ImportRow(row);
                        }
                        return dtCloned;
                    }
                    return dt;
                }
            }

有没有办法可以在创建DataTable之前在运行时更改SIMNo的数据类型?我该怎么做?

2 个答案:

答案 0 :(得分:1)

8996812351321100000.0投射到Int64会产生精确舍入误差。

(Int64)8996812351321100000.0 // == 8996812351321100288 

相反,请使用decimal数据类型,因为它旨在表示十进制数而不会出现舍入问题。或者,因为它是一个不会应用任何算术的数字,只需使用string

答案 1 :(得分:1)

我认为,BigInt应该是一个帮助。

http://www.carljohansen.co.uk/bigint/.