2010-09-16 27 views
1

我有一个Excel电子表格,其中包含一些Excel标记号。
我的odbc阅读器应该给我返回类似'55201562000016'的东西,但是它往往会返回类似'5.52016e + 008'的东西。即使在此字段中只有数字,也可以将Excel字段读取为字符串

我只能做以下,但显然不足以告诉它应该被视为一个字符串的读者,而不是指数整数

siren = rdrxls("entr_siren").ToString().Trim() 
siret = rdrxls("entr_siret").ToString().Trim() 

我已经试过这样:

siren = Convert.ToInt64(rdrxls("entr_siren")).ToString().Trim() 
siret = Convert.ToInt64(rdrxls("entr_siret")).ToString().Trim() 

它应该工作,但有时它会抛出异常,因为有时数据是错误的(例如用字母);但我仍然需要取它。

有什么想法?

感谢

回答

1

您可以使用Int64.TryParse()来查看您是否可以将结果转换为Int64。 TryParse()返回一个布尔值,指示演员是否成功。 如果失败,则保持原样,如果它是成功的,则用转换结果的ToString()覆盖以前存储的值。

double sirenValue; 
double siretValue; 

siren = rdrxls("entr_siren").ToString().Trim(); 
siret = rdrxls("entr_siret").ToString().Trim(); 


if (double.TryParse(siren, System.Globalization.NumberStyles.Float, System.Globalization.CultureInfo.InvariantCulture, out sirenValue)) 
{ 
    siren = sirenValue.ToString(); 
} 

if (double.TryParse(siret, System.Globalization.NumberStyles.Float, System.Globalization.CultureInfo.InvariantCulture, out siretValue)) 
{ 
    siret = siretValue.ToString(); 
} 

希望这会有所帮助。

+0

与Siva Gopal相同:它似乎无法转换'5.52016e + 008'。 – thomasb 2010-09-16 11:03:52

+0

appologies cosmo0,请找到我编辑我的答案,现在解决这个问题。我在我的应用程序中测试过它,它确实将5.52016e + 008转换为552016000.您必须指定数字样式,在这种情况下,它必须是一个浮点数才能转换。 – Nope 2010-09-16 11:41:21

+0

太棒了,它的工作原理!谢谢 ! – thomasb 2010-09-16 13:06:55

0

我认为,以下方法可以帮助你克服的问题:

double converted=0; 
double.TryParse("5.52016e+008", out converted); 
+1

它解决了我与字母字段的问题,但它似乎认为'5.52016e + 008'不是一个数字... – thomasb 2010-09-16 10:44:16

+0

当我测试了我上面发布的代码时,它能够将数字5.52016e + 008到552016000.你不是这样吗?请让我知道。如果tryparse(...)提供了一个字符串,假设像“abc”,那么因为它不能将它转换为指定的数字类型,所以它会返回给定的数字类型的默认值。 – 2010-09-16 12:24:26

0

IIRC,Excel的ODBC读者看前八行“推断”的数据类型列。

第一行作为列标题,所以将文本放在第二行应该足以强制它推断出一个字符串数据类型。

一旦你做到了这一点

rdrxls("entr_siren") 

应该返回一个字符串,没有任何一种数字的。

+0

我不认为这是一个解决方案,因为我无法控制哪些行是第一个。 – thomasb 2010-09-16 10:46:24

相关问题