ASP.NET,C#,MVC 3,Code First项目
我正在尝试从Excel电子表格导入数据。我已将所有单元格格式化为文本 导入工作表中的示例行如下所示。
Account Card ThreeCode Route
04562954830287127 32849321890233127 183 154839254
04562954830287128 32849321890233128 233
04562954830287129 32849321890233129 082
04562954830287130 32849321890233130 428
当我在调试中运行并向下钻取到ds DataSet时,Account和Card列将作为字符串导入,3-Digit和Route列将作为双精度导入。问题出现在数据行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 :(得分:1)
啊,是的excel驱动程序的乐趣。发生的事情是它从数据类型的第一个说十行做出确定,该格式之外的任何内容都变为空。
解决方案是使用更强大的第三方驱动程序,通常会花费某些成本,或者设置注册表项以完全采样所有行而不是默认值8。
查看TypeGuessRows的链接 http://www.connectionstrings.com/excel
HKLM \ SOFTWARE \ Wow5432Node \微软\喷气\ 4.0 \发动机\ EXCEL 将值TypeGuessRows设置为零
答案 1 :(得分:0)
似乎没有办法让这项工作始终如一。我想到的工作是在Excel工作簿中的ThreeCode列中添加1000。然后,您就可以将数据导入数据集。然后,当读出数据时,您只需剥离“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();
'card'和'3dig'是要填充的类和字段。 'code'是4位数据集数据。