CSV 查看与清洗
数据互转
正在载入
正在加载工具
正在准备工具,暂时无法估算剩余时间。
本工具的全部运算都发生在你的浏览器中,输入内容不会发送到任何服务器。
关于这个工具
先查看 CSV 或 TSV 导出表,再决定哪些数据需要修改。按位置选择同一组值处理列,去除两端空白、替换已有空单元格或指定文本,并按需用明确的输入和输出格式统一日期。可选的空行删除和组合键去重在这些值变换之后执行。对照原始与清洗后预览,检查各步骤计数和无效日期示例,再下载结果。原始解析数据始终保持不变,可重置规则后重新处理。整个流程在浏览器本地 Worker 中运行。
常见用途
- 清理客户导出表中的姓名和编号两端空白,替换已知的 N/A 标记,并在导入其他系统前核对受影响的单元格。
- 将已知的 DD/MM/YYYY 日期列统一成 YYYY-MM-DD,保留并报告不可能的日期,不猜测日月顺序或转换时区。
- 删除整行为空的记录,按组合键保留首条、末条或删除全部重复组,同时区分 001 与 1 并保持原始行顺序。
使用方法
- 1.粘贴分隔文本或选择 UTF-8 文件,明确选择逗号或制表符,以及首条记录是否为表头。启用修改前先检查解析表格;允许空表头、重复表头和长短不齐的行。按列位置选择字段,避免重名造成歧义。
- 2.只启用需要的规则。同一组所选列会接受全部已启用的值处理:去空白、空单元格/精确文本替换、日期转换。按需指定替换字符串和日期输入/输出格式。启用日期时只应选择日期列;同组列中其他非空文本会被报告为无效日期。执行顺序固定为去空白 → 替换 → 日期 → 删除空行 → 去重。替换按整个单元格区分大小写精确匹配,替换内容可以为空字符串。
- 3.去重时选择一个或多个键列,再选择保留首条、保留末条或删除重复键组的全部行。执行清洗,对照前后数据和各步骤计数,检查保持不变的无效日期及保留行的原始行号。输入或设置变更会使旧结果失效;重新执行始终从原始输入开始。重置会移除清洗规则,而不是对结果执行逆向变换。 下载清洗后的 CSV/TSV 或包含行数组的 JSON 报告。输入时的表头设置决定 CSV/TSV 是否包含未经修改的原始表头;无表头输入不会在导出时新增表头。数据列保持原顺序。用于表格软件查看时应保留公式防护;原始导出须明确选择并注意警告。JSON 保留解析后的字符串及不等长的行。清空会从工具中移除当前输入和结果。
CSV 清洗实用示例
仅去除所选列两端空白
{
"input": "id,name,note\n 001 , Alice , keep \n1,Bob, as is ",
"parseOptions": {
"delimiter": ",",
"header": true
},
"options": {
"columns": [
0,
1
],
"trim": true,
"nulls": {
"enabled": false,
"tokens": [],
"replaceEmpty": false,
"replacement": ""
},
"dates": {
"enabled": false,
"inputFormat": "YYYY-MM-DD",
"outputFormat": "YYYY-MM-DD"
},
"removeEmptyRows": false,
"dedupe": {
"enabled": false,
"columns": [],
"keep": "first"
}
}
}{
"headers": [
"id",
"name",
"note"
],
"hasHeader": true,
"columnCount": 3,
"rows": [
[
"001",
"Alice",
" keep "
],
[
"1",
"Bob",
" as is "
]
],
"summary": {
"inputRows": 2,
"outputRows": 2,
"columns": 3,
"trimmedCells": 2,
"replacedCells": 0,
"convertedDates": 0,
"invalidDates": 0,
"emptyRowsRemoved": 0,
"duplicateRowsRemoved": 0,
"duplicateGroups": 0,
"changedCells": 2,
"changedRows": 1
},
"sourceRows": [
1,
2
]
}选择第 1、2 列(示例中的零基索引为 0、1)。id 和 name 两端的不换行空格、全角空格被去除;未选择的 note 保留空白,编号仍为字符串 001。
区分空单元格、指定标记与缺失
{
"input": "id,value\n1,\n2,N/A\n3,null\n4\n5,n/a",
"parseOptions": {
"delimiter": ",",
"header": true
},
"options": {
"columns": [
1
],
"trim": false,
"nulls": {
"enabled": true,
"tokens": [
"N/A"
],
"replaceEmpty": true,
"replacement": "(missing)"
},
"dates": {
"enabled": false,
"inputFormat": "YYYY-MM-DD",
"outputFormat": "YYYY-MM-DD"
},
"removeEmptyRows": false,
"dedupe": {
"enabled": false,
"columns": [],
"keep": "first"
}
}
}{
"headers": [
"id",
"value"
],
"hasHeader": true,
"columnCount": 2,
"rows": [
[
"1",
"(missing)"
],
[
"2",
"(missing)"
],
[
"3",
"null"
],
[
"4"
],
[
"5",
"n/a"
]
],
"summary": {
"inputRows": 5,
"outputRows": 5,
"columns": 2,
"trimmedCells": 0,
"replacedCells": 2,
"convertedDates": 0,
"invalidDates": 0,
"emptyRowsRemoved": 0,
"duplicateRowsRemoved": 0,
"duplicateGroups": 0,
"changedCells": 2,
"changedRows": 2
},
"sourceRows": [
1,
2,
3,
4,
5
]
}已有空单元格和大写 N/A 替换成 (missing)。第 4 行缺失的行尾字段仍然缺失;字面文本 null 和小写 n/a 不匹配指定标记,保持原字符串。
转换日优先日期,不自动修复无效值
{
"input": "id,date\nA,29/02/2024\nB,29/02/2023\nC,31/04/2024\nD,01/02/2024\nE,\nF,1/2/2024",
"parseOptions": {
"delimiter": ",",
"header": true
},
"options": {
"columns": [
1
],
"trim": false,
"nulls": {
"enabled": false,
"tokens": [],
"replaceEmpty": false,
"replacement": ""
},
"dates": {
"enabled": true,
"inputFormat": "DD/MM/YYYY",
"outputFormat": "YYYY-MM-DD"
},
"removeEmptyRows": false,
"dedupe": {
"enabled": false,
"columns": [],
"keep": "first"
}
}
}{
"headers": [
"id",
"date"
],
"hasHeader": true,
"columnCount": 2,
"rows": [
[
"A",
"2024-02-29"
],
[
"B",
"29/02/2023"
],
[
"C",
"31/04/2024"
],
[
"D",
"2024-02-01"
],
[
"E",
""
],
[
"F",
"1/2/2024"
]
],
"summary": {
"inputRows": 6,
"outputRows": 6,
"columns": 2,
"trimmedCells": 0,
"replacedCells": 0,
"convertedDates": 2,
"invalidDates": 3,
"emptyRowsRemoved": 0,
"duplicateRowsRemoved": 0,
"duplicateGroups": 0,
"changedCells": 2,
"changedRows": 2
},
"sourceRows": [
1,
2,
3,
4,
5,
6
]
}2024 年闰日和 2 月 1 日成功转换。2023 年闰日、4 月 31 日及位数不足的 1/2/2024 保持原样,共计 3 个无效单元格。空字符串跳过,不计为无效日期。
明确选择月优先含义
{
"input": "date\n01/02/2024\n12/31/2024",
"parseOptions": {
"delimiter": ",",
"header": true
},
"options": {
"columns": [
0
],
"trim": false,
"nulls": {
"enabled": false,
"tokens": [],
"replaceEmpty": false,
"replacement": ""
},
"dates": {
"enabled": true,
"inputFormat": "MM/DD/YYYY",
"outputFormat": "YYYY-MM-DD"
},
"removeEmptyRows": false,
"dedupe": {
"enabled": false,
"columns": [],
"keep": "first"
}
}
}{
"headers": [
"date"
],
"hasHeader": true,
"columnCount": 1,
"rows": [
[
"2024-01-02"
],
[
"2024-12-31"
]
],
"summary": {
"inputRows": 2,
"outputRows": 2,
"columns": 1,
"trimmedCells": 0,
"replacedCells": 0,
"convertedDates": 2,
"invalidDates": 0,
"emptyRowsRemoved": 0,
"duplicateRowsRemoved": 0,
"duplicateGroups": 0,
"changedCells": 2,
"changedRows": 2
},
"sourceRows": [
1,
2
]
}这里选择 MM/DD/YYYY,01/02/2024 表示 1 月 2 日。若选择 DD/MM/YYYY,同一字符串会表示 2 月 1 日。工具不会推断数据来源采用哪种约定。
检查世纪闰年与四位年份范围
{
"input": "date\n0001/01/01\n2000/02/29\n1900/02/29\n0000/01/01\n9999/12/31",
"parseOptions": {
"delimiter": ",",
"header": true
},
"options": {
"columns": [
0
],
"trim": false,
"nulls": {
"enabled": false,
"tokens": [],
"replaceEmpty": false,
"replacement": ""
},
"dates": {
"enabled": true,
"inputFormat": "YYYY/MM/DD",
"outputFormat": "DD/MM/YYYY"
},
"removeEmptyRows": false,
"dedupe": {
"enabled": false,
"columns": [],
"keep": "first"
}
}
}{
"headers": [
"date"
],
"hasHeader": true,
"columnCount": 1,
"rows": [
[
"01/01/0001"
],
[
"29/02/2000"
],
[
"1900/02/29"
],
[
"0000/01/01"
],
[
"31/12/9999"
]
],
"summary": {
"inputRows": 5,
"outputRows": 5,
"columns": 1,
"trimmedCells": 0,
"replacedCells": 0,
"convertedDates": 3,
"invalidDates": 2,
"emptyRowsRemoved": 0,
"duplicateRowsRemoved": 0,
"duplicateGroups": 0,
"changedCells": 3,
"changedRows": 3
},
"sourceRows": [
1,
2,
3,
4,
5
]
}支持 0001 和 9999 年。2000 年是闰年,1900 年不是;0000 年超出本工具的日期范围。所选输出格式将日期置于月之前,不涉及任何时区。
去空白后再删除整条空记录
{
"input": "a,b\n , \n,\n,keep\nx",
"parseOptions": {
"delimiter": ",",
"header": true
},
"options": {
"columns": [
0,
1
],
"trim": true,
"nulls": {
"enabled": false,
"tokens": [],
"replaceEmpty": false,
"replacement": ""
},
"dates": {
"enabled": false,
"inputFormat": "YYYY-MM-DD",
"outputFormat": "YYYY-MM-DD"
},
"removeEmptyRows": true,
"dedupe": {
"enabled": false,
"columns": [],
"keep": "first"
}
}
}{
"headers": [
"a",
"b"
],
"hasHeader": true,
"columnCount": 2,
"rows": [
[
"",
"keep"
],
[
"x"
]
],
"summary": {
"inputRows": 4,
"outputRows": 2,
"columns": 2,
"trimmedCells": 2,
"replacedCells": 0,
"convertedDates": 0,
"invalidDates": 0,
"emptyRowsRemoved": 2,
"duplicateRowsRemoved": 0,
"duplicateGroups": 0,
"changedCells": 2,
"changedRows": 1
},
"sourceRows": [
3,
4
]
}第一条数据行去空白后全为空,第二条原本就是空行,因此删除两条。第三条仍有 keep,第四条虽短但有 x,均保留,原始数据行号为 3、4。
按固定顺序处理,理解逐步计数
{
"input": "date,note\n 01/02/2024 ,first\nN/A,replacement\n,\n01/02/2024,last",
"parseOptions": {
"delimiter": ",",
"header": true
},
"options": {
"columns": [
0
],
"trim": true,
"nulls": {
"enabled": true,
"tokens": [
"N/A"
],
"replaceEmpty": false,
"replacement": "01/02/2024"
},
"dates": {
"enabled": true,
"inputFormat": "DD/MM/YYYY",
"outputFormat": "YYYY-MM-DD"
},
"removeEmptyRows": true,
"dedupe": {
"enabled": true,
"columns": [
0
],
"keep": "first"
}
}
}{
"headers": [
"date",
"note"
],
"hasHeader": true,
"columnCount": 2,
"rows": [
[
"2024-02-01",
"first"
]
],
"summary": {
"inputRows": 4,
"outputRows": 1,
"columns": 2,
"trimmedCells": 1,
"replacedCells": 1,
"convertedDates": 3,
"invalidDates": 0,
"emptyRowsRemoved": 1,
"duplicateRowsRemoved": 2,
"duplicateGroups": 1,
"changedCells": 3,
"changedRows": 3
},
"sourceRows": [
1
]
}只选择 date 列。先去空白、替换 N/A,再转换日期,因此第 1、2、4 行得到相同日期键。第 3 行为空而被删除,保留首条去重最终留下第 1 行。即使最后只有一行,日期转换仍计 3 次;各步骤计数会重叠。
保留末条,同时维持原始顺序
{
"input": "key,value\nA,first\nB,middle\nA,last\nC,tail\nB,final",
"parseOptions": {
"delimiter": ",",
"header": true
},
"options": {
"columns": [],
"trim": false,
"nulls": {
"enabled": false,
"tokens": [],
"replaceEmpty": false,
"replacement": ""
},
"dates": {
"enabled": false,
"inputFormat": "YYYY-MM-DD",
"outputFormat": "YYYY-MM-DD"
},
"removeEmptyRows": false,
"dedupe": {
"enabled": true,
"columns": [
0
],
"keep": "last"
}
}
}{
"headers": [
"key",
"value"
],
"hasHeader": true,
"columnCount": 2,
"rows": [
[
"A",
"last"
],
[
"C",
"tail"
],
[
"B",
"final"
]
],
"summary": {
"inputRows": 5,
"outputRows": 3,
"columns": 2,
"trimmedCells": 0,
"replacedCells": 0,
"convertedDates": 0,
"invalidDates": 0,
"emptyRowsRemoved": 0,
"duplicateRowsRemoved": 2,
"duplicateGroups": 2,
"changedCells": 0,
"changedRows": 0
},
"sourceRows": [
3,
4,
5
]
}A 的末条为原始第 3 行,B 的末条为第 5 行,唯一的 C 位于第 4 行。因此输出为 A、C、B,按保留行的原始顺序排列,而不是按键分组输出 A、B、C。
删除重复键组中的全部行
{
"input": "key,value\nA,first\nB,middle\nA,last\nC,tail\nB,final",
"parseOptions": {
"delimiter": ",",
"header": true
},
"options": {
"columns": [],
"trim": false,
"nulls": {
"enabled": false,
"tokens": [],
"replaceEmpty": false,
"replacement": ""
},
"dates": {
"enabled": false,
"inputFormat": "YYYY-MM-DD",
"outputFormat": "YYYY-MM-DD"
},
"removeEmptyRows": false,
"dedupe": {
"enabled": true,
"columns": [
0
],
"keep": "none"
}
}
}{
"headers": [
"key",
"value"
],
"hasHeader": true,
"columnCount": 2,
"rows": [
[
"C",
"tail"
]
],
"summary": {
"inputRows": 5,
"outputRows": 1,
"columns": 2,
"trimmedCells": 0,
"replacedCells": 0,
"convertedDates": 0,
"invalidDates": 0,
"emptyRowsRemoved": 0,
"duplicateRowsRemoved": 4,
"duplicateGroups": 2,
"changedCells": 0,
"changedRows": 0
},
"sourceRows": [
4
]
}none 策略表示重复组不保留任何成员,不是关闭去重。两条 A 和两条 B 都被删除,只保留键唯一的 C 行。
组合键保留字符串、前导零与缺失差异
{
"input": "region,id\nnorth,001\nnorth,1\nsouth,001\nnorth,001\nnorth\nnorth,\na|b,c\na,b|c",
"parseOptions": {
"delimiter": ",",
"header": true
},
"options": {
"columns": [],
"trim": false,
"nulls": {
"enabled": false,
"tokens": [],
"replaceEmpty": false,
"replacement": ""
},
"dates": {
"enabled": false,
"inputFormat": "YYYY-MM-DD",
"outputFormat": "YYYY-MM-DD"
},
"removeEmptyRows": false,
"dedupe": {
"enabled": true,
"columns": [
0,
1
],
"keep": "first"
}
}
}{
"headers": [
"region",
"id"
],
"hasHeader": true,
"columnCount": 2,
"rows": [
[
"north",
"001"
],
[
"north",
"1"
],
[
"south",
"001"
],
[
"north"
],
[
"north",
""
],
[
"a|b",
"c"
],
[
"a",
"b|c"
]
],
"summary": {
"inputRows": 8,
"outputRows": 7,
"columns": 2,
"trimmedCells": 0,
"replacedCells": 0,
"convertedDates": 0,
"invalidDates": 0,
"emptyRowsRemoved": 0,
"duplicateRowsRemoved": 1,
"duplicateGroups": 1,
"changedCells": 0,
"changedRows": 0
},
"sourceRows": [
1,
2,
3,
5,
6,
7,
8
]
}只有第 4 行重复了完整的 north + 001 键。001 与 1 不同;north 配缺失 id 与 north 配空 id 也不同。[a|b, c] 和 [a, b|c] 是不同元组,不会因拼接分隔符而冲突。
保留重名表头、不等长行与引号文本
{
"input": ",name,name\n001,\"A, \"\"B\"\"\",\"line1\nline2\"\n002,x\n003,,tail,extra",
"parseOptions": {
"delimiter": ",",
"header": true
},
"options": {
"columns": [],
"trim": false,
"nulls": {
"enabled": false,
"tokens": [],
"replaceEmpty": false,
"replacement": ""
},
"dates": {
"enabled": false,
"inputFormat": "YYYY-MM-DD",
"outputFormat": "YYYY-MM-DD"
},
"removeEmptyRows": false,
"dedupe": {
"enabled": false,
"columns": [],
"keep": "first"
}
}
}{
"headers": [
"",
"name",
"name"
],
"hasHeader": true,
"columnCount": 4,
"rows": [
[
"001",
"A, \"B\"",
"line1\nline2"
],
[
"002",
"x"
],
[
"003",
"",
"tail",
"extra"
]
],
"summary": {
"inputRows": 3,
"outputRows": 3,
"columns": 4,
"trimmedCells": 0,
"replacedCells": 0,
"convertedDates": 0,
"invalidDates": 0,
"emptyRowsRemoved": 0,
"duplicateRowsRemoved": 0,
"duplicateGroups": 0,
"changedCells": 0,
"changedRows": 0
},
"sourceRows": [
1,
2,
3
]
}空表头和重复表头保持原样。尽管表头只有三列,最长数据行仍使表格宽度为四列。引号中的逗号、双写引号和内嵌换行解析为单元格文本,存储结果不会为短行补空值。
按位置清理无表头 TSV
{
"input": "001\t x \n1\ty\n001\t x ",
"parseOptions": {
"delimiter": "\t",
"header": false
},
"options": {
"columns": [
1
],
"trim": true,
"nulls": {
"enabled": false,
"tokens": [],
"replaceEmpty": false,
"replacement": ""
},
"dates": {
"enabled": false,
"inputFormat": "YYYY-MM-DD",
"outputFormat": "YYYY-MM-DD"
},
"removeEmptyRows": false,
"dedupe": {
"enabled": true,
"columns": [
0
],
"keep": "first"
}
}
}{
"headers": [
"column1",
"column2"
],
"hasHeader": false,
"columnCount": 2,
"rows": [
[
"001",
"x"
],
[
"1",
"y"
]
],
"summary": {
"inputRows": 3,
"outputRows": 2,
"columns": 2,
"trimmedCells": 2,
"replacedCells": 0,
"convertedDates": 0,
"invalidDates": 0,
"emptyRowsRemoved": 0,
"duplicateRowsRemoved": 1,
"duplicateGroups": 1,
"changedCells": 2,
"changedRows": 2
},
"sourceRows": [
1,
2
]
}明确选择制表符,并保留首条记录为数据。生成的 column1、column2 只是列标签,不会插入 CSV 表头。去除第 2 列两端空白后按第 1 列去重,001 与 1 仍是不同编号。
仅在防公式 CSV 导出时添加前缀
{
"input": "=header,value\n=1+1,001\n@cmd,\"line1\nline2\"\n +2,",
"parseOptions": {
"delimiter": ",",
"header": true
},
"options": {
"columns": [],
"trim": false,
"nulls": {
"enabled": false,
"tokens": [],
"replaceEmpty": false,
"replacement": ""
},
"dates": {
"enabled": false,
"inputFormat": "YYYY-MM-DD",
"outputFormat": "YYYY-MM-DD"
},
"removeEmptyRows": false,
"dedupe": {
"enabled": false,
"columns": [],
"keep": "first"
}
},
"export": {
"format": "csv",
"safe": true,
"delimiter": ","
}
}{
"headers": [
"=header",
"value"
],
"hasHeader": true,
"columnCount": 2,
"rows": [
[
"=1+1",
"001"
],
[
"@cmd",
"line1\nline2"
],
[
" +2",
""
]
],
"summary": {
"inputRows": 3,
"outputRows": 3,
"columns": 2,
"trimmedCells": 0,
"replacedCells": 0,
"convertedDates": 0,
"invalidDates": 0,
"emptyRowsRemoved": 0,
"duplicateRowsRemoved": 0,
"duplicateGroups": 0,
"changedCells": 0,
"changedRows": 0
},
"sourceRows": [
1,
2,
3
],
"exported": "\"'=header\",\"value\"\r\n\"'=1+1\",\"001\"\r\n\"'@cmd\",\"line1\nline2\"\r\n\"' +2\",\"\""
}清洗结果仍保留原字符串;防公式 CSV 序列化时才给类似公式的表头和单元格添加单引号,包括前面带空格的 +2。所有字段加双引号,记录间使用 CRLF。此防护不能强制表格软件将 001 保留为文本。
CSV 清洗常见错误
- 只看重复的表头名称,没有核对实际列位置。
- 误以为去空白会删除内部空格、零宽字符或全部 Unicode 格式字符。
- 将行尾缺失字段、空字符串和字面文本 null 当作同一值。
- 为日/月/年数据选择 MM/DD/YYYY,或以为无效日期会被自动修复。
- 忽略去空白或替换可能让原本不同的去重键变得相同。
- 希望保留一条代表记录,却选择删除全部重复组。
- 直接相加各步骤计数,误以为每个受影响单元格或删除行只计数一次。
- 在表格软件中打开不可信的原始 CSV,或以为双引号能保留编号的前导零。
限制与说明
- 输入上限为 2 MiB 文件字节和 2 MiB 解码后的 UTF-8 文本、10,000 条数据行、128 列和 200,000 个单元格。导出及中间变换数据预算上限为 12 MiB;过大的替换值可能在后续删除行之前就被拒绝。超过限制会阻止操作,不会静默截断。Worker、有限预览、取消和超时机制可减少负载,但并非严格的浏览器内存隔离。较大文件请使用本地数据工具。 分隔符需明确选择逗号或制表符,不自动检测。UTF-8 文件可带 BOM;错误引号或无效 UTF-8 会报错。支持带引号的分隔符、双写引号、多行字段、空或重复表头、无表头输入及不等长记录。行尾缺失字段仍然缺失,预览中的补白不是新增空值。表头不会被清洗、重命名或去重。
- 去空白使用 ECMAScript trim(),仅处理所选已有单元格两端的空白,包括不换行空格和全角空格;不压缩内部空格,不删除所有不可见字符,不做 Unicode 规范化或大小写转换。替换对去空白后的完整字符串精确匹配,每个命中单元格只替换一次。CSV 没有 null 类型:空文本、缺失单元格以及 null、N/A 等字面字符串各不相同。缺失字段不会被填充;只有明确指定的文本标记才会被替换。 步骤计数仅在该步真正改变字符串时增加;已符合输出格式的有效日期或替换成相同值不算修改。它们不是整个流程中互不重复的单元格总数。同一单元格可能先去空白再替换,所在行最后又被删除。净变更单元格数和行数在删除行之前,以最终规范化值与原值比较。原始输入独立保留,重置与重新执行都以它为起点,修改不会层层累积;不能先处理一组列,再以另一次选择累加处理。这是确定的规则流程,不是多步撤销历史、模糊匹配、数值转换、大小写折叠或自动纠错。
- 日期仅支持 YYYY-MM-DD、DD/MM/YYYY、MM/DD/YYYY、YYYY/MM/DD,要求位数完全一致,且是 0001–9999 年范围内的有效前推公历日期。输入和输出格式必须明确指定;不猜测地区格式,不解析时间戳,不转换时区,也不会自行解释 01/02/2024。无效的所选非空单元格保持原样并计数,提供有限示例;空字符串和缺失单元格跳过。去除两端空白后,带空格的日期可能变为可转换值。
- 删除空行在值规范化之后执行,仅当某行所有已有单元格都为长度为零的字符串时删除。空白字符不等于空字符串,除非所选去空白操作将其去除;替换为非空值可能使该行不再被删除。去重比较此前各步骤处理后的指定位置列组成的元组,保留 001 与 1、缺失与空字符串的区别。首条/末条保留对应成员,删除全部重复组只留下键唯一的行;保留行仍按原始顺序输出。 预览搜索、筛选和排序仅影响显示;导出包含全部保留行,并按原始顺序排列。
- 防公式 CSV 会给类似公式的字段加单引号前缀,因此会改变导出的文本。原始 CSV 在表格软件中打开时可能执行公式;仅用双引号包裹不足以防护,保存后重新打开也可能丢失防护。表格软件还可能重新解释带前导零的编号。需要精确字符串交换时优先选择 JSON 数组;缺失的行尾字段表现为较短数组,不会变为 null。JSON 报告包含 hasHeader、headers、columnCount 和 rows,不会用可能重名的表头把数据转成对象。输入表头设置决定 CSV/TSV 是否输出表头,列顺序保持不变。两种导出都不保留原始引号形式、编码字节或记录换行符。本工具不上传或持久保存输入数据;下载后的文件不再受页面控制。
常见问题
重置能恢复清洗删除的数据吗?
在当前输入仍保留时可以。清洗不会覆盖原始解析行;重置会清除规则和结果,之后可再次查看或处理原始数据。修改规则后重新执行也从原始数据开始。清空会移除输入和结果,并不提供可恢复的编辑历史。
01/02/2024 会转换成什么?
输入选择 DD/MM/YYYY、输出选择 YYYY-MM-DD 时会得到 2024-02-01;输入选择 MM/DD/YYYY 时则得到 2024-01-02。工具不会代替你选择日月顺序。31/02/2024 等不存在的日期保持不变,并计入无效日期。
重复行如何选择和排序?
按位置选择键列;此前清洗步骤完成后,所有选定值组成一个组合键。保留首条取最早的行,保留末条取最后的行,删除全部重复组会删除该组每一行。保留行按原始顺序输出,不按键分组重新排列。001 与 1、缺失与空字符串仍视为不同键值。
防公式 CSV 在所有表格软件中都安全吗?
无法作出通用保证。默认单引号前缀可降低公式解释风险,也会有意改变危险字段。原始导出不含这层防护;表格应用可能重新解释数据,或在保存后丢失防护。应审查不可信数据,需要精确保留字符串时优先使用 JSON。