JavaScript 解析 CSV Excel 文件
javascript to parse csv excel file
我正在尝试解析我在Excel中创建的CSV文件。我想用它来更新我的谷歌地图。这个谷歌地图在我正在使用Eclipse for Android开发的移动应用程序中。
老实说,我不确定如何编写JavaScript。任何帮助将不胜感激。我很乐意归功于你的工作。
我只想在用户点击执行以下操作的按钮时运行一些 JavaScript:
- 定位用户当前位置(我已经完成了这部分!
- 查找在 中输入的附近位置。CSV Excel 文件,通过解析 ..CSV
- 在每个位置通知气泡内显示一个小链接,上面写着"导航",当用户单击它时,会打开 Google 地图应用程序并开始将用户从用户当前位置(地理位置)导航到该位置。
这是我完成此应用程序所需的唯一部分。因此,再一次,任何帮助都将不胜感激。谢谢大家!
老实说,我一直在解决这个问题。CSV格式不是为了便于解析,即使使用复杂的正则表达式也很难解析。
老实说,最好的办法是将其导入 FormSite 或 PHPMyAdmin,然后使用比","更容易解析的自定义分隔符重新导出文档。 我经常使用"%%"作为字段分隔符,一切都像一个魅力。
不知道这是否有帮助,但看看 http://www.randomactsofsentience.com/2012/04/csv-handling-in-javascript.html 是否有帮助......
附加:除了上面链接的解决方案(我的偏好)之外,我还使用了大量堆叠的正则表达式来标记 CSV,但针对自定义错误状态进行修改并不容易......
看起来很重,但仍然只需要几毫秒:
function csvSplit(csv){
csv = csv.replace(/'r'n/g,''n')
var rows = csv.split("'n");
for (var i=0; i<rows.length; i++){
var row = rows[i];
rows[i] = new Array();
row = row.replace(/&/g, "&");
row = row.replace(/''''/g, "\");
row = row.replace(/''"/g, """);
row = row.replace(/'''/g, "'");
row = row.replace(/'',/g, ",");
row = row.replace(/@/g, "@");
row = row.replace(/'?/g, "?");
row = row.replace(/"([^"]*)"/g, "@$1'?");
while (row.match(/@([^'?]*),([^'?]*)'?/)){
row = row.replace(/@([^'?]*),([^'?]*)'?/g, "@$1,$2?");
}
row = row.replace(/['?@]/g, "");
row = row.replace(/''([^'']*)''/g, "@$1'?");
while (row.match(/@([^'?]*),([^'?]*)'?/)){
row = row.replace(/@([^'?]*),([^'?]*)'?/g, "@$1,$2?");
}
row = row.replace(/['?@]/g, "");
row = row.split(",")
for (var j=0; j<row.length; j++){
col = row[j];
col = col.replace(/?/g, "'?");
col = col.replace(/@/g, "@");
col = col.replace(/,/g, ",");
col = col.replace(/'/g, '''');
col = col.replace(/"/g, ''"');
col = col.replace(/\/g, '''');
col = col.replace(/&/g, "&");
row[j]=col;
}
rows[i] = row;
}
return rows;
}
我遇到了这个问题,这就是为什么我必须提出这个答案,我在npm上发现了一个名为masala解析器的东西,它确实是一个解析器组合器。但是它还没有在浏览器上运行,这就是我使用此分支的原因,代码保持不变。请阅读它的文档以了解代码的解析器端。
import ('https://cdn.statically.io/gh/kreijstal-contributions/masala-parser/Kreijstal-patch-1/src/lib/index.js').then(({
C,
N,
F,
Streams
}) => {
var CSV = (delimeter, eol) => {
//parses anything beween a string converts "" into "
var innerstring = F.try(C.string('""').returns("'"")).or(C.notChar("'"")).rep().map(a => a.value.join(''));
//allow a string or any token except line delimeter or tabulator delimeter
var attempth = F.try(C.char('"').drop().then(innerstring).then(C.char('"').drop())).or(C.charNotIn(eol[0] + delimeter))
//this is merely just a CSV header entry or the last value of a CSV line (newlines not allowed)
var wordh = attempth.optrep().map(a => (a.value.join('')));
//This parses the whole header
var header = wordh.then(C.char(delimeter).drop().then(wordh).optrep()).map(x => {
x.header = x.value;
return x
})
//allow a string or any token except a tabulator delimeter, the reason why we allow newlines is because we already know how many columns there is, so if there is a newline, it is part of the value.
var attempt = F.try(C.char('"').drop().then(innerstring.opt().map(a=>(a.value.__MASALA_EMPTY__?{value:""}:a))).then(C.char('"').drop())).or(C.notChar(delimeter))
//this is merely just a CSV entry
var word = attempt.optrep().map(a => (a.value[0]?.value??a.value[0]));
//This parses a CSV "line" it will skip newlines if they're enclosed with doublequotation marks
var line = i => C.string(eol).drop().then(word.then(C.char(delimeter).drop().then(word).occurrence(i - 1).then(C.char(delimeter).drop().then(wordh)))).map(a => a.value);
return header.flatMap(a => line(a.header.length - 1).rep().map(b => {
b.header = a.header;
return b
}))
};
var m = {
'tab': ''t',
"comma": ",",
"space": " ",
"semicolon": ";"
}
document.getElementById('button').addEventListener('click', function() {
var val = document.getElementById('csv').value;
var parsedCSV = CSV(m[document.getElementById('delimeter').value], ''n').parse(Streams.ofString(val)).value;
console.log(parsedCSV);
})
})
Type some csv<br>
<textarea id="csv"></textarea>
<label for="delimeter">Choose a delimeter:</label>
<select name="delimeter" id="delimeter">
<option value="comma">,</option>
<option value="tab">'t</option>
<option value="space"> </option>
<option value="semicolon">;</option>
</select>
<button id="button">parse</button>
我建议剥离换行符和文件的结尾。因为它可能会感到困惑。
这似乎有效。您可能想翻译日语,但使用起来非常简单:http://code.google.com/p/csvdatajs/
- 将HTML表格导出到excel时,无法将数据加载到excel文件中
- 将JQuery Handontable保存到服务器上的excel文件中
- 生成的excel文件url
- CSV、PDF、Excel文件在dataTables的导出扩展中作为blob下载
- 使用JavaScript调用Excel文件
- 将JSON数据格式化为excel文件
- 将Excel/CSV文件中的数据导入angularjs-json对象中
- 如何使用 javascript 创建和编辑 excel 文件
- Javascript JSON 到 Excel 文件下载
- 使用node.js读取Excel文件
- 通过javascript用java处理excel文件
- 从javascript打开excel文件并传递参数
- 将HTML表导出到Excel,而不是使用C#下载文件
- Apache poi XSSF创建Excel文件-Create返回格式或文件扩展名无效的空文件
- 如何使用SheetJS从外部链接解析Excel文件(AmazonS3)
- 如何使用html中的javascript代码解析Excel文件
- 导出时如何重命名excel文件
- 如何在java web应用程序中捕获关闭打开的excel文件的事件
- 创建/下载一个带有chrome扩展名的excel文件
- 我想将任何xml文件导出到excel文件(xls或制表符分隔)