繁体   English   中英

Excel文件上传更改数据类型

[英]Excel File Upload Changing Data Type

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

我正在通过在运行时读取数据表来制作数据表,制作数据表后,此值已更改为(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的数据类型?我该怎么做?

8996812351321100000.0Int64会产生精确的舍入误差。

(Int64)8996812351321100000.0 // == 8996812351321100288 

而是使用decimal数据类型,因为它旨在表示十进制数字而没有舍入问题。 或者,因为它是一个没有任何算术运算的数字,所以只需使用string

我认为,BigInt应该会有所帮助。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM