在 C# 中解析 Excel 文件时,单元格似乎在 255 个字符处被截断……我该如何阻止这种情况?
-
06-09-2019 - |
题
我正在使用 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] };
这工作完美, 但 如果单元格中的长度超过 255 个字符,它将被截断。知道我做错了什么吗?谢谢。
编辑:当查看Excel工作表时,它显示的字符远多于255个,所以我不认为工作表本身有限制。
解决方案
单从主题的快速谷歌搜索,看来这是Excel的一个限制。
修改强>:可能的解决方法(不幸的是在VB)
其他提示
解决方案!
我今天这个一直缠斗为好。我终于得到它通过分析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\
更改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\";");
参考
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个字符,或者必须 增加采样的行数 驾驶员以包括这样的行。您 可以增加行数 通过增加采样值 下TypeGuessRows HKEY_LOCAL_MACHINE \ SOFTWARE \微软\喷气\ 4.0 \发动机\ EXCEL 注册表项....
我也碰到这个来了,这对我工作的解决方案是与长文本的细胞移动到电子表格的顶部。
我发现在一个论坛上描述了这个问题这条评论
这是与Jet OLEDB提供商的问题。它着眼于第一的 8行强>结果 的 电子表格以确定每列中的数据类型。如果列不结果 不含 字段值超过256个字符中的第一个<强> 8行,然后它假定,点击 数据类型 是文字,其中有256字符上限,下面的知识库文章已点击 更多 关于此问题的信息: http://support.microsoft.com/kb/281517
希望这有助于别人!
您是否尝试过将电子表格中的列数据类型设置为文本?我相信这样做将使单元格包含超过 255 个字符。
编辑]值得 这个对话框 与 MS-Excel 团队的合作是一本有趣的读物。在底部的评论部分,他们对 255 的截止点进行了一些讨论。他们说 Excel 12 可以支持每个单元格 32k 字符。
如果这是真的,那么一定有办法获取这些数据。这里有两件事需要考虑。
过去,我在连接字符串中使用“IMEX=1”选项来处理包含显示为空的混合数据的列。虽然可能性不大,但你可以尝试一下。
您可以将文件导出到制表符分隔的平面文件吗?恕我直言,这是处理 Excel 数据的最可靠方法,因为 Excel 确实有很多问题。
的SpreadsheetGear用于.NET 可读写(和更多)XLS和XLSX工作簿和支持相同限制为Excel文本 - 换句话说,它只是工作。如果你想给它一个尝试有一个免费的评估。
声明:我自己的SpreadsheetGear LLC
关于过去后,我也使用的SpreadsheetGear和发现它也从每个小区限制的255个字符从旧XLS(未XLSX)格式读取时受到影响。