2012-11-07 45 views
1

ASP.NET,C#,MVC 3,代碼第一個項目導入3位數字領先零

我想從Excel電子表格中導入數據。我已經將所有單元格格式化爲文本。
導入工作表中的示例行如下所示。

Account    Card    ThreeCode Route 
04562954830287127 32849321890233127 183  154839254 
04562954830287128 32849321890233128 233 
04562954830287129 32849321890233129 082 
04562954830287130 32849321890233130 428 

當我在調試運行,並深入到DS DataSet中的賬戶和卡列被導入爲字符串,3位數字和路線列導入爲雙打。問題出現在數據行3中以0(082)開頭的3位數字。它以System.DBNull形式導入併爲空。我需要能夠導入帶有前導零的3位數字代碼。有沒有辦法強制導入是所有字符串或另一種方法來解決這個問題?我搜索了網頁,並沒有找到解決方案。這將從瀏覽器運行,因此任何與本地計算機上的註冊表,dll或ini文件相關的內容都不是一種選擇。進口代碼如下。預先感謝您的任何幫助。

public ActionResult ExcelToDS(string Path = "C;\File.xls") 
{ 
    string strConn = "Provider= Microsoft.Jet.OLEDB.4.0;" + "Data Source=" + Path + "; " + "Extended Properties=Excel 8.0;"; 

    OleDbConnection conn = new OleDbConnection(strConn); 
    conn.Open(); string strExcel = ""; 
    OleDbDataAdapter myCommand = null; 
    DataTable dt = new DataTable(); 
    strExcel = "select * from [Import$]"; 
    DataSet ds = null; 
    myCommand = new OleDbDataAdapter(strExcel, strConn); 
    ds = new DataSet(); myCommand.Fill(ds, "table1"); 

回答

0

似乎沒有成爲一個辦法,使這項工作始終。我想出的辦法是在Excel工作簿中添加1000到ThreeCode列。然後您可以將數據導入數據集。然後,當讀出數據時,只需剝離「1」preifx即可。這是我的內聯方法來做到這一點。

public static string last3(this string instring) 
{ int len = instring.Length - 3; string outstring = instring.Substring(len, 3); return outstring; } 

,你可以在代碼調用:

card.3Dig = code.last3(); 

「卡」和「3dig」是正在填充類和領域。 'code'是4位數據集數據。

+0

通過按照下面的值對所有行進行採樣,Excel驅動程序應該查詢該列中的每個字段,並且如果它發現某些看起來像它的字符串,那麼它會將所有數據視爲字符串。我已經編寫了一個生產應用程序,在應用程序中進行了相當多的研究,並且經歷了您提到的完全相同的問題,並以此方式解決了這個問題。另外值得注意的是,由於最大長度問題,我使用了64位驅動程序,但在這裏我應該記住這一點。 –

+0

您可以嘗試按照http://jingyangli.wordpress.com/2009/02/13/imex1-revisit-and-typeguessrows-setting-change-to-0-watch-for-performance/ 來設置IMEX,確定你在正確的位置設置了reg值(sas鏈接討論它,在MS的網站上也提出了一些問題,但是這首先出現了)http://support.sas.com/kb/35/563。html –

+0

正如我前面所說,因爲它是一個3位數的數字,測試確定它是一個雙精度型,沒有單元格中有字符串。我試着用單引號前8行數據前綴,但從第9行開始返回System.DBNull。如果200個行被導入,沒有一種實際的方法用一個單引號加前綴。添加1000可以用一個簡單的公式= D2 + 1000來完成,填充所有行,然後將其值粘貼回原始列。 – Joe

1

啊是的EXE驅動程序的樂趣。會發生什麼,它會從數據類型的第一行開始確定10行,否則該格式之外的任何內容都將爲空。

解決方案是使用一個更強大的第三方驅動程序通常是成本的東西,或設置註冊表項來這裏品嚐充分的所有行,而不是默認的8

退房的鏈接,TypeGuessRows http://www.connectionstrings.com/excel

HKLM \ SOFTWARE \ Wow5432Node \微軟\噴氣\ 4.0 \發動機\ Excel中 設定值TypeGuessRows等於零

+0

「三碼」列中的大多數行都包含三位數字。似乎並不是採樣更多的行將會把它解釋爲一個字符串。如果它不把它解釋爲一個字符串,我不知道它將如何保持領先0. – Joe

+0

你試過了嗎? –