将CSV解析为JavaScript并使用一种VLOOKUP
我有一个选择框,它只向函数发送值。函数然后得到一个数字1-100。我有一个100行5列的CSV文件。我想创建一个函数,它将根据选择框先前发送给该函数中4个不同变量的行号来解析第4-5列中的值。你能告诉我需要用什么来实现这一点吗 让我们假设CSV看起来像将CSV解析为JavaScript并使用一种VLOOKUP,javascript,csv,Javascript,Csv,我有一个选择框,它只向函数发送值。函数然后得到一个数字1-100。我有一个100行5列的CSV文件。我想创建一个函数,它将根据选择框先前发送给该函数中4个不同变量的行号来解析第4-5列中的值。你能告诉我需要用什么来实现这一点吗 让我们假设CSV看起来像 1, Robert, Lee, robert@mymail.com, 100001 2, John, Smith, john@mymail.com, 10002 3, Scott, Jones, scott@mymail.com, 10003 4
1, Robert, Lee, robert@mymail.com, 100001
2, John, Smith, john@mymail.com, 10002
3, Scott, Jones, scott@mymail.com, 10003
4, etc.
所以当我从下拉菜单中选择1时。
我应该得到“罗伯特”,“李”robert@mymail.com“,”100001“分配给变量,如
var firstname =
var lastname =
var email =
var idn =
第一次评论后更新:
让我们简化一下
假设我有HTML
<button id="1" onclick="getcolumns(this)">One</button>
<button id="2" onclick="getcolumns(this)">Two</button>
<button id="3" onclick="getcolumns(this)">Three</button>
<button id="4" onclick="getcolumns(this)">Four</button>
<div id="area"></div>
假设我按下按钮“3”,innerHTML显示“3”
我需要基于下图的功能:
function getcolumns(button) {
[GET File.csv]
var idm = buttton.id; // lets say idm = 3 at the moment//
[Parse values from Col2, Col3, Col4, Col5, from ROW(idm)]
var firstname = col2;
var lastname = col3;
var email = col4;
var idn = col5;
document.getElementById("area").innerHTML = col2+'<br>'+col3+'<br>'+col4+'<br>'+col5
}
函数getcolumns(按钮){
[获取文件.csv]
var idm=buttton.id;//现在假设idm=3//
[解析来自Col2、Col3、Col4、Col5和ROW的值(idm)]
var firstname=col2;
var lastname=col3;
var=col4;
var-idn=col5;
document.getElementById(“area”).innerHTML=col2+'
'+col3+'
'+col4+'
'+col5
}
所以基本上我会
<div id="area">
Scott
Jones
scott@mymail.com
10003
</div>
斯科特
琼斯
scott@mymail.com
10003
我使用(警告:此插件有Mac CSV文件的错误。我已将其修复在我的分支中,只需将其上载到github)
HTML
实际处理逻辑以确保选择正确的文件类型。
var handleFileSelect = function(evt) {
if(evt &&evt.files[0]) {
var file = evt.files[0];
if(file.name.split('.').pop() != 'csv' && (
file.type !== 'text/csv' ||
file.type !== 'text/comma-separated-values' ||
file.type !== 'application/csv' ||
file.type !== 'application/excel' ||
file.type !== 'application/vnd.ms-excel' ||
file.type !== 'text/anytext')) {
console.log(file.type);
importErrorMessage = "Incorrect file type uploaded. We only accept files ending in .csv";
resetInput(evt);
return;
}
var callback = function() {
resetInput(evt);
fileUploaded = false;
}
updateDom(file, callback);
}
};
希望现在更清楚:)你的JavaScript现在看起来像什么?在那里完成了,希望你现在能帮助我。我一直在搜索,很显然,将CSV文件解析为JS函数并不是那么容易。一旦我找到一种可能,我就需要把它放到数组中,然后从数组中读取它。我使用JQuery CSV插件,它非常简单。我将分享我使用的代码。这会将CSV直接解析到数组中吗?因此,当我按下按钮时,这将从中调用变量?谢谢:)虽然我不需要需要需要CSV上传的脚本,但需要一个从URL自动加载CSV的脚本。你喜欢那样的工作吗?”var file=http.open(“GET”、“test.csv”);'我也不需要错误检查,因为我知道CSV将始终保持不变。@Matt您对CSV文件比我更有信心。这不会将CSV文件上载到服务器(实际上,上载是一个误称),因为它只是将CSV文件加载到内存中。要从远程URL读取文件,只需将读取文件的代码部分更改为从远程URL读取。
<input type="file" id="file" name="file" onchange="handleFileSelect()" />
var resetInput = function(inputSelector) {
$(inputSelector).wrap('<form>').closest('form').get(0).reset();
$(inputSelector).unwrap();
}
var updateDom = function(file, onError) {
var reader = new FileReader();
reader.readAsText(file);
reader.onload = function(event) {
var csv = event.target.result;
var data;
try {
data = $.csv.toObjects(csv);
fileUploaded = true;
}
catch(e) {
importErrorMessage = "Your CSV File could not be imported. The error has been logged. If it's an error we can fix, we will.";
onError();
fileUploaded = false;
console.log(e);
return;
}
csv = {dataRows : data};
var columns = [];//header row
for (var prop in data[0])
{
columns.push(prop);
}
//update dom here
}
};
var importErrorMessage = "";
var handleFileSelect = function(evt) {
if(evt &&evt.files[0]) {
var file = evt.files[0];
if(file.name.split('.').pop() != 'csv' && (
file.type !== 'text/csv' ||
file.type !== 'text/comma-separated-values' ||
file.type !== 'application/csv' ||
file.type !== 'application/excel' ||
file.type !== 'application/vnd.ms-excel' ||
file.type !== 'text/anytext')) {
console.log(file.type);
importErrorMessage = "Incorrect file type uploaded. We only accept files ending in .csv";
resetInput(evt);
return;
}
var callback = function() {
resetInput(evt);
fileUploaded = false;
}
updateDom(file, callback);
}
};