Я пытаюсь получить код из серверной части (java), заполнить скрытую таблицу (Angularjs) и экспортировать, как Excel, но у меня возникают проблемы, когда я выполняю свое обещание, потому что экспорт Excel перед таблицей заполните:
Angularjs
consultaService.detalleDashboard({'idBusqueda': 0,'identificador' : 0,'tipo': 0},null)
.$promise.then(function (result) {
$scope.dataExportar = {
data:result.item1 //I get data well
}
}, function (error) {
$log.error("** Error al obtener Info para excel", error);
}).then($scope.generaExcel()) //this 'then' execute before mi table was filled
Просмотреть код:
<table id="headerTable">
<tbody>
<tr>
<td>ID OFICINA</td>
<td>ID SUPERVISORIA</td>
</tr>
<tr ng-repeat="l in dataExportar.data">
<td>{{l.idOficina}}</td>
<td>{{l.idSupervisoria}}</td>
</tr>
</tbody>
</table>
Код для экспорта Excel
$scope.generaExcel = function(){
//export to excel file
var tab_text = '<table border="1px" style="font-size:20px" ">';
var textRange;
var j = 0;
var tab = document.getElementById('headerTable'); // id of table
var lines = tab.rows.length;
// the first headline of the table
if (lines > 0) {
tab_text = tab_text + '<tr bgcolor="#DFDFDF">' + tab.rows[0].innerHTML + '</tr>';
}
// table data lines, loop starting from 1
for (j = 1 ; j < lines; j++) {
tab_text = tab_text + "<tr>" + tab.rows[j].innerHTML + "</tr>";
}
tab_text = tab_text + "</table>";
tab_text = tab_text.replace(/<A[^>]*>|<\/A>/g, ""); //remove if u want links in your table
tab_text = tab_text.replace(/<img[^>]*>/gi, ""); // remove if u want images in your table
tab_text = tab_text.replace(/<input[^>]*>|<\/input>/gi, ""); // reomves input params
// console.log(tab_text); // aktivate so see the result (press F12 in browser)
var fileName = 'report.xls'
var exceldata = new Blob([tab_text], { type: "application/vnd.ms-excel;charset=utf-8" })
if (window.navigator.msSaveBlob) { // IE 10+
window.navigator.msSaveOrOpenBlob(exceldata, fileName);
//$scope.DataNullEventDetails = true;
} else {
var link = document.createElement('a'); //create link download file
link.href = window.URL.createObjectURL(exceldata); // set url for link download
link.setAttribute('download', fileName); //set attribute for link created
document.body.appendChild(link);
link.click();
document.body.removeChild(link);
}
}
Потому что мой файл был сгенерирован до того, как я получил это
Просмотреть обновление хорошо (после того, как завершился бэкэнд-процесс):
ОБНОВЛЕНИЕ
Я изменил свой код, теперь он ожидает процесс бэк-офиса, тем не менее мне нужно, чтобы он ждал моей refre sh таблицы, потому что Excel генерировать до:
$scope.savePolizasVigentes = function() {
consultaService.detalleDashboard({'idBusqueda': 0,'identificador' : 0,'tipo': 0},null)
.$promise.then(function (result) {
$scope.dataExportar = {
data: result.item1
}
}, function (error) {
$log.error("** Error al obtener Info para excel", error);
}).then(function callback(response){
$('#headerTable').html(response);
}).then($scope.generaExcel)
}