自动检测分隔符、可排序表格、搜索过滤、数据统计、导出多种格式。">

CSVViewer

CSV / JSON 数据查看器 · 可排序表格 · 搜索过滤 · 数据统计 · 多格式导出

📄 点击上传 .csv 或 .json 文件
(function(){'use strict';var i18n={currentLang:'zh',fallbackLang:'zh',translations:{zh:{page_title:'CSVViewer · CSV/JSON 数据查看器 — 在线表格浏览工具',app_name:'CSVViewer',subtitle:'CSV / JSON 数据查看器 · 可排序表格 · 搜索过滤 · 数据统计 · 多格式导出',sep_comma:'逗号',sep_tab:'制表符',sep_semicolon:'分号',sep_auto:'自动检测',load_sample:'加载示例数据',parse_data:'解析数据',data_label:'粘贴 CSV / TSV / JSON 数据,或上传文件',upload_hint:'📄 点击上传 .csv 或 .json 文件',search_placeholder:'🔍 搜索过滤...',export_json:'导出 JSON',export_markdown:'导出 Markdown',export_html:'导出 HTML',table_title:'数据表格',stats_title:'数据统计',no_match:'无匹配数据',no_data_export:'无数据可导出',paste_data:'请粘贴数据或上传文件',no_parsed:'未解析到数据',exported_json:'已导出 JSON',exported_markdown:'已导出 Markdown',exported_html:'已导出 HTML 表格',privacy:'隐私政策',record_count:'{count} 条记录,共 {total} 条',total_rows:'总行数',total_columns:'总列数',empty_rate:'空值 {rate}%',type_text:'文本',type_number:'数字',switch_to_en:'English',switch_to_zh:'中文'},en:{page_title:'CSVViewer · CSV/JSON Data Viewer — Online Table Browser',app_name:'CSVViewer',subtitle:'CSV / JSON Data Viewer · Sortable Table · Search · Stats · Multi-format Export',sep_comma:'Comma',sep_tab:'Tab',sep_semicolon:'Semicolon',sep_auto:'Auto Detect',load_sample:'Load Sample',parse_data:'Parse',data_label:'Paste CSV / TSV / JSON data, or upload a file',upload_hint:'📄 Click to upload .csv or .json file',search_placeholder:'🔍 Search & filter...',export_json:'Export JSON',export_markdown:'Export Markdown',export_html:'Export HTML',table_title:'Data Table',stats_title:'Statistics',no_match:'No matching records',no_data_export:'No data to export',paste_data:'Please paste data or upload a file',no_parsed:'No data parsed',exported_json:'Exported JSON',exported_markdown:'Exported Markdown',exported_html:'Exported HTML table',privacy:'Privacy Policy',record_count:'{count} rows, {total} total',total_rows:'Total Rows',total_columns:'Total Columns',empty_rate:'Empty {rate}%',type_text:'Text',type_number:'Number',switch_to_en:'中文',switch_to_zh:'English'}};function __(key,params){var t=i18n.translations[i18n.currentLang];var v=t&&t[key];if(v===undefined){v=i18n.translations[i18n.fallbackLang][key];}if(v===undefined){v=key;}if(params){for(var p in params){v=v.replace('{'+p+'}',params[p]);}}return v;}function setLanguage(lang){i18n.currentLang=lang;applyTranslations();var btn=document.querySelector('.lang-btn');if(btn){btn.innerHTML=(lang==='zh'?'🌐English':'🌐中文');}localStorage.setItem('csvviewer_lang',lang);}function applyTranslations(){var els=document.querySelectorAll('[data-i18n]');els.forEach(function(el){var key=el.getAttribute('data-i18n');var trans=__(key);if(trans!==null&&trans!==key){if(el.tagName==='TITLE'){document.title=trans;}else if(el.tagName==='META'){el.setAttribute('content',trans);}else{el.textContent=trans;}}});var phEls=document.querySelectorAll('[data-i18n-placeholder]');phEls.forEach(function(el){var key=el.getAttribute('data-i18n-placeholder');var trans=__(key);if(trans!==null&&trans!==key){el.setAttribute('placeholder',trans);}});var infoEl=document.getElementById('tableInfo');if(infoEl&&typeof currentData!=='undefined'){var count=currentData.length;var filtered=document.querySelectorAll('.data-table tbody tr').length;infoEl.textContent='('+__('record_count',{count:filtered,total:count})+')';}var statsGrid=document.getElementById('statsGrid');if(statsGrid&&typeof currentHeaders!=='undefined'){renderStats();}}function initI18n(){var saved=localStorage.getItem('csvviewer_lang');var lang=navigator.language&&navigator.language.startsWith('en')?'en':'zh';if(saved)lang=saved;setLanguage(lang);var header=document.querySelector('.header');if(header){var btn=document.createElement('button');btn.className='lang-btn';btn.setAttribute('aria-label','Switch Language');btn.style.cssText='position:fixed;top:16px;right:16px;z-index:200;background:rgba(255,255,255,0.08);border:1px solid rgba(255,255,255,0.12);border-radius:10px;padding:8px 14px;color:#fff;font-size:13px;font-weight:500;cursor:pointer;font-family:inherit;transition:background 0.3s,transform 0.2s;display:flex;align-items:center;gap:6px';btn.innerHTML=(lang==='zh'?'🌐English':'🌐中文');btn.addEventListener('click',function(){var newLang=i18n.currentLang==='zh'?'en':'zh';setLanguage(newLang);});document.body.appendChild(btn);}}document.addEventListener('DOMContentLoaded',function(){initI18n();});})();