| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130 |
- // +---------------------------------------------------------------------
- // | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
- // +---------------------------------------------------------------------
- // | Copyright (c) 2016~2023 https://www.crmeb.com All rights reserved.
- // +---------------------------------------------------------------------
- // | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
- // +---------------------------------------------------------------------
- // | Author: CRMEB Team <admin@crmeb.com>
- // +---------------------------------------------------------------------
- /* eslint-disable */
- import XLSX from 'xlsx';
- function auto_width(ws, data) {
- /*set worksheet max width per col*/
- const colWidth = data.map((row) =>
- row.map((val) => {
- /*if null/undefined*/
- if (val == null) {
- return { wch: 10 };
- } else if (val.toString().charCodeAt(0) > 255) {
- /*if chinese*/
- return { wch: val.toString().length * 2 };
- } else {
- return { wch: val.toString().length };
- }
- }),
- );
- /*start in the first row*/
- let result = colWidth[0];
- for (let i = 1; i < colWidth.length; i++) {
- for (let j = 0; j < colWidth[i].length; j++) {
- if (result[j]['wch'] < colWidth[i][j]['wch']) {
- result[j]['wch'] = colWidth[i][j]['wch'];
- }
- }
- }
- ws['!cols'] = result;
- }
- function json_to_array(key, jsonData) {
- return jsonData.map((v) =>
- key.map((j) => {
- return v[j];
- }),
- );
- }
- // fix data,return string
- function fixdata(data) {
- let o = '';
- let l = 0;
- const w = 10240;
- for (; l < data.byteLength / w; ++l)
- o += String.fromCharCode.apply(null, new Uint8Array(data.slice(l * w, l * w + w)));
- o += String.fromCharCode.apply(null, new Uint8Array(data.slice(l * w)));
- return o;
- }
- // get head from excel file,return array
- function get_header_row(sheet) {
- const headers = [];
- const range = XLSX.utils.decode_range(sheet['!ref']);
- let C;
- const R = range.s.r; /* start in the first row */
- for (C = range.s.c; C <= range.e.c; ++C) {
- /* walk every column in the range */
- var cell = sheet[XLSX.utils.encode_cell({ c: C, r: R })]; /* find the cell in the first row */
- var hdr = 'UNKNOWN ' + C; // <-- replace with your desired default
- if (cell && cell.t) hdr = XLSX.utils.format_cell(cell);
- headers.push(hdr);
- }
- return headers;
- }
- export const export_table_to_excel = (id, filename) => {
- const table = document.getElementById(id);
- const wb = XLSX.utils.table_to_book(table);
- XLSX.writeFile(wb, filename);
- /* the second way */
- // const table = document.getElementById(id);
- // const wb = XLSX.utils.book_new();
- // const ws = XLSX.utils.table_to_sheet(table);
- // XLSX.utils.book_append_sheet(wb, ws, filename);
- // XLSX.writeFile(wb, filename);
- };
- export const export_json_to_excel = ({ data, key, title, filename, autoWidth }) => {
- const wb = XLSX.utils.book_new();
- data.unshift(title);
- const ws = XLSX.utils.json_to_sheet(data, { header: key, skipHeader: true });
- if (autoWidth) {
- const arr = json_to_array(key, data);
- auto_width(ws, arr);
- }
- XLSX.utils.book_append_sheet(wb, ws, filename);
- XLSX.writeFile(wb, filename + '.xlsx');
- };
- export const export_array_to_excel = ({ key, data, title, filename, autoWidth }) => {
- const wb = XLSX.utils.book_new();
- const arr = json_to_array(key, data);
- arr.unshift(title);
- const ws = XLSX.utils.aoa_to_sheet(arr);
- if (autoWidth) {
- auto_width(ws, arr);
- }
- XLSX.utils.book_append_sheet(wb, ws, filename);
- XLSX.writeFile(wb, filename + '.xlsx');
- };
- export const read = (data, type) => {
- /* if type == 'base64' must fix data first */
- // const fixedData = fixdata(data)
- // const workbook = XLSX.read(btoa(fixedData), { type: 'base64' })
- const workbook = XLSX.read(data, { type: type });
- const firstSheetName = workbook.SheetNames[0];
- const worksheet = workbook.Sheets[firstSheetName];
- const header = get_header_row(worksheet);
- const results = XLSX.utils.sheet_to_json(worksheet);
- return { header, results };
- };
- export default {
- export_table_to_excel,
- export_array_to_excel,
- export_json_to_excel,
- read,
- };
|