日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > php >内容正文

php

angularjs 导出excel php,AngularJS 导出Excel指令

發布時間:2024/10/8 php 51 豆豆
生活随笔 收集整理的這篇文章主要介紹了 angularjs 导出excel php,AngularJS 导出Excel指令 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Excel導出思路

項目中使用到了導出Excel功能,潘老師已經在博客中將表格導出為csv的技術難點實現,剩下的,只是根據實際的業務需求對該指令進行完善。

大體遇到了以下幾個問題:

功能按鈕不導出

因為原指令默認導出表格所有的內容,第一次直接導出時,發現直接將查看、編輯這幾個按鈕的HTML代碼都導出去了,我們要的應該是人員信息和人員資質信息。

指令添加參數:有效數據列數。

如圖,這里的有效數據列就是市、區縣等等一直到有效期至,一共15列,作為參數傳給導出指令。

self.exportCols = scope.exportCols;

for (let i = 0; i < table.rows.length; i ++) {

// 獲取每行的數據

var rowData = table.rows[i].cells;

// 如果該列為正常列,循環內容

for (let j = 0; j < self.exportCols; j ++) {

// 如果該列不存在,則賦值為空內容

var data = rowData[j] === undefined ? '' : rowData[j].innerHTML;

// 拼接內容,用逗號分隔

csvString = csvString + data + ",";

}

// 刪除最后多余的逗號

csvString = csvString.substring(0, csvString.length - 1);

// 每行末尾添加\n進行換行

csvString = csvString + "\n";

}

原來內層循環的是所有數據列,現在改成傳入的有效數據列數。

跨行表格

以這個圖為例,第一行是有15列的,但是第二行的數據只有4列,因為其余的列是第一行設置rowspan顯示的,實際上第二行的tr中只有人員資質4個td。

這就導致導出的時候第二行只有四個數據,并且是從左對齊的,所以我們需要在跨行的列添加空數據。

加一個條件判斷,傳入出現被跨行的列時剩余列的長度,用于區分是正常列還是被跨行的列。

if (self.isNormalItem(rowData)) {

// 如果該列為正常列,循環內容

for (let j = 0; j < self.exportCols; j++) {

// 如果該列不存在,則賦值為空內容

var data = rowData[j] === undefined ? '' : rowData[j].innerHTML;

// 拼接內容,用逗號分隔

csvString = csvString + data + ",";

}

} else {

// 根據有效數據中的跨行列拼接空數據

for (let j = 0; j < self.multipleRowCols; j ++) {

csvString = csvString + ",";

}

// 根據有效數據減去跨行列,獲得非跨行列,并拼接數據

for (let index = 0; index < self.exportCols - self.multipleRowCols; index ++) {

csvString = csvString + rowData[index].innerHTML + ",";

}

}

資格證出現空列

因為這里需要為添加資格證按鈕添加一個空列,導出的時候也會出現空列,效果并不好。

所以需要進行判斷,當出現被跨行的列時,需要判斷它的上一行的最后四項內容是否為空,如果為空,就應該把這個列的內容放到上一行。

if (self.isNormalItem(rowData)) {

// 如果該列為正常列,循環內容

...

} else if (self.isFirstItem(csvString)) {

// 如果當前跨行資質是當前人員的第一個資質,則將該資質添加到上一行

// 因為能添加人員資質的界面第一行的人員資質是空的,所以需要將該資

// 質添加到上一行

csvString = self.addDataToPreString(rowData, csvString);

} else {

// 根據有效數據中的跨行列拼接空數據

...

}

再加一個else,如果當前被跨行的列是當前人員的第一個人員資質的話,就把這一行的人員資質數據添加到上一行人員資質的空白處。

下面是方法的具體實現:

// 判斷當前表格中資質是否是第一項資質

self.isFirstItem = function(string) {

// 分隔字符串

var csvArray = string.split(',');

// 循環已有字符數組的倒數四個元素,判斷是否有效

for (var i = csvArray.length - 1; i >= csvArray.length - 4; i--) {

if (self.isValid(csvArray[i])) {

return false;

}

}

return true;

};

// 判斷當前字符是否有效

// 空字符和\n視為無效

self.isValid = function(char) {

if (char === '' || char === '\n') {

return false;

} else {

return true;

}

};

// 添加數據到字符串的上一行

self.addDataToPreString = function(data, string) {

// 字符串分隔為數據

var csvArray = string.split(',');

// 循環,將有效的數據添加到上一行

for (let i = 0; i < self.validNoMultipleRowCols; i++) {

csvArray[csvArray.length - self.validNoMultipleRowCols + i] = data[i].innerHTML;

}

// 數組轉換為字符串

return csvArray.join(',');

};

最終實現導出的csv效果:

總結

以上是生活随笔為你收集整理的angularjs 导出excel php,AngularJS 导出Excel指令的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。