Excel 和 Google Sheets 计算 MySQL 和 LibreOffice 中 .csv 列总数不同

Excel 和 Google Sheets 计算 MySQL 和 LibreOffice 中 .csv 列总数不同

我有一个包含 9273 行的 .csv 文件。

我有一列整数和一列十进制数,其值为 0.0001752。

我使用 Excel 的求和函数计算了这些列的总和,得到了总计 8904671 和 4750.04556。

然后,我使用“LOAD DATA INFILE”将此 .csv 文件导入 MySQL 数据库。该数据库还包含 9273 行数据,但 MySQL SUM 函数返回的列总数为 8603588 和 4432.1793865700。

我很困惑,于是我用 LibreOffice 打开了原始 .csv 文件,并再次计算了各列的总数。结果显示各列的总数为 8603597.8662(整数)和 4432.17938657。

最后,我想看看 Google Sheets 如何处理 .csv 中的数据。如果数据是从 LibreOffice 复制的,它会将列总计为 LibreOffice 值;如果数据是从 Excel 复制的,它会将列总计为 Excel 值。如果我导入纯 .csv,Sheets 还会给出 Excel 总计。但是,除非我选择“将文本转换为数字、日期和公式”选项的“是”,否则 Sheets 根本无法将列总计。

总而言之,对于同一个 .csv,两列的总数为:

MySQL:                    8603588,      4432.1793865700

Excel:                    8904671,      4750.04556

LibreOffice:              8603597.8662, 4432.17938657

Google Sheets from Excel: 8904671,      4750.045587

Google Sheets from Libre: 8603597.866,  4432.179387

Google Sheets from .csv:  8904671,      4750.04556

(Google 表格需要“将文本转换为数字”选项)

哪一组是正确的列总数,为什么相同值的总和会得出不同的总数?

答案1

我找到了问题所在。我的描述中缺少了一件实际上很重要的事情 - .csv 在两列整数之前包含一些带有字符串值的列。

大多数 .csv 行看起来像这样......

  • “某个字符串”、“另一个字符串”、“84711”、“1.41128526”

然而,我最终找到了如下这样的一行......

  • “某些字符串”,“另一个字符串”,“35091”,“37.82739618”

Excel 正确读取了上面两行,均为 4 列。

但是,LibreOffice 仅将其读取为 3 列,并将“Some-“String””,“Another String”视为一列而不是两列。

令我惊讶的是,在第一个字符串包含双引号的情况下,LibreOffice 和 MySQL 的“LOAD DATA INFILE”均未将逗号视为新列的分隔符,而 Excel 却这样做了。这也解释了为什么在 Libre 和 MySQL 中,原本应该只包含整数的列最终变成了十进制数,因为值列都向左移动了一列。

相关内容