/* eslint-disable */
require('script-loader!file-saver');
require('script-loader!@/vendor/Blob');
import * as XLSX from 'xlsx'

function generateArray(table) {
  var out = [];
  var rows = table.querySelectorAll('tr');
  var ranges = [];
  for (var R = 0; R < rows.length; ++R) {
    var outRow = [];
    var row = rows[R];
    var columns = row.querySelectorAll('td');
    for (var C = 0; C < columns.length; ++C) {
      var cell = columns[C];
      var colspan = cell.getAttribute('colspan');
      var rowspan = cell.getAttribute('rowspan');
      var cellValue = cell.innerText;
      if (cellValue !== "" && cellValue == +cellValue) cellValue = +cellValue;

      //Skip ranges
      ranges.forEach(function (range) {
        if (R >= range.s.r && R <= range.e.r && outRow.length >= range.s.c && outRow.length <= range.e.c) {
          for (var i = 0; i <= range.e.c - range.s.c; ++i) outRow.push(null);
        }
      });

      //Handle Row Span
      if (rowspan || colspan) {
        rowspan = rowspan || 1;
        colspan = colspan || 1;
        ranges.push({s: {r: R, c: outRow.length}, e: {r: R + rowspan - 1, c: outRow.length + colspan - 1}});
      }
      ;

      //Handle Value
      outRow.push(cellValue !== "" ? cellValue : null);

      //Handle Colspan
      if (colspan) for (var k = 0; k < colspan - 1; ++k) outRow.push(null);
    }
    out.push(outRow);
  }
  return [out, ranges];
};

function datenum(v, date1904) {
  if (date1904) v += 1462;
  var epoch = Date.parse(v);
  return (epoch - new Date(Date.UTC(1899, 11, 30))) / (24 * 60 * 60 * 1000);
}

function sheet_from_array_of_arrays(data, opts) {
  var ws = {};
  var range = {s: {c: 10000000, r: 10000000}, e: {c: 0, r: 0}};
  for (var R = 0; R != data.length; ++R) {
    for (var C = 0; C != data[R].length; ++C) {
      if (range.s.r > R) range.s.r = R;
      if (range.s.c > C) range.s.c = C;
      if (range.e.r < R) range.e.r = R;
      if (range.e.c < C) range.e.c = C;
      var cell = {v: data[R][C]};
      if (cell.v == null) continue;
      var cell_ref = XLSX.utils.encode_cell({c: C, r: R});

      if (typeof cell.v === 'number') cell.t = 'n';
      else if (typeof cell.v === 'boolean') cell.t = 'b';
      else if (cell.v instanceof Date) {
        cell.t = 'n';
        cell.z = XLSX.SSF._table[14];
        cell.v = datenum(cell.v);
      }
      else cell.t = 's';

      ws[cell_ref] = cell;
    }
  }
  if (range.s.c < 10000000) ws['!ref'] = XLSX.utils.encode_range(range);
  return ws;
}

function Workbook() {
  if (!(this instanceof Workbook)) return new Workbook();
  this.SheetNames = [];
  this.Sheets = {};
}

function s2ab(s) {
  if (typeof ArrayBuffer !== 'undefined') {
    var buf = new ArrayBuffer(s.length);
    var view = new Uint8Array(buf);
    for (var i = 0; i != s.length; ++i) view[i] = s.charCodeAt(i) & 0xFF;
    return buf;
  } else {
    var buf = new Array(s.length);
    for (var i = 0; i != s.length; ++i) buf[i] = s.charCodeAt(i) & 0xFF;
    return buf;
  }
}

