2010-09-16 29 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

相關問題