|
@@ -17,8 +17,10 @@ export function getExcelBolob(luckysheet) {
|
|
|
const worksheet = workbook.addWorksheet(table.name);
|
|
|
const merge = (table.config && table.config.merge) || {};
|
|
|
const borderInfo = (table.config && table.config.borderInfo) || {};
|
|
|
+ const columnlen = (table.config && table.config.columnlen) || {};
|
|
|
// 3.设置单元格合并,设置单元格边框,设置单元格样式,设置值
|
|
|
setStyleAndValue(table.data, worksheet);
|
|
|
+ setColumnlen(columnlen, worksheet);
|
|
|
setMerge(merge, worksheet);
|
|
|
setBorder(borderInfo, worksheet);
|
|
|
return true;
|
|
@@ -34,7 +36,6 @@ export function getExcelBolob(luckysheet) {
|
|
|
}
|
|
|
|
|
|
export function exportExcel(luckysheet, value) {
|
|
|
- // return
|
|
|
// 4.写入 buffer
|
|
|
getExcelBolob(luckysheet).then((blob) => {
|
|
|
console.log('导出成功!');
|
|
@@ -100,6 +101,8 @@ var setStyleAndValue = function (cellArr, worksheet) {
|
|
|
row.every(function (cell, columnid) {
|
|
|
if (!cell) return true;
|
|
|
let fill = fillConvert(cell.bg);
|
|
|
+ if (fill?.fgColor?.argb && fill?.fgColor?.argb.includes('rgb'))
|
|
|
+ fill.fgColor.argb = rgbToHex(fill.fgColor.argb);
|
|
|
|
|
|
let font = fontConvert(
|
|
|
cell.ff,
|
|
@@ -141,8 +144,22 @@ var setStyleAndValue = function (cellArr, worksheet) {
|
|
|
});
|
|
|
};
|
|
|
|
|
|
+//设置导出的列宽
|
|
|
+var setColumnlen = function (luckyColumnlen, worksheet) {
|
|
|
+ const columnlen = Object.values(luckyColumnlen);
|
|
|
+ const result = columnlen.map(function (elem, idx) {
|
|
|
+ return {
|
|
|
+ // header: idx,
|
|
|
+ key: idx,
|
|
|
+ width: elem / 10,
|
|
|
+ };
|
|
|
+ });
|
|
|
+ worksheet.columns = result;
|
|
|
+};
|
|
|
+
|
|
|
var fillConvert = function (bg) {
|
|
|
- if (!bg) {
|
|
|
+ //bg == '#fff'导出excel后会变成 #000FFF(蓝色)
|
|
|
+ if (!bg || bg == '#fff') {
|
|
|
return {};
|
|
|
}
|
|
|
// const bgc = bg.replace('#', '')
|
|
@@ -434,3 +451,32 @@ export function getUUID(len = 8, radix = 16) {
|
|
|
|
|
|
return uuid.join('');
|
|
|
}
|
|
|
+
|
|
|
+function rgbToHex(rgbString) {
|
|
|
+ // var rgbString = "rgb(255, 255, 255)";
|
|
|
+ var hexColor = 'FFFFFF';
|
|
|
+
|
|
|
+ // 使用正则表达式匹配出数字部分
|
|
|
+ var match = rgbString?.match(/\d+/g);
|
|
|
+
|
|
|
+ if (match) {
|
|
|
+ var r = parseInt(match[0]); // 第一个匹配项是红色分量
|
|
|
+ var g = parseInt(match[1]); // 第二个匹配项是绿色分量
|
|
|
+ var b = parseInt(match[2]); // 第三个匹配项是蓝色分量
|
|
|
+
|
|
|
+ console.log('Red:', r);
|
|
|
+ console.log('Green:', g);
|
|
|
+ console.log('Blue:', b);
|
|
|
+ // 将每个RGB分量转换为十六进制,并确保至少两位
|
|
|
+ var redHex = r.toString(16).padStart(2, '0');
|
|
|
+ var greenHex = g.toString(16).padStart(2, '0');
|
|
|
+ var blueHex = b.toString(16).padStart(2, '0');
|
|
|
+
|
|
|
+ // 将三个分量的十六进制值连接起来
|
|
|
+ hexColor = redHex + greenHex + blueHex;
|
|
|
+
|
|
|
+ // 转换为大写字母形式
|
|
|
+ hexColor = hexColor.toUpperCase();
|
|
|
+ }
|
|
|
+ return hexColor;
|
|
|
+}
|