function format2Sheet(e, r, n, o) {
  o = o || Object.keys(e[0]),
    r = r || 0,
    n = n || 0;
  var a = {};
  return e.map(function(e, a) {
    return o.map(function(o, i) {
      return Object.assign({},
        {
          v: e[o],
          position: (i + r > 25 ? t.getCharCol(i + r) : String.fromCharCode(65 + (i + r))) + (a + 1 + n)
        })
    })
  }).reduce(function(e, r) {
    return e.concat(r)
  }).forEach(function(e, r) {
    return a[e.position] = {
      v: e.v
    }
  }),
    a
}
function getCharCol(n) {
  let temCol = '',
    s = '',
    m = 0
  while (n > 0) {
    m = n % 26 + 1
    s = String.fromCharCode(m + 64) + s
    n = (n - m) / 26
  }
  return s
}
export function export_table_to_excel(id) {
  var theTable = document.getElementById(id);
  var oo = generateArray(theTable);
  var ranges = oo[1];

  /* original data */
  var data = oo[0];
  var ws_name = "SheetJS";

  var wb = new Workbook(), ws = sheet_from_array_of_arrays(data);

  /* add ranges to worksheet */
  // ws['!cols'] = ['apple', 'banan'];
  ws['!merges'] = ranges;

  /* add worksheet to workbook */
  wb.SheetNames.push(ws_name);
  wb.Sheets[ws_name] = ws;

  var wbout = XLSX.write(wb, {bookType: 'xlsx', bookSST: false, type: 'binary'});

  saveAs(new Blob([s2ab(wbout)], {type: "application/octet-stream"}), "test.xlsx")
}

export function export_json_to_excel(Data, Title, cell) { // 数据，标题，单元格坐标
  console.log(Data, cell, 520)
  const data = {
    "!ref": "A1:I28", // cellRangecjn
    "!merges": [
      {
        "s": { "c": 3, "r": 23 },
        "e": { "c": 6, "r": 23 }
      },
      {
        "s": { "c": 3, "r": 24 },
        "e": { "c": 6, "r": 24 }
      },
      {
        "s": { "c": 3, "r": 25 },
        "e": { "c": 6, "r": 25 }
      },
      {
        "s": { "c": 6, "r": 26 },
        "e": { "c": 8, "r": 26 }
      },
      {
        "s": {
          "c": 3,
          "r": 18
        },
        "e": {
          "c": 6,
          "r": 18
        }
      },
      {
        "s": {
          "c": 3,
          "r": 19
        },
        "e": {
          "c": 6,
          "r": 19
        }
      },
      {
        "s": {
          "c": 3,
          "r": 20
        },
        "e": {
          "c": 6,
          "r": 20
        }
      },
      {
        "s": {
          "c": 3,
          "r": 21
        },
        "e": {
          "c": 6,
          "r": 21
        }
      },
      {
        "s": {
          "c": 3,
          "r": 22
        },
        "e": {
          "c": 6,
          "r": 22
        }
      },
      {
        "s": {
          "c": 1,
          "r": 22
        },
        "e": {
          "c": 2,
          "r": 22
        }
      },
      {
        "s": {
          "c": 1,
          "r": 23
        },
        "e": {
          "c": 2,
          "r": 23
        }
      },
      {
        "s": {
          "c": 1,
          "r": 24
        },
        "e": {
          "c": 2,
          "r": 24
        }
      },
      {
        "s": {
          "c": 1,
          "r": 25
        },
        "e": {
          "c": 2,
          "r": 25
        }
      },
      {
        "s": {
          "c": 1,
          "r": 26
        },
        "e": {
          "c": 2,
          "r": 26
        }
      },
      {
        "s": {
          "c": 3,
          "r": 6
        },
        "e": {
          "c": 6,
          "r": 6
        }
      },
      {
        "s": {
          "c": 3,
          "r": 7
        },
        "e": {
          "c": 6,
          "r": 7
        }
      },
      {
        "s": {
          "c": 3,
          "r": 8
        },
        "e": {
          "c": 6,
          "r": 8
        }
      },
      {
        "s": {
          "c": 3,
          "r": 9
        },
        "e": {
          "c": 6,
          "r": 9
        }
      },
      {
        "s": {
          "c": 3,
          "r": 10
        },
        "e": {
          "c": 6,
          "r": 10
        }
      },
      {
        "s": {
          "c": 3,
          "r": 11
        },
        "e": {
          "c": 6,
          "r": 11
        }
      },
      {
        "s": {
          "c": 3,
          "r": 12
        },
        "e": {
          "c": 6,
          "r": 12
        }
      },
      {
        "s": {
          "c": 3,
          "r": 13
        },
        "e": {
          "c": 6,
          "r": 13
        }
      },
      {
        "s": {
          "c": 3,
          "r": 14
        },
        "e": {
          "c": 6,
          "r": 14
        }
      },
      {
        "s": {
          "c": 3,
          "r": 15
        },
        "e": {
          "c": 6,
          "r": 15
        }
      },
      {
        "s": {
          "c": 3,
          "r": 16
        },
        "e": {
          "c": 6,
          "r": 16
        }
      },
      {
        "s": {
          "c": 3,
          "r": 17
        },
        "e": {
          "c": 6,
          "r": 17
        }
      },
      {
        "s": {
          "c": 1,
          "r": 17
        },
        "e": {
          "c": 2,
          "r": 17
        }
      },
      {
        "s": {
          "c": 1,
          "r": 18
        },
        "e": {
          "c": 2,
          "r": 18
        }
      },
      {
        "s": {
          "c": 1,
          "r": 19
        },
        "e": {
          "c": 2,
          "r": 19
        }
      },
      {
        "s": {
          "c": 1,
          "r": 20
        },
        "e": {
          "c": 2,
          "r": 20
        }
      },
      {
        "s": {
          "c": 1,
          "r": 21
        },
        "e": {
          "c": 2,
          "r": 21
        }
      },
      {
        "s": {
          "c": 1,
          "r": 12
        },
        "e": {
          "c": 2,
          "r": 12
        }
      },
      {
        "s": {
          "c": 1,
          "r": 13
        },
        "e": {
          "c": 2,
          "r": 13
        }
      },
      {
        "s": {
          "c": 1,
          "r": 14
        },
        "e": {
          "c": 2,
          "r": 14
        }
      },
      {
        "s": {
          "c": 1,
          "r": 15
        },
        "e": {
          "c": 2,
          "r": 15
        }
      },
      {
        "s": {
          "c": 1,
          "r": 16
        },
        "e": {
          "c": 2,
          "r": 16
        }
      },
      {
        "s": {
          "c": 1,
          "r": 7
        },
        "e": {
          "c": 2,
          "r": 7
        }
      },
      {
        "s": {
          "c": 1,
          "r": 8
        },
        "e": {
          "c": 2,
          "r": 8
        }
      },
      {
        "s": {
          "c": 1,
          "r": 9
        },
        "e": {
          "c": 2,
          "r": 9
        }
      },
      {
        "s": {
          "c": 1,
          "r": 10
        },
        "e": {
          "c": 2,
          "r": 10
        }
      },
      {
        "s": {
          "c": 1,
          "r": 11
        },
        "e": {
          "c": 2,
          "r": 11
        }
      },
      {
        "s": {
          "c": 0,
          "r": 4
        },
        "e": {
          "c": 0,
          "r": 5
        }
      },
      {
        "s": {
          "c": 3,
          "r": 4
        },
        "e": {
          "c": 6,
          "r": 5
        }
      },
      {
        "s": {
          "c": 1,
          "r": 4
        },
        "e": {
          "c": 2,
          "r": 5
        }
      },
      {
        "s": {
          "c": 1,
          "r": 6
        },
        "e": {
          "c": 2,
          "r": 6
        }
      },
      {
        "s": {
          "c": 0,
          "r": 2
        },
        "e": {
          "c": 3,
          "r": 2
        }
      },
      {
        "s": {
          "c": 4,
          "r": 0
        },
        "e": {
          "c": 4,
          "r": 3
        }
      },
      {
        "s": {
          "c": 6,
          "r": 0
        },
        "e": {
          "c": 8,
          "r": 0
        }
      },
      {
        "s": {
          "c": 5,
          "r": 2
        },
        "e": {
          "c": 6,
          "r": 2
        }
      },
      {
        "s": {
          "c": 7,
          "r": 2
        },
        "e": {
          "c": 8,
          "r": 2
        }
      },
      {
        "s": {
          "c": 5,
          "r": 3
        },
        "e": {
          "c": 6,
          "r": 3
        }
      },
      {
        "s": {
          "c": 7,
          "r": 3
        },
        "e": {
          "c": 8,
          "r": 3
        }
      },
      {
        "s": {
          "c": 7,
          "r": 4
        },
        "e": {
          "c": 8,
          "r": 4
        }
      },
      {
        "s": {
          "c": 0,
          "r": 0
        },
        "e": {
          "c": 3,
          "r": 1
        }
      }] // cellMergescjn
  }
  for (let i = 0; i < cell.length; i++) { // drawAllCellBordercjn
    data[cell[i]] = {
      "v": "",
      "s": {
        "border": {
          "left": {
            "style": "medium"
          },
          "right": {
            "style": "medium"
          },
          "top": {
            "style": "medium"
          },
          "bottom": {
            "style": "medium"
          }
        }
      }
    }
  }
  // thereGiveCellValuecjn
  data.A1 = {
    "t": "s",
    "v": "HAOSEN",
    "s": {
      "alignment": {
        "vertical": "center",
        "horizontal": "center"
      },
      "font": {
        "sz" : 20,
        "bold": true
      },
      "border": {
        "left": {
          "style": "medium",
          "color": {
            "auto": 1
          }
        },
        "right": {
          "style": "medium",
          "color": {
            "auto": 1
          }
        },
        "top": {
          "style": "medium",
          "color": {
            "auto": 1
          }
        },
        "bottom": {
          "style": "medium",
          "color": {
            "auto": 1
          }
        }
      }
    }
  },
    data.E1 = {
      "t": "s",
      "v": "工艺、定额卡",
      "s": {
        "alignment": {
          "vertical": "center",
          "horizontal": "center"
        },
        "font": {
          "sz" : 20,
          "bold": true
        },
        "border": {
          "left": {
            "style": "medium",
            "color": {
              "auto": 1
            }
          },
          "right": {
            "style": "medium",
            "color": {
              "auto": 1
            }
          },
          "top": {
            "style": "medium",
            "color": {
              "auto": 1
            }
          },
          "bottom": {
            "style": "medium",
            "color": {
              "auto": 1
            }
          }
        }
      },
    },
    data.F1 = {
      "t": "s",
      "v": "零件图号",
      "s": {
        "border": {
          "left": {
            "style": "medium",
            "color": {
              "auto": 1
            }
          },
          "right": {
            "style": "medium",
            "color": {
              "auto": 1
            }
          },
          "top": {
            "style": "medium",
            "color": {
              "auto": 1
            }
          },
          "bottom": {
            "style": "medium",
            "color": {
              "auto": 1
            }
          }
        }
      }
    },
    data.G1 = {
      "t": "s",
      "v": Data[0].零件图号,
      "s": {
        "border": {
          "left": {
            "style": "medium",
            "color": {
              "auto": 1
            }
          },
          "right": {
            "style": "medium",
            "color": {
              "auto": 1
            }
          },
          "top": {
            "style": "medium",
            "color": {
              "auto": 1
            }
          },
          "bottom": {
            "style": "medium",
            "color": {
              "auto": 1
            }
          }
        }
      }
    },
    data.F2 = {
      "t": "s",
      "v": "零件名称",
      "s": {
        "border": {
          "left": {
            "style": "medium",
            "color": {
              "auto": 1
            }
          },
          "right": {
            "style": "medium",
            "color": {
              "auto": 1
            }
          },
          "top": {
            "style": "medium",
            "color": {
              "auto": 1
            }
          },
          "bottom": {
            "style": "medium",
            "color": {
              "auto": 1
            }
          }
        }
      }
    },
    data.G2 = {
      "t": "s",
      "v": Data[0].零件名称,
      "s": {
        "border": {
          "left": {
            "style": "medium",
          },
          "right": {
            "style": "medium",
          },
          "top": {
            "style": "medium",
          },
          "bottom": {
            "style": "medium",
          }
        }
      }
    },
    data.H2 = {
      "t": "s",
      "v": "数量",
      "s": {
        "border": {
          "left": {
            "style": "medium",
          },
          "right": {
            "style": "medium",
          },
          "top": {
            "style": "medium",
          },
          "bottom": {
            "style": "medium",
          }
        }
      }
    },
    data.I2 = {
      "t": "n",
      "v": Data[0].投产数量,
      "s": {
        "border": {
          "left": {
            "style": "medium",
          },
          "right": {
            "style": "medium",
          },
          "top": {
            "style": "medium",
          },
          "bottom": {
            "style": "medium",
          }
        }
      }
    },
    data.A3 = {
      "t": "s",
      "v": "大连豪森设备制造有限公司",
      "s": {
        "alignment": {
          "vertical": "center",
          "horizontal": "center"
        },
        "border": {
          "left": {
            "style": "medium",
          },
          "right": {
            "style": "medium",
          },
          "top": {
            "style": "medium",
          },
          "bottom": {
            "style": "medium",
          }
        }
      }
    },
    data.F3 = {
      "t": "s",
      "v": "材料",
      "s": {
        "border": {
          "left": {
            "style": "medium",
          },
          "right": {
            "style": "medium",
          },
          "top": {
            "style": "medium",
          },
          "bottom": {
            "style": "medium",
          }
        }
      }
    },
    data.H3 = {
      "t": "s",
      "v": "原材料规格",
      "s": {
        "border": {
          "left": {
            "style": "medium",
          },
          "right": {
            "style": "medium",
          },
          "top": {
            "style": "medium",
          },
          "bottom": {
            "style": "medium",
          }
        }
      }
    },
    data.A4 = {
      "t": "s",
      "v": "机床号",
      "s": {
        "border": {
          "left": {
            "style": "medium",
          },
          "right": {
            "style": "medium",
          },
          "top": {
            "style": "medium",
          },
          "bottom": {
            "style": "medium",
          }
        }
      }
    },
    data.B4 = {
      "t": "s",
      "v": Data[0].机床图号,
      "s": {
        "border": {
          "left": {
            "style": "medium",
          },
          "right": {
            "style": "medium",
          },
          "top": {
            "style": "medium",
          },
          "bottom": {
            "style": "medium",
          }
        }
      }
    },
    data.C4 = {
      "t": "s",
      "v": "组号",
      "s": {
        "border": {
          "left": {
            "style": "medium",
          },
          "right": {
            "style": "medium",
          },
          "top": {
            "style": "medium",
          },
          "bottom": {
            "style": "medium",
          }
        }
      }
    },
    data.D4 = {
      "t": "s",
      "v": Data[0].组号,
      "s": {
        "border": {
          "left": {
            "style": "medium",
          },
          "right": {
            "style": "medium",
          },
          "top": {
            "style": "medium",
          },
          "bottom": {
            "style": "medium",
          }
        }
      }
    },
    data.F4 = {
      "t": "s",
      "v": Data[0].材料,
      "s": {
        "border": {
          "left": {
            "style": "medium",
          },
          "right": {
            "style": "medium",
          },
          "top": {
            "style": "medium",
          },
          "bottom": {
            "style": "medium",
          }
        }
      }
    },
    data.A5 = {
      "t": "s",
      "v": "序次",
      "s": {
        "border": {
          "left": {
            "style": "medium",
          },
          "right": {
            "style": "medium",
          },
          "top": {
            "style": "medium",
          },
          "bottom": {
            "style": "medium",
          }
        }
      }
    },
    data.B5 = {
      "t": "s",
      "v": "工艺名称",
      "s": {
        "border": {
          "left": {
            "style": "medium",
          },
          "right": {
            "style": "medium",
          },
          "top": {
            "style": "medium",
          },
          "bottom": {
            "style": "medium",
          }
        }
      }
    },
    data.D5 = {
      "t": "s",
      "v": "工艺要求",
      "s": {
        "border": {
          "left": {
            "style": "medium",
          },
          "right": {
            "style": "medium",
          },
          "top": {
            "style": "medium",
          },
          "bottom": {
            "style": "medium",
          }
        }
      }
    },
    data.H5 = {
      "t": "s",
      "v": "定额工时",
      "s": {
        "border": {
          "left": {
            "style": "medium",
          },
          "right": {
            "style": "medium",
          },
          "top": {
            "style": "medium",
          },
          "bottom": {
            "style": "medium",
          }
        }
      }
    },
    data.H6 = {
      "t": "s",
      "v": "单件",
      "s": {
        "border": {
          "left": {
            "style": "medium",
          },
          "right": {
            "style": "medium",
          },
          "top": {
            "style": "medium",
          },
          "bottom": {
            "style": "medium",
          }
        }
      }
    },
    data.I6 = {
      "t": "s",
      "v": "准结",
      "s": {
        "border": {
          "left": {
            "style": "medium",
          },
          "right": {
            "style": "medium",
          },
          "top": {
            "style": "medium",
          },
          "bottom": {
            "style": "medium",
          }
        }
      }
    },
    data.A27 = {
      "t": "s",
      "v": "工艺员",
      "s": {
        "border": {
          "left": {
            "style": "medium",
          },
          "right": {
            "style": "medium",
          },
          "top": {
            "style": "medium",
          },
          "bottom": {
            "style": "medium",
          }
        }
      }
    },
    data.B27 = {
      "t": "s",
      "v": Data[0].工艺员,
      "s": {
        "border": {
          "left": {
            "style": "medium",
          },
          "right": {
            "style": "medium",
          },
          "top": {
            "style": "medium",
          },
          "bottom": {
            "style": "medium",
          }
        }
      }
    },
    data.D27 = {
      "t": "s",
      "v": "定额员",
      "s": {
        "border": {
          "left": {
            "style": "medium",
          },
          "right": {
            "style": "medium",
          },
          "top": {
            "style": "medium",
          },
          "bottom": {
            "style": "medium",
          }
        }
      }
    },
    data.E27 = {
      "t": "s",
      "v": Data[0].定额员,
      "s": {
        "border": {
          "left": {
            "style": "medium",
          },
          "right": {
            "style": "medium",
          },
          "top": {
            "style": "medium",
          },
          "bottom": {
            "style": "medium",
          }
        }
      }
    },
    data.F27 = {
      "t": "s",
      "v": "日期",
      "s": {
        "border": {
          "left": {
            "style": "medium",
          },
          "right": {
            "style": "medium",
          },
          "top": {
            "style": "medium",
          },
          "bottom": {
            "style": "medium",
          }
        }
      }
    },
    data.G27 = {
      "t": "n",
      "v": Data[0].工艺实际完成时间,
      "s": {
        "border": {
          "left": {
            "style": "medium",
          },
          "right": {
            "style": "medium",
          },
          "top": {
            "style": "medium",
          },
          "bottom": {
            "style": "medium",
          }
        }
      }
    }
  for (let i = 0; i < Data.length; i++) {
    data['A' + (i + 7)] = {
      "v": i + 1,
      "s": {
        "border": {
          "left": {
            "style": "medium",
          },
          "right": {
            "style": "medium",
          },
          "top": {
            "style": "medium",
          },
          "bottom": {
            "style": "medium",
          }
        }
      }
    }
    data['B' + (i + 7)] = {
      "v": Data[i].工艺名称,
      "s": {
        "border": {
          "left": {
            "style": "medium",
          },
          "right": {
            "style": "medium",
          },
          "top": {
            "style": "medium",
          },
          "bottom": {
            "style": "medium",
          }
        }
      }
    }
    data['D' + (i + 7)] = {
      "v": Data[i].工艺要求,
      "s": {
        "border": {
          "left": {
            "style": "medium",
          },
          "right": {
            "style": "medium",
          },
          "top": {
            "style": "medium",
          },
          "bottom": {
            "style": "medium",
          }
        }
      }
    }
    data['H' + (i + 7)] = {
      "v": Data[i].单件定额工时,
      "s": {
        "border": {
          "left": {
            "style": "medium",
          },
          "right": {
            "style": "medium",
          },
          "top": {
            "style": "medium",
          },
          "bottom": {
            "style": "medium",
          }
        }
      }
    }
    data['I' + (i + 7)] = {
      "v": Data[i].准结定额工时,
      "s": {
        "border": {
          "left": {
            "style": "medium",
          },
          "right": {
            "style": "medium",
          },
          "top": {
            "style": "medium",
          },
          "bottom": {
            "style": "medium",
          }
        }
      }
    }
  }

  data['!cols'] = [{'wch': 8},{'wch': 12},{'wch': 8},{'wch': 12},{'wch': 20},{'wch': 8},{'wch': 8},{'wch': 8},{'wch': 8}]
  var wb = { SheetNames: ['Sheet1'], Sheets: {}, Props: {} };
  wb.Sheets['Sheet1'] = data
  var wbout = XLSX.write(wb, {bookType: 'xlsx', bookSST: false, type: 'binary'});
  saveAs(new Blob([s2ab(wbout)], {type: "application/octet-stream"}), Title + ".xlsx");
}
