Javascript 如何使转换为JSON的Excel文件自动加载到表(DataTables)中
所以我得到了这个任务,我需要将CSV文件加载到html页面, 加载后,我需要生成一个自动运行的代码- 获取对象字段名-将其放在表头中,然后将值与每个对象字段名匹配。 所有内容都需要自动完成(因为我们的老师只需添加csv文件即可进行检查-任何内容都不能硬编码)。 我们还需要使用称为数据表的库 我设法做了一些分配,但大部分是硬编码的,所以不好 这是我的html-Javascript 如何使转换为JSON的Excel文件自动加载到表(DataTables)中,javascript,arrays,excel,object,Javascript,Arrays,Excel,Object,所以我得到了这个任务,我需要将CSV文件加载到html页面, 加载后,我需要生成一个自动运行的代码- 获取对象字段名-将其放在表头中,然后将值与每个对象字段名匹配。 所有内容都需要自动完成(因为我们的老师只需添加csv文件即可进行检查-任何内容都不能硬编码)。 我们还需要使用称为数据表的库 我设法做了一些分配,但大部分是硬编码的,所以不好 这是我的html- <table id="table_id" class="display"> <thead>
<table id="table_id" class="display">
<thead>
<tr id="FieldNames">
</tr>
</thead>
<tbody id="Values">
</tbody>
</table>
在这个表中,我添加了这个代码-
(使用硬编码的JSON,只是为了在导入CSV文件之前看看是否可以这样做)
常量Json=
[
{
“姓名”:“约翰”,
“年龄”:35岁,
“电子邮件”:AF@asdsa.com",
“地址”:“Rishon LeZion”
},
{
“姓名”:“赫兹”,
“年龄”:31岁,
“电子邮件”:wertwree@grf.com",
“地址”:“Rishon LeZion”
},
{
“姓名”:“大卫”,
“年龄”:23岁,
“电子邮件”:wertewrt@fd.com",
“地址”:“Rishon LeZion”
},
{
“姓名”:“杰基”,
“年龄”:41岁,
“电子邮件”:wertr@aa.com",
“地址”:“Rishon LeZion”
}];
$(文档).ready(函数(){
var Obj=Json[0];
var KeyNames=Object.keys(Obj)
for(设i=0;i
虽然结果很好,但这不是我要求的。
我正在想办法让它自动运行,但对我来说效果不太好。好吧,我刚才做过,下面是解决方案: 我将逻辑分为两部分: 1) 创建标题: 循环遍历子对象(如数组中的对象),然后使用
Object.keys()
这些键是你的标题。然后把它们排成一行,然后看,你的头球
2) 创建字段。这有点复杂。
在主要对象中循环,这将在循环展开时一个接一个地显示对象。然后,为每个索引创建一行。获取每个对象的值,并确保通过执行类似于我所做的id='object-“+childIndex+”
的操作,将它们作为td
抛出到正确的行中。然后抓取特定的行,从对象中获取Object.values()
后,在行内循环一个接一个地抛出它们。塔达
另外,不要问我为什么使用jquery。我使用它是因为我不是一个受虐狂,不会用纯JS来做这件事
const json=[{
“姓名”:“约翰”,
“年龄”:35岁,
“电子邮件”:AF@asdsa.com",
“地址”:“Rishon LeZion”
},
{
“姓名”:“赫兹”,
“年龄”:31岁,
“电子邮件”:wertwree@grf.com",
“地址”:“Rishon LeZion”
},
{
“姓名”:“大卫”,
“年龄”:23岁,
“电子邮件”:wertewrt@fd.com",
“地址”:“Rishon LeZion”
},
{
“姓名”:“杰基”,
“年龄”:41岁,
“电子邮件”:wertr@aa.com",
“地址”:“Rishon LeZion”
}
];
//获取标题并创建它们
常数表=$(“表”);
常数thead=$(“thead”);
var promiseMe=新承诺(功能(解析、拒绝){
//首先基于对象创建标题的步骤
var createHeaders=json.forEach((childObjects,index)=>{
const kNames=Object.key(childObjects);
for(让kNames.entries()的[索引,名称]{
const actualName=name.replace(/\s+/g',)
让divId=name.replace(/\s+/g,'-');
let element=document.getElementById(divId);
if(!元素){
thead.append(“+name+”)
}
}
解析(createHeaders);
})
})。然后(createFields());
函数createFields(){
const keyNames=Object.values(json);
keyNames.forEach((childObject,childIndex)=>{
//为每个对象创建一行
const valArray=Object.values(childObject);
$(“#值”)。追加(“”)
valArray.forEach((值,索引)=>{
$(“#对象-”+childIndex)。追加(“+value+”)
})
})
}
.cell、.header名称{
边框:1px纯黑;
}
好的,我刚才做过,下面是解决方案: 我将逻辑分为两部分: 1) 创建标题: 循环遍历子对象(如数组中的对象),然后使用
Object.keys()
这些键是你的标题。然后把它们排成一行,然后看,你的头球
2) 创建字段。这有点复杂。
在主要对象中循环,这将在循环展开时一个接一个地显示对象。然后,为每个索引创建一行。获取每个对象的值,并确保通过执行类似于我所做的id='object-“+childIndex+”
的操作,将它们作为td
抛出到正确的行中。然后抓取特定的行,从对象中获取Object.values()
后,在行内循环一个接一个地抛出它们。塔达
另外,不要问我为什么使用jquery。我用它是因为我不是受虐狂
const Json =
[
{
"name": "john",
"age": 35,
"email": "AF@asdsa.com",
"address": "Rishon LeZion"
},
{
"name": "hezi",
"age": 31,
"email": "wertwree@grf.com",
"address": "Rishon LeZion"
},
{
"name": "david",
"age": 23,
"email": "wertewrt@fd.com",
"address": "Rishon LeZion"
},
{
"name": "jacky",
"age": 41,
"email": "wertr@aa.com",
"address": "Rishon LeZion"
}];
$(document).ready(function () {
var Obj = Json[0];
var KeyNames = Object.keys(Obj)
for (let i = 0; i < KeyNames.length; i++) {
var Head = $(`<th>${KeyNames[i]}</th>`);
$("#FieldNames").append(Head);
}
for (let j = 0; j < Json.length; j++) {
var firstVal = Json[j].name
var secondVal = Json[j].age
var thirdVal = Json[j].email
var fourthVal = Json[j].address
var Data = `
<tr class="middle">
<td>${firstVal}</td>
<td>${secondVal}</td>
<td>${thirdVal}</td>
<td>${fourthVal}</td>
</tr>
`;
$("#Values").append(Data);
}
$('#table_id').DataTable();
});