在 C# 中解析 Excel 文件时,单元格似乎在 255 个字符处被截断……我该如何阻止这种情况?

StackOverflow https://stackoverflow.com/questions/926453

我正在使用 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\

更改TypeGuessRows0ImportMixedTypes该键下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 字符。

如果这是真的,那么一定有办法获取这些数据。这里有两件事需要考虑。

  1. 过去,我在连接字符串中使用“IMEX=1”选项来处理包含显示为空的混合数据的列。虽然可能性不大,但你可以尝试一下。

  2. 您可以将文件导出到制表符分隔的平面文件吗?恕我直言,这是处理 Excel 数据的最可靠方法,因为 Excel 确实有很多问题。

的SpreadsheetGear用于.NET 可读写(和更多)XLS和XLSX工作簿和支持相同限制为Excel文本 - 换句话说,它只是工作。如果你想给它一个尝试有一个免费的评估。

声明:我自己的SpreadsheetGear LLC

关于过去后,我也使用的SpreadsheetGear和发现它也从每个小区限制的255个字符从旧XLS(未XLSX)格式读取时受到影响。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top