nas*_*ski 16 c# linq excel excel-2007 xlsx
我正在使用c#解析asp.net中上传的excel文件(xlsx).我使用以下代码(简化):
string connString = string.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + fileLocation + ";Extended Properties=\"Excel 12.0 Xml;HDR=YES\";");
OleDbDataAdapter adapter = new OleDbDataAdapter("SELECT * FROM [Sheet1$]", connString);
DataSet ds = new DataSet();
adapter.Fill(ds);
adapter.Dispose();
DataTable dt = ds.Tables[0];
var rows = from p in dt.AsEnumerable() select new { desc = p[2] };
Run Code Online (Sandbox Code Playgroud)
这样可以很好地工作,但是如果单元格中有超过255个字符,它将被切断.知道我做错了什么吗?谢谢.
编辑:查看Excel工作表时,它显示超过255个字符,所以我不相信工作表本身是有限的.
And*_*son 16
我今天也一直在争夺这个.在解析Excel电子表格之前,我最终通过修改一些注册表项来实现它.
在解析Excel电子表格之前,必须更新此注册表项:
// Excel 2010
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\14.0\Access Connectivity Engine\Engines\Excel\
or
HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Office\14.0\Access Connectivity Engine\Engines\Excel\
// Excel 2007
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\12.0\Access Connectivity Engine\Engines\Excel\
// Excel 2003
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\4.0\Engines\Excel\
Run Code Online (Sandbox Code Playgroud)
更改TypeGuessRows到0并ImportMixedTypes以Text此项下.您还需要更新连接字符串以包含IMEX=1在扩展属性中:
string connString = string.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + fileLocation + ";Extended Properties=\"Excel 12.0 Xml;HDR=YES;IMEX=1\";");
Run Code Online (Sandbox Code Playgroud)
http://blogs.vertigo.com/personal/aanttila/Blog/archive/2008/03/28/excel-and-csv-reference.aspx
http://msdn.microsoft.com/en-us/library/ms141683.aspx
...字符可能会被截断.要从备注列导入数据而不截断,必须确保至少一个采样行中的备注列包含长度超过255个字符的值,或者必须增加驱动程序采样的行数以包含此类行.您可以通过增加HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\4.0\Engines\Excel注册表项下的TypeGuessRows值来增加采样的行数....
我遇到过这个问题,对我有用的解决方案是将带有长文本的单元格移动到电子表格的顶部。
我在描述该问题的论坛中发现了此评论
这是 Jet OLEDB 提供程序的问题。它查看 电子表格的前8 行
以确定每列中的数据类型。如果该列
的前8 行不包含超过 256 个字符的字段值,则假定
数据类型为文本,字符限制为 256。以下知识库文章提供
了有关此问题的更多信息:http:// support.microsoft.com/kb/281517
希望这对其他人有帮助!