将 csv 导入 excel 时,有一列数据偶尔会超过 255 个字符。运行文本转列命令时,它会将这些单元格截断为 255 个字符。有没有办法在 excel 2016 中解决这个问题?
答案1
当我复制/粘贴您的字符串时,它只有 281 个字符。因此,我希望它分成两个字符串,一个为 5 个字符,另一个为 275 个字符。
但是,该字符串有些奇怪,似乎会导致旧的“文本到列”向导将其截断为 255 个字符。起初,我以为这可能与各种 Unicode 字符有关,这些字符ZWSP
散落ZWNJ
在各处。但是用空格替换它们仍然会导致同样的截断。
其他 ASCII 文本字符串可以用逗号分隔,即使长度远大于 255。可能是错误?
Get & Transform
但是,在 Excel 2016 中,您可以使用从功能区上的选项卡访问的列拆分工具Data
。如果您已更新版本(例如通过 Office 365),则双击 CSV 文件时可能会打开该工具。如果没有,请使用选择打开文件From Text/CSV
。Get & Transform Data
按照提示操作(它应该显示 Unicode 类型的文件),然后选择逗号进行列拆分。这样做,它会正确拆分。
此外,如果您可以将 csv 行导入到 Excel 中的单行(未拆分),则可以使用选项From Table/Range
导航Get & Transform
到可用的列拆分命令。
编辑:进一步调查显示,如果逗号后面的段的第一个字符是加号 (+)、减号 (-) 或等号 (=),则似乎会触发该错误。
事实证明,解决该错误的另一种方法是指定列被归类为文本(向导的第 3 步)。这对于使用旧版 Excel 的用户可能很有用。
答案2
没有。这是规范中规定的“列宽”的限制:Excel 2016 限制
最好的办法是在导入之前使用某种脚本拆分内容。例如 Python。Stack Overflow 上有很多示例,例如:
https://stackoverflow.com/questions/7111068/split-string-by-count-of-characters
答案3
从 SSIS 导出时我遇到了同样的问题,它会自动截断 255 个字符。
根本原因
Excel 通过考虑前 8 个连续行自动分配列长度限制。因此,如果一列有超过 255 个字符,那么 Excel 将采用该长度,否则将允许默认的 255。
修理
我在第二行的列中添加了 4000 个字符并隐藏了该行。因此 Excel 将把列长度设为 4000。
答案4
raveeshvn
是正确的。
Excel 导入时的默认设置(文本到列功能是导入向导的直接产物,所以...“导入”无论叫什么名字,仍然听起来很美妙...)是查看每列的前 8 行,并决定如何导入数据(你能说“嘿!我这一列的前导 0 去哪儿了?”或“嘿!那一列不是日期,为什么 Excel 要将其导入为日期?”),但导入后如何格式化以进行显示。
您会不时看到有人对导入的时间值列的格式为“分钟:秒”而不是“小时:分钟:秒”感到不满。“结果”意味着他们从未检查过格式或 CSV 中较低的数据(然而……当他们查看前 1、2 或 3 行时,仍然会严厉批评 Excel 只查看了 8 行,而且没有仔细查看)。嗯,30,000 行数据经过排序,因此前 1000 或 2000 行只有分钟和秒,而小时直到第 1,377 行才出现。
所有这些都是这个问题的重要组成部分。
您可以强制 Excel 查看您想要的任意数量的行,但是它会对所有列执行此操作,并且一些导入有数百列,因此查看 2,000 行来捕获该时间问题(通常通过简单的格式更改解决),可能意味着在导入继续之前检查五十万行。
另一种方法是raveshvn
,插入至少一个示例行,迫使 Excel 知道具有更广泛数据范围的列。打开文件后将其删除。
至于实际的 T2C 功能,它在生成内容超过 255 个字符的列时没有任何问题。我已经这样做了几十年,从来没有遇到过困难,我只是用注释中的字符串再次做了一遍。删除它的逗号并在第一个字符后添加一个。Excel 很高兴在第二列中为我提供了 257 个字符。
确实存在这样的功能,但VLOOKUP()
这种方式受到限制。许多导出 CSV 的程序知道这些 CSV 是用于 Excel 的,因此将其导出的字段限制为 255 个字符,并根据需要创建尽可能多的列以导出整个字段(因此有许多导入文件有数百列......)。他们这样做绝对不同于 Excel 将列内容长度限制为 255 个字符!
以下字符串有 4,001 个字符,第二个字符是逗号。T2C 生成一个字符单元格,并在其旁边生成一个 3,999 个字符的单元格:
A,bcdefghijklmnopqrstuvwxy|abcdefghijklmnopqrstuvwxy|abcdefghijklmnopqrstuvwxy|abcdefghijklmnopqrstuvwxy|abcdefghijklmnopqrstuvwxy|abcdefghijklmnopqrstuvwxy|abcdefghijklmnopqrstuvwxy|abcdefghijklmnopqrstuvwxy|abcdefghijklmnopqrstuvwxy|abcdefghijklmnopqrstuvwxy|abcdefghijklmnopqrstuvwxy|abcdefghijklmnopqrstuvwxy|abcdefghijklmnopqrstuvwxy|abcdefghijklmnopqrstuvwxy|abcdefghijkl mnopqrstuvwxy|abcdefghijklmnopqrstuvwxy|abcdefghijklmnopqrstuvwxy|abcdefghijklmnopqrstuvwxy|abcdefghijklmnopqrstuvwxy|abcdefghijklmnopqrstuvwxy|abcdefghijklmnopqrstuvwxy|abcdefghijklmnopqrstuvwxy|abcdefghijklmnopqrstuvwxy|abcdefghijklmnopqrstuvwxy|abcdefghijklmnopqrstuvwxy|abcdefghijklmnopqrstuvwxy|abcdefghijklmnopqrstuvwxy|abcdefghijklmnopqrstuvwxy|abcdefghijklmnopqrstuvw xy|abcdefghijklmnopqrstuvwxy|abcdefghijklmnopqrstuvwxy|abcdefghijklmnopqrstuvwxy|abcdefghijklmnopqrstuvwxy|abcdefghijklmnopqrstuvwxy|abcdefghijklmnopqrstuvwxy|abcdefghijklmnopqrstuvwxy|abcdefghijklmnopqrstuvwxy|abcdefghijklmnopqrstuvwxy|abcdefghijklmnopqrstuvwxy|abcdefghijklmnopqrstuvwxy|abcdefghijklmnopqrstuvwxy|abcdefgh ijklmnopqrstuvwxy|abcdefghijklmnopqrstuvwxy|abcdefghijklmnopqrstuvwxy|abcdefghijklmnopqrstuvwxy|abcdefghijklmnopqrstuvwxy|abcdefghijklmnopqrstuvwxy|abcdefghijklmnopqrstuvwxy|abcdefghijklmnopqrstuvwxy|abcdefghijklmnopqrstuvwxy|abcdefghijklmnopqrstuvwxy|abcdefghijklmnopqrstuvwxy|abcdefghijklmnopqrstuvwxy|abcdefghijklmnopqrstuvwxy tuvwxy|abcdefghijklmnopqrstuvwxy|abcdefghijklmnopqrstuvwxy|abcdefghijklmnopqrstuvwxy|abcdefghijklmnopqrstuvwxy|abcdefghijklmnopqrstuvwxy|abcdefghijklmnopqrstuvwxy|abcdefghijklmnopqrstuvwxy|abcdefghijklmnopqrstuvwxy|abcdefghijklmnopqrstuvwxy|abcdefghijklmnopqrstuvwxy|abcdefghijklmnopqrstuvwxy|abcdefghijklmnopqrstuvwxy|abcdefghijklmnopqrstuvwxy|abcd efghijklmnopqrstuvwxy|abcdefghijklmnopqrstuvwxy|abcdefghijklmnopqrstuvwxy|abcdefghijklmnopqrstuvwxy|abcdefghijklmnopqrstuvwxy|abcdefghijklmnopqrstuvwxy|abcdefghijklmnopqrstuvwxy|abcdefghijklmnopqrstuvwxy|abcdefghijklmnopqrstuvwxy|abcdefghijklmnopqrstuvwxy|abcdefghijklmnopqrstuvwxy|abcdefghijklmnopqrstuvwxy|abcdefghijklmnopqrstuvwxy|abcdefghijklmnopqrstuvwxy pqrstuvwxy|abcdefghijklmnopqrstuvwxy|abcdefghijklmnopqrstuvwxy|abcdefghijklmnopqrstuvwxy|abcdefghijklmnopqrstuvwxy|abcdefghijklmnopqrstuvwxy|abcdefghijklmnopqrstuvwxy|abcdefghijklmnopqrstuvwxy|abcdefghijklmnopqrstuvwxy|abcdefghijklmnopqrstuvwxy|abcdefghijklmnopqrstuvwxy|abcdefghijklmnopqrstuvwxy|abcdefghijklmnopqrstuvwxy| abcdefghijklmnopqrstuvwxy|abcdefghijklmnopqrstuvwxy|abcdefghijklmnopqrstuvwxy|abcdefghijklmnopqrstuvwxy|abcdefghijklmnopqrstuvwxy|abcdefghijklmnopqrstuvwxy|abcdefghijklmnopqrstuvwxy|abcdefghijklmnopqrstuvwxy|abcdefghijklmnopqrstuvwxy|abcdefghijklmnopqrstuvwxy|abcdefghijklmnopqrstuvwxy|abcdefghijklmnopqrstuvwxy|abcdefghijklmnopqrstuvwxy|abcdefghijklmnopqrstuvwxy|abcdefghijklmnopqrstuvwxy|abcdefghijklmnopqrstuvwxy|abcdefghijklmnopqrstuvwxy|abcdefghijklmnopqrstuvwxy|abcdefghijklmnopqrstuvwxy|abcdefghijklmnopqrstuvwxy|abcdefghijklmnopqrstuvwxy|abcdefghijklmnopqrstuvwxy|abcdefghijklmn opqrstuvwxy|abcdefghijklmnopqrstuvwxy|abcdefghijklmnopqrstuvwxy|abcdefghijklmnopqrstuvwxy|abcdefghijklmnopqrstuvwxy|abcdefghijklmnopqrstuvwxy|abcdefghijklmnopqrstuvwxy|abcdefghijklmnopqrstuvwxy|abcdefghijklmnopqrstuvwxy|abcdefghijklmnopqrstuvwxy|abcdefghijklmnopqrstuvwxy|abcdefghijklmnopqrstuvwxy|abcdefghijklmnopqr stuvwxy|abcdefghijklmnopqrstuvwxy|abcdefghijklmnopqrstuvwxy|abcdefghijklmnopqrstuvwxy|abcdefghijklmnopqrstuvwxy|abcdefghijklmnopqrstuvwxy|abcdefghijklmnopqrstuvwxy|abcdefghijklmnopqrstuvwxy|abcdefghijklmnopqrstuvwxy|abcdefghijklmnopqrstuvwxy|abcdefghijklmnopqrstuvwxy|abcdefghijklmnopqrstuv wxy|abcdefghijklmnopqrstuvwxy|abcdefghijklmnopqrstuvwxy|abcdefghijklmnopqrstuvwxy|abcdefghijklmnopqrstuvwxy|abcdefghijklmnopqrstuvwxy|abcdefghijklmnopqrstuvwxy|abcdefghijklmnopqrstuvwxy|abcdefghijklmnopqrstuvwxy|abcdefghijklmnopqrstuvwxy|abcdefghijklmnopqrstuvwxy|abcdefghijklmnopqrstuvwxy|
将该字符串扩展为 36,000 个字符,正如预期的那样,按下Enter会导致 Excel 提交条目并根据 将其截断为 32,767 个字符LEN()
。编辑以删除最后一个字符并将逗号作为第二个字符效果很好。T2C 将其拆分为:1 个字符单元格和 32,759 个字符单元格。有趣的是,丢失了六个字符(逗号作为分隔符消失,留下 32,766 个字符减去左侧单元格中的 1 和右侧单元格中的 32,759 个字符,因此在混乱中丢失了六个字符。但......没有丢失 32,000+ 个。
导入还有其他解决方法,例如将 CSV 重命名为 TXT,然后导入。但这更像是一种解决方法,能够告诉 Excel 列中包含哪种数据,而不是 Excel 导入而不询问问题并让您一团糟。事实并非如此......唯一真正伟大的是 Power Query,因为您可以对文件进行一些很好的处理,然后将其加载到 Excel 中。
或者,你知道,研究如何更改 Excel 中每列分析 8 行的默认值。几年前我做过这件事,但不记得在哪里找到的信息。抱歉大家。然而,我第一次遇到它,是在某些数据程序或其他程序的帮助网站上,为遇到此问题的客户提供帮助。因此,任何使用 SSIS 的人几乎都可以直接从他们的帮助人员那里获得帮助。
奇怪的是,发帖者声称的字符串长度为 374 个字符,但事实并非如此……人们不禁想知道这里还有什么问题。人们至少怀疑,无论他是否知道,他的数据都是以 255 个字符或更少的列传递给他的。但谁知道呢?
对于阅读本文的读者,我显然是在发布日期之后很久才写的,但希望澄清一下,这raveeshvn
是正确的,即问题在于 Excel 在尝试导入/T2C 工作之前每列分析的默认行数。多年来它一直没有改变,有人怀疑在回答这个问题之后的许多年里也不会改变。