在JavaScript控制器中填充XML表后填充它
我的SAPUi5应用程序中有一个空XML表:在JavaScript控制器中填充XML表后填充它,javascript,sapui5,innerhtml,xmltable,Javascript,Sapui5,Innerhtml,Xmltable,我的SAPUi5应用程序中有一个空XML表: <m:Table id="testdata3"></m:Table> 更新:型号代码 _import : function(file) { var oTable = this.getView().byId('testdata3'); if(file && window.FileReader){ var reader = new
<m:Table id="testdata3"></m:Table>
更新:型号代码
_import : function(file) {
var oTable = this.getView().byId('testdata3');
if(file && window.FileReader){
var reader = new FileReader();
var result = {}, data;
var that = this;
reader.readAsBinaryString(file);
reader.onload = function(e) {
var rawLog = reader.result;
data = e.target.result;
var wb = XLSX.read(data, {type: 'binary'});
var first_sheet_name = wb.SheetNames[0];
var worksheet = wb.Sheets[first_sheet_name];
var oModel = new sap.ui.model.json.JSONModel();
sap.ui.getCore().setModel(oModel,'myResultModel');
that.getView().byId("testdata3").setModel(oModel);
var oColumns = [];
*// I'm iterating over the column names and pushing them to my table works fine, but I'm then stuck with proceeding and pushing the rest of the data to my table..*
var cells = Object.keys(worksheet);
for (var i = 0; i < Object.keys(cells).length; i++) {
if( cells[i].indexOf('1') > -1)
{
oColumns.push(worksheet[cells[i]].v);
}
}
var oColumnNames = [];
$.each(oColumns, function(i, value) {
oColumnNames.push({
Text: oColumns[i]
});
});
oModel.setProperty("/columnNames", oColumnNames);
oModel.setProperty("/columnNames", oColumnNames);
var oTemplate = new Column({
header: new Label({
text: "{Text}"
})
});
oTable.bindAggregation("columns", "/columns", oTemplate);
};
};
},
\u导入:函数(文件){
var oTable=this.getView().byId('testdata3');
if(文件和窗口.FileReader){
var reader=new FileReader();
var result={},数据;
var=这个;
reader.readAsBinaryString(文件);
reader.onload=函数(e){
var rawLog=reader.result;
数据=e.target.result;
var wb=XLSX.read(数据,{type:'binary'});
var first_sheet_name=wb.SheetNames[0];
var工作表=工作表[第一张工作表名称];
var oModel=new sap.ui.model.json.JSONModel();
setModel(oModel,'myResultModel');
getView().byId(“testdata3”).setModel(oModel);
var oColumns=[];
*//我对列名进行迭代并将其推送到我的表中效果很好,但随后我不得不继续并将其余的数据推送到我的表中*
变量单元格=Object.keys(工作表);
对于(var i=0;i-1)
{
oColumns.push(工作表[cells[i]].v);
}
}
var oColumnNames=[];
$。每个(O列,函数(i,值){
oColumnNames.push({
正文:奥运会开幕式[i]
});
});
setProperty(“/columnNames”,oColumnNames);
setProperty(“/columnNames”,oColumnNames);
var-oTemplate=新列({
标题:新标签({
正文:“{text}”
})
});
bindAggregation(“columns”、“/columns”、oTemplate);
};
};
},
编辑这里是我尝试的另一种尝试,调试一切正常,但表始终保持空状态。
onXLSXupload : function(e) {
this._import(e.getParameter("files") && e.getParameter("files")[0]);
},
_import : function(file) {
console.log(file);
var oTable = this.getView().byId('testdata3');
if(file && window.FileReader){
var reader = new FileReader();
var result = {}, data;
var that = this;
reader.readAsBinaryString(file);
reader.onload = function(e) {
var rawLog = reader.result;
data = e.target.result;
var wb = XLSX.read(data, {type: 'binary'});
var first_sheet_name = wb.SheetNames[0];
var worksheet = wb.Sheets[first_sheet_name];
wb.SheetNames.forEach(function(first_sheet_name) {
var roa = XLSX.utils.sheet_to_json(wb.Sheets[first_sheet_name]);
if(roa.length > 0){
result[first_sheet_name] = roa;
}
});
var data = result[Object.keys(result)[0]];
for(var i=0; i<data.length; i++){
var excelRows = new sap.m.ColumnListItem({cells:[
new sap.m.Text({text: data[i][Object.keys(data[i])[0]]}),
new sap.m.Text({text: data[i][Object.keys(data[i])[1]]})
]});
that.getView().byId("testdata3").addItem(excelRows );
}
};
};
},
onXLSXupload:函数(e){
此.u导入(e.getParameter(“文件”)和&e.getParameter(“文件”)[0]);
},
_导入:函数(文件){
console.log(文件);
var oTable=this.getView().byId('testdata3');
if(文件和窗口.FileReader){
var reader=new FileReader();
var result={},数据;
var=这个;
reader.readAsBinaryString(文件);
reader.onload=函数(e){
var rawLog=reader.result;
数据=e.target.result;
var wb=XLSX.read(数据,{type:'binary'});
var first_sheet_name=wb.SheetNames[0];
var工作表=工作表[第一张工作表名称];
wb.SheetNames.forEach(函数(第一张工作表名称){
var roa=XLSX.utils.sheet_to_json(wb.Sheets[第一张工作表名称]);
如果(roa.length>0){
结果[第一张工作表名称]=roa;
}
});
var data=result[Object.keys(result)[0]];
对于(变量i=0;i-1){
var columnName=工作表[cells[i]].v;
推({
columnId:columnName
});
}
}
返回oColumns;
},
getRowData:函数(工作表、结果){
var roa=XLSX.utils.sheet_to_json(工作表);
如果(roa.length>0){
结果[工作表]=roa;
}
var data=result[Object.keys(result)[0]];
console.log(data.length);
VarI;VarX;
变量oCells=[]
对于(i=0;i
使用for循环更新columnlistitems
oTable.bindAggregation("items", "/rows", function(index, context) {
var roa = XLSX.utils.sheet_to_json(worksheet);
if(roa.length > 0){
result[worksheet] = roa;
}
for(var i = 0; i < roa.length; i++){
return new sap.m.ColumnListItem({
cells: [
new Text({ text :context.getObject().cellId })
]
})
};
});
oTable.bindAggregation(“项”,“行”),函数(索引,上下文){
var roa=XLSX.utils.sheet_to_json(工作表);
如果(roa.length>0){
结果[工作表]=roa;
}
对于(变量i=0;i
在我的一个项目中,我需要从controller动态创建表
以下是我所做的,希望它能帮助你:
查看
<Table id="tableTask"
inset="false">
<headerToolbar>
<OverflowToolbar id="otbSubheader">
<ToolbarSpacer/>
<SearchField id="taskSearchBox" search="onSearchOrClearPressed" liveChange="onSearchTasks" showSearchButton="false">
<layoutData><OverflowToolbarLayoutData minWidth="200px" maxWidth="300px" shrinkable="true"/></layoutData>
</SearchField>
</OverflowToolbar>
</headerToolbar>
<columns>
<!-- Columns created in controller -->
</columns>
<items>
<ColumnListItem id="columnsListItemTask" press="onPressListItem" type="Navigation">
<cells>
<!-- Cells created in controller -->
</cells>
</ColumnListItem>
</items>
</Table>
更新
您可以执行for循环以动态添加任意数量的列:
onInit:function(){
我在这里用SheetJS创建了一个小示例。列名是从工作表中提取的,但您仍然需要从工作表中获取行。我为行添加了一些虚拟数据 希望这有帮助 查看
<Table id="testdata3" />
<u:FileUploader change="onChange" buttonText="Upload" />
控制器
onChange: function(oEvent) {
var file = oEvent.getParameter("files")[0];
var oTable = this.byId("testdata3");
var reader = new FileReader();
var that = this;
reader.readAsBinaryString(file);
reader.onload = function(e) {
var data = e.target.result;
var wb = XLSX.read(data, {
type: "binary"
});
var firstSheetName = wb.SheetNames[0];
var worksheet = wb.Sheets[firstSheetName];
var oModel = new sap.ui.model.json.JSONModel();
var aColumns = that.getColumnNames(worksheet);
var aData = that.getRowData(worksheet);
var aCells = that.getCells(aColumns);
oModel.setData({
columns: aColumns,
rows: aData
});
oTable.setModel(oModel);
oTable.bindAggregation("columns", "/columns", function(index, context) {
return new sap.m.Column({
header: new sap.m.Label({
text: context.getObject().columnId
})
});
});
oTable.bindAggregation("items", "/rows", new sap.m.ColumnListItem({
// CHANGE ACCORDINGLY OR MAKE DYNAMIC
cells: aCells
}));
};
},
getColumnNames: function(worksheet) {
var oColumns = [];
var cells = Object.keys(worksheet);
for (var i = 0; i < Object.keys(cells).length; i++) {
if (cells[i].indexOf("1") > -1) {
var columnName = worksheet[cells[i]].v;
oColumns.push({
columnId: columnName
});
}
}
return oColumns;
},
getRowData: function() {
var aItems = [];
// DO YOUR THING HERE
aItems[0] = {
value0: "testvalue0",
value1: "testvalue1",
value2: "testvalue2",
value3: "testvalue3",
value4: "testvalue4"
};
return aItems;
},
getCells: function(aColumns) {
var cells = [];
for (var i = 0; i < aColumns.length; i++) {
cells[i] = new sap.m.Text({
text: "{value" + i + "}"
});
}
return cells;
}
onChange:function(oEvent){
var file=oEvent.getParameter(“文件”)[0];
var oTable=this.byId(“testdata3”);
var reader=new FileReader();
var=这个;
reader.readAsBinaryStrin
onInit: function(){
...
// Get columns aggregation of table
let oColumns = this.getView().byId('columnsListItemTask');
// Define table cells
let cellToAdd1 = new sap.m.Text('textCell1',{
text: "{path/to/modelValue1}"
});
let cellToAdd2 = new sap.m.Text('textCell2',{
text: "{path/to/modelValue2}"
});
let cellToAdd3 = new sap.m.Text('textCell3',{
text: "{path/to/modelValue3}"
});
let cellToAdd4 = new sap.m.Text('textCell4',{
text: "{path/to/modelValue4}"
});
// Add cells (in this case 4 columns)
oColumns.addCell(cellToAdd1);
oColumns.addCell(cellToAdd2);
oColumns.addCell(cellToAdd3);
oColumns.addCell(cellToAdd4);
var jsonModel = new JSONModel(yourModel);
this.getView().setModel(jsonModel);
// Get Table by id
let oTable = this.getView().byId('tableTask');
oTable.removeAllItems(); //Remove old items if present
oTable.removeAllAggregation(); //Remove aggregations
oTable.bindAggregation('items', {
path:'/rowsData', // field name of you JSONModel containing data rows
template: oColumns, // rowTemplate of cells
});
...
}
...
// Get columns aggregation of table
let oColumns = this.getView().byId('columnsListItemTask');
let cellToAdd;
// This for loop in each columns I need to generate
// (in my case they are defined in a database and I get it with AJAX request)
for(let key in allCellsToGenearte){
cellToAdd = new sap.m.Text({
text: allCellsToGenearte["modelPath"]
});
oColumns.addCell(cellToAdd);
}
// Get Table by id
let oTable = this.getView().byId('tableTask');
oTable.removeAllItems(); //Remove old items if present
oTable.removeAllAggregation(); //Remove aggregations
oTable.bindAggregation('items', {
path:'/rowsData', // field name of JSON Model containing data rows
template: oColumns, // rowTemplate of cells
});
...
}
<Table id="testdata3" />
<u:FileUploader change="onChange" buttonText="Upload" />
onChange: function(oEvent) {
var file = oEvent.getParameter("files")[0];
var oTable = this.byId("testdata3");
var reader = new FileReader();
var that = this;
reader.readAsBinaryString(file);
reader.onload = function(e) {
var data = e.target.result;
var wb = XLSX.read(data, {
type: "binary"
});
var firstSheetName = wb.SheetNames[0];
var worksheet = wb.Sheets[firstSheetName];
var oModel = new sap.ui.model.json.JSONModel();
var aColumns = that.getColumnNames(worksheet);
var aData = that.getRowData(worksheet);
var aCells = that.getCells(aColumns);
oModel.setData({
columns: aColumns,
rows: aData
});
oTable.setModel(oModel);
oTable.bindAggregation("columns", "/columns", function(index, context) {
return new sap.m.Column({
header: new sap.m.Label({
text: context.getObject().columnId
})
});
});
oTable.bindAggregation("items", "/rows", new sap.m.ColumnListItem({
// CHANGE ACCORDINGLY OR MAKE DYNAMIC
cells: aCells
}));
};
},
getColumnNames: function(worksheet) {
var oColumns = [];
var cells = Object.keys(worksheet);
for (var i = 0; i < Object.keys(cells).length; i++) {
if (cells[i].indexOf("1") > -1) {
var columnName = worksheet[cells[i]].v;
oColumns.push({
columnId: columnName
});
}
}
return oColumns;
},
getRowData: function() {
var aItems = [];
// DO YOUR THING HERE
aItems[0] = {
value0: "testvalue0",
value1: "testvalue1",
value2: "testvalue2",
value3: "testvalue3",
value4: "testvalue4"
};
return aItems;
},
getCells: function(aColumns) {
var cells = [];
for (var i = 0; i < aColumns.length; i++) {
cells[i] = new sap.m.Text({
text: "{value" + i + "}"
});
}
return cells;
}