/*
* Copyright (C) 2022 Huawei Device Co., Ltd.
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
export class ExcelFormater {
static tmplCellXML = '{data}';
static base64 = function (s: any) {
return window.btoa(unescape(encodeURIComponent(s)));
};
static format(s: any, c: any): string {
return s.replace(/{(\w+)}/g, function (m: any, p: any) {
return c[p];
});
}
static createExcelRow(columns: any[], data: any): string {
let rowsXML = '';
rowsXML += '';
for (let k = 0; k < columns.length; k++) {
let dataIndex = columns[k].getAttribute('data-index');
let columnName = columns[k].getAttribute('title');
if (columnName == '') {
columnName = dataIndex;
}
let ctx = {
attributeStyleID: '',
nameType: 'String',
data: data ? data[dataIndex] || '' : columnName,
attributeFormula: '',
};
rowsXML += this.format(this.tmplCellXML, ctx);
}
rowsXML += '';
if (data && data.children != undefined && data.children.length > 0) {
data.children.forEach((child: any) => {
rowsXML += this.createExcelRow(columns, child);
});
}
return rowsXML;
}
static addImage(baseStr: string) {
return `${this.format(this.tmplCellXML, {
attributeStyleID: '',
nameType: 'String',
data: `