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");
通過按照下面的值對所有行進行採樣,Excel驅動程序應該查詢該列中的每個字段,並且如果它發現某些看起來像它的字符串,那麼它會將所有數據視爲字符串。我已經編寫了一個生產應用程序,在應用程序中進行了相當多的研究,並且經歷了您提到的完全相同的問題,並以此方式解決了這個問題。另外值得注意的是,由於最大長度問題,我使用了64位驅動程序,但在這裏我應該記住這一點。 –
您可以嘗試按照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 –
正如我前面所說,因爲它是一個3位數的數字,測試確定它是一個雙精度型,沒有單元格中有字符串。我試着用單引號前8行數據前綴,但從第9行開始返回System.DBNull。如果200個行被導入,沒有一種實際的方法用一個單引號加前綴。添加1000可以用一個簡單的公式= D2 + 1000來完成,填充所有行,然後將其值粘貼回原始列。 – Joe