@evidential-fortune-sheet/fortune-excel
Version:
An Excel import/export import library for FortuneSheet
1,110 lines (1,109 loc) • 37.1 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.rgb2hex = exports.getObjType = exports.setMerge = exports.fromulaRef = void 0;
exports.getRangetxt = getRangetxt;
exports.getcellrange = getcellrange;
exports.getptToPxRatioByDPI = getptToPxRatioByDPI;
exports.getPxByEMUs = getPxByEMUs;
exports.getXmlAttibute = getXmlAttibute;
exports.getColumnWidthPixel = getColumnWidthPixel;
exports.getRowHeightPixel = getRowHeightPixel;
exports.LightenDarkenColor = LightenDarkenColor;
exports.generateRandomIndex = generateRandomIndex;
exports.escapeCharacter = escapeCharacter;
exports.isChinese = isChinese;
exports.isJapanese = isJapanese;
exports.isKoera = isKoera;
exports.isContainMultiType = isContainMultiType;
exports.getMultiSequenceToNum = getMultiSequenceToNum;
exports.getRegionSequence = getRegionSequence;
exports.getSqrefRawArrFormat = getSqrefRawArrFormat;
exports.getSingleSequenceToNum = getSingleSequenceToNum;
exports.getTransR1C1ToSequence = getTransR1C1ToSequence;
exports.getPeelOffX14 = getPeelOffX14;
exports.getMultiFormulaValue = getMultiFormulaValue;
var constant_1 = require("./constant");
function getRangetxt(range, sheettxt) {
var row0 = range["row"][0], row1 = range["row"][1];
var column0 = range["column"][0], column1 = range["column"][1];
if (row0 == null && row1 == null) {
return sheettxt + chatatABC(column0) + ":" + chatatABC(column1);
}
else if (column0 == null && column1 == null) {
return sheettxt + (row0 + 1) + ":" + (row1 + 1);
}
else {
if (column0 == column1 && row0 == row1) {
return sheettxt + chatatABC(column0) + (row0 + 1);
}
else {
return (sheettxt +
chatatABC(column0) +
(row0 + 1) +
":" +
chatatABC(column1) +
(row1 + 1));
}
}
}
function getcellrange(txt, sheets, sheetId) {
if (sheets === void 0) { sheets = {}; }
if (sheetId === void 0) { sheetId = "1"; }
var val = txt.split("!");
var sheettxt = "", rangetxt = "", sheetIndex = -1;
if (val.length > 1) {
sheettxt = val[0];
rangetxt = val[1];
var si = sheets[sheettxt];
if (si == null) {
sheetIndex = parseInt(sheetId);
}
else {
sheetIndex = parseInt(si);
}
}
else {
sheetIndex = parseInt(sheetId);
rangetxt = val[0];
}
if (rangetxt.indexOf(":") == -1) {
var row = parseInt(rangetxt.replace(/[^0-9]/g, "")) - 1;
var col = ABCatNum(rangetxt.replace(/[^A-Za-z]/g, ""));
if (!isNaN(row) && !isNaN(col)) {
return {
row: [row, row],
column: [col, col],
sheetIndex: sheetIndex,
};
}
else {
return null;
}
}
else {
var rangetxtArray = rangetxt.split(":");
var row = [], col = [];
row[0] = parseInt(rangetxtArray[0].replace(/[^0-9]/g, "")) - 1;
row[1] = parseInt(rangetxtArray[1].replace(/[^0-9]/g, "")) - 1;
// if (isNaN(row[0])) {
// row[0] = 0;
// }
// if (isNaN(row[1])) {
// row[1] = sheetdata.length - 1;
// }
if (row[0] > row[1]) {
return null;
}
col[0] = ABCatNum(rangetxtArray[0].replace(/[^A-Za-z]/g, ""));
col[1] = ABCatNum(rangetxtArray[1].replace(/[^A-Za-z]/g, ""));
// if (isNaN(col[0])) {
// col[0] = 0;
// }
// if (isNaN(col[1])) {
// col[1] = sheetdata[0].length - 1;
// }
if (col[0] > col[1]) {
return null;
}
return {
row: row,
column: col,
sheetIndex: sheetIndex,
};
}
}
//列下标 字母转数字
function ABCatNum(abc) {
abc = abc.toUpperCase();
var abc_len = abc.length;
if (abc_len == 0) {
return NaN;
}
var abc_array = abc.split("");
var wordlen = constant_1.columeHeader_word.length;
var ret = 0;
for (var i = abc_len - 1; i >= 0; i--) {
if (i == abc_len - 1) {
ret += constant_1.columeHeader_word_index[abc_array[i]];
}
else {
ret +=
Math.pow(wordlen, abc_len - i - 1) *
(constant_1.columeHeader_word_index[abc_array[i]] + 1);
}
}
return ret;
}
//列下标 数字转字母
function chatatABC(index) {
var wordlen = constant_1.columeHeader_word.length;
if (index < wordlen) {
return constant_1.columeHeader_word[index];
}
else {
var last = 0, pre = 0, ret = "";
var i = 1, n = 0;
while (index >= (wordlen / (wordlen - 1)) * (Math.pow(wordlen, i++) - 1)) {
n = i;
}
var index_ab = index - (wordlen / (wordlen - 1)) * (Math.pow(wordlen, n - 1) - 1); //970
last = index_ab + 1;
for (var x = n; x > 0; x--) {
var last1 = last, x1 = x; //-702=268, 3
if (x == 1) {
last1 = last1 % wordlen;
if (last1 == 0) {
last1 = 26;
}
return ret + constant_1.columeHeader_word[last1 - 1];
}
last1 = Math.ceil(last1 / Math.pow(wordlen, x - 1));
//last1 = last1 % wordlen;
ret += constant_1.columeHeader_word[last1 - 1];
if (x > 1) {
last = last - (last1 - 1) * wordlen;
}
}
}
}
/**
* @return ratio, default 0.75 1in = 2.54cm = 25.4mm = 72pt = 6pc, pt = 1/72 In, px = 1/dpi In
*/
function getptToPxRatioByDPI() {
return 72 / 96;
}
/**
* @emus EMUs, Excel drawing unit
* @return pixel
*/
function getPxByEMUs(emus) {
if (emus == null) {
return 0;
}
var inch = emus / 914400;
var pt = inch * 72;
var px = pt / getptToPxRatioByDPI();
return px;
}
/**
* @dom xml attribute object
* @attr attribute name
* @d if attribute is null, return default value
* @return attribute value
*/
function getXmlAttibute(dom, attr, d) {
var value = dom[attr];
value = value == null ? d : value;
return value;
}
/**
* @columnWidth Excel column width
* @return pixel column width
*/
function getColumnWidthPixel(columnWidth) {
var pix = Math.round((columnWidth - 0.83) * 8 + 5);
return pix;
}
/**
* @rowHeight Excel row height
* @return pixel row height
*/
function getRowHeightPixel(rowHeight) {
var pix = Math.round(rowHeight / getptToPxRatioByDPI());
return pix;
}
function LightenDarkenColor(sixColor, tint) {
var hex = sixColor.substring(sixColor.length - 6, sixColor.length);
var rgbArray = hexToRgbArray("#" + hex);
var hslArray = rgbToHsl(rgbArray[0], rgbArray[1], rgbArray[2]);
if (tint > 0) {
hslArray[2] = hslArray[2] * (1.0 - tint) + tint;
}
else if (tint < 0) {
hslArray[2] = hslArray[2] * (1.0 + tint);
}
else {
return "#" + hex;
}
var newRgbArray = hslToRgb(hslArray[0], hslArray[1], hslArray[2]);
return rgbToHex("RGB(" + newRgbArray.join(",") + ")");
}
function rgbToHex(rgb) {
//十六进制颜色值的正则表达式
var reg = /^#([0-9a-fA-f]{3}|[0-9a-fA-f]{6})$/;
// 如果是rgb颜色表示
if (/^(rgb|RGB)/.test(rgb)) {
var aColor = rgb.replace(/(?:\(|\)|rgb|RGB)*/g, "").split(",");
var strHex = "#";
for (var i = 0; i < aColor.length; i++) {
var hex = Number(aColor[i]).toString(16);
if (hex.length < 2) {
hex = "0" + hex;
}
strHex += hex;
}
if (strHex.length !== 7) {
strHex = rgb;
}
return strHex;
}
else if (reg.test(rgb)) {
var aNum = rgb.replace(/#/, "").split("");
if (aNum.length === 6) {
return rgb;
}
else if (aNum.length === 3) {
var numHex = "#";
for (var i = 0; i < aNum.length; i += 1) {
numHex += aNum[i] + aNum[i];
}
return numHex;
}
}
return rgb;
}
function hexToRgb(hex) {
var sColor = hex.toLowerCase();
//十六进制颜色值的正则表达式
var reg = /^#([0-9a-fA-f]{3}|[0-9a-fA-f]{6})$/;
// 如果是16进制颜色
if (sColor && reg.test(sColor)) {
if (sColor.length === 4) {
var sColorNew = "#";
for (var i = 1; i < 4; i += 1) {
sColorNew += sColor.slice(i, i + 1).concat(sColor.slice(i, i + 1));
}
sColor = sColorNew;
}
//处理六位的颜色值
var sColorChange = [];
for (var i = 1; i < 7; i += 2) {
sColorChange.push(parseInt("0x" + sColor.slice(i, i + 2)));
}
return "RGB(" + sColorChange.join(",") + ")";
}
return sColor;
}
function hexToRgbArray(hex) {
var sColor = hex.toLowerCase();
//十六进制颜色值的正则表达式
var reg = /^#([0-9a-fA-f]{3}|[0-9a-fA-f]{6})$/;
// 如果是16进制颜色
if (sColor && reg.test(sColor)) {
if (sColor.length === 4) {
var sColorNew = "#";
for (var i = 1; i < 4; i += 1) {
sColorNew += sColor.slice(i, i + 1).concat(sColor.slice(i, i + 1));
}
sColor = sColorNew;
}
//处理六位的颜色值
var sColorChange = [];
for (var i = 1; i < 7; i += 2) {
sColorChange.push(parseInt("0x" + sColor.slice(i, i + 2)));
}
return sColorChange;
}
return null;
}
/**
* HSL颜色值转换为RGB.
* 换算公式改编自 http://en.wikipedia.org/wiki/HSL_color_space.
* h, s, 和 l 设定在 [0, 1] 之间
* 返回的 r, g, 和 b 在 [0, 255]之间
*
* @param Number h 色相
* @param Number s 饱和度
* @param Number l 亮度
* @return Array RGB色值数值
*/
function hslToRgb(h, s, l) {
var r, g, b;
if (s == 0) {
r = g = b = l; // achromatic
}
else {
var hue2rgb = function hue2rgb(p, q, t) {
if (t < 0)
t += 1;
if (t > 1)
t -= 1;
if (t < 1 / 6)
return p + (q - p) * 6 * t;
if (t < 1 / 2)
return q;
if (t < 2 / 3)
return p + (q - p) * (2 / 3 - t) * 6;
return p;
};
var q = l < 0.5 ? l * (1 + s) : l + s - l * s;
var p = 2 * l - q;
r = hue2rgb(p, q, h + 1 / 3);
g = hue2rgb(p, q, h);
b = hue2rgb(p, q, h - 1 / 3);
}
return [Math.round(r * 255), Math.round(g * 255), Math.round(b * 255)];
}
/**
* RGB 颜色值转换为 HSL.
* 转换公式参考自 http://en.wikipedia.org/wiki/HSL_color_space.
* r, g, 和 b 需要在 [0, 255] 范围内
* 返回的 h, s, 和 l 在 [0, 1] 之间
*
* @param Number r 红色色值
* @param Number g 绿色色值
* @param Number b 蓝色色值
* @return Array HSL各值数组
*/
function rgbToHsl(r, g, b) {
(r /= 255), (g /= 255), (b /= 255);
var max = Math.max(r, g, b), min = Math.min(r, g, b);
var h, s, l = (max + min) / 2;
if (max == min) {
h = s = 0; // achromatic
}
else {
var d = max - min;
s = l > 0.5 ? d / (2 - max - min) : d / (max + min);
switch (max) {
case r:
h = (g - b) / d + (g < b ? 6 : 0);
break;
case g:
h = (b - r) / d + 2;
break;
case b:
h = (r - g) / d + 4;
break;
}
h /= 6;
}
return [h, s, l];
}
function generateRandomIndex(prefix) {
if (prefix == null) {
prefix = "Sheet";
}
var userAgent = window.navigator.userAgent
.replace(/[^a-zA-Z0-9]/g, "")
.split("");
var mid = "";
for (var i = 0; i < 5; i++) {
mid += userAgent[Math.round(Math.random() * (userAgent.length - 1))];
}
var time = new Date().getTime();
return prefix + "_" + mid + "_" + time;
}
function escapeCharacter(str) {
if (str == null || str.length == 0) {
return str;
}
return str
.replace(/&/g, "&")
.replace(/"/g, '"')
.replace(/</g, "<")
.replace(/>/g, ">")
.replace(/ /g, " ")
.replace(/'/g, "'")
.replace(/¡/g, "¡")
.replace(/¢/g, "¢")
.replace(/£/g, "£")
.replace(/¤/g, "¤")
.replace(/¥/g, "¥")
.replace(/¦/g, "¦")
.replace(/§/g, "§")
.replace(/¨/g, "¨")
.replace(/©/g, "©")
.replace(/ª/g, "ª")
.replace(/«/g, "«")
.replace(/¬/g, "¬")
.replace(/­/g, "")
.replace(/®/g, "®")
.replace(/¯/g, "¯")
.replace(/°/g, "°")
.replace(/±/g, "±")
.replace(/²/g, "²")
.replace(/³/g, "³")
.replace(/´/g, "´")
.replace(/µ/g, "µ")
.replace(/¶/g, "¶")
.replace(/·/g, "·")
.replace(/¸/g, "¸")
.replace(/¹/g, "¹")
.replace(/º/g, "º")
.replace(/»/g, "»")
.replace(/¼/g, "¼")
.replace(/½/g, "½")
.replace(/¾/g, "¾")
.replace(/¿/g, "¿")
.replace(/×/g, "×")
.replace(/÷/g, "÷")
.replace(/À/g, "À")
.replace(/Á/g, "Á")
.replace(/Â/g, "Â")
.replace(/Ã/g, "Ã")
.replace(/Ä/g, "Ä")
.replace(/Å/g, "Å")
.replace(/Æ/g, "Æ")
.replace(/Ç/g, "Ç")
.replace(/È/g, "È")
.replace(/É/g, "É")
.replace(/Ê/g, "Ê")
.replace(/Ë/g, "Ë")
.replace(/Ì/g, "Ì")
.replace(/Í/g, "Í")
.replace(/Î/g, "Î")
.replace(/Ï/g, "Ï")
.replace(/Ð/g, "Ð")
.replace(/Ñ/g, "Ñ")
.replace(/Ò/g, "Ò")
.replace(/Ó/g, "Ó")
.replace(/Ô/g, "Ô")
.replace(/Õ/g, "Õ")
.replace(/Ö/g, "Ö")
.replace(/Ø/g, "Ø")
.replace(/Ù/g, "Ù")
.replace(/Ú/g, "Ú")
.replace(/Û/g, "Û")
.replace(/Ü/g, "Ü")
.replace(/Ý/g, "Ý")
.replace(/Þ/g, "Þ")
.replace(/ß/g, "ß")
.replace(/à/g, "à")
.replace(/á/g, "á")
.replace(/â/g, "â")
.replace(/ã/g, "ã")
.replace(/ä/g, "ä")
.replace(/å/g, "å")
.replace(/æ/g, "æ")
.replace(/ç/g, "ç")
.replace(/è/g, "è")
.replace(/é/g, "é")
.replace(/ê/g, "ê")
.replace(/ë/g, "ë")
.replace(/ì/g, "ì")
.replace(/í/g, "í")
.replace(/î/g, "î")
.replace(/ï/g, "ï")
.replace(/ð/g, "ð")
.replace(/ñ/g, "ñ")
.replace(/ò/g, "ò")
.replace(/ó/g, "ó")
.replace(/ô/g, "ô")
.replace(/õ/g, "õ")
.replace(/ö/g, "ö")
.replace(/ø/g, "ø")
.replace(/ù/g, "ù")
.replace(/ú/g, "ú")
.replace(/û/g, "û")
.replace(/ü/g, "ü")
.replace(/ý/g, "ý")
.replace(/þ/g, "þ")
.replace(/ÿ/g, "ÿ");
}
var fromulaRef = /** @class */ (function () {
function fromulaRef() {
}
fromulaRef.trim = function (str) {
if (str == null) {
str = "";
}
return str.replace(/(^\s*)|(\s*$)/g, "");
};
fromulaRef.functionCopy = function (txt, mode, step) {
var _this = this;
if (_this.operatorjson == null) {
var arr = _this.operator.split("|"), op = {};
for (var i_1 = 0; i_1 < arr.length; i_1++) {
op[arr[i_1].toString()] = 1;
}
_this.operatorjson = op;
}
if (mode == null) {
mode = "down";
}
if (step == null) {
step = 1;
}
if (txt.substr(0, 1) == "=") {
txt = txt.substr(1);
}
var funcstack = txt.split("");
var i = 0, str = "", function_str = "", ispassby = true;
var matchConfig = {
bracket: 0,
comma: 0,
squote: 0,
dquote: 0,
};
while (i < funcstack.length) {
var s = funcstack[i];
if (s == "(" && matchConfig.dquote == 0) {
matchConfig.bracket += 1;
if (str.length > 0) {
function_str += str + "(";
}
else {
function_str += "(";
}
str = "";
}
else if (s == ")" && matchConfig.dquote == 0) {
matchConfig.bracket -= 1;
function_str += _this.functionCopy(str, mode, step) + ")";
str = "";
}
else if (s == '"' && matchConfig.squote == 0) {
if (matchConfig.dquote > 0) {
function_str += str + '"';
matchConfig.dquote -= 1;
str = "";
}
else {
matchConfig.dquote += 1;
str += '"';
}
}
else if (s == "," && matchConfig.dquote == 0) {
function_str += _this.functionCopy(str, mode, step) + ",";
str = "";
}
else if (s == "&" && matchConfig.dquote == 0) {
if (str.length > 0) {
function_str += _this.functionCopy(str, mode, step) + "&";
str = "";
}
else {
function_str += "&";
}
}
else if (s in _this.operatorjson && matchConfig.dquote == 0) {
var s_next = "";
if (i + 1 < funcstack.length) {
s_next = funcstack[i + 1];
}
var p = i - 1, s_pre = null;
if (p >= 0) {
do {
s_pre = funcstack[p--];
} while (p >= 0 && s_pre == " ");
}
if (s + s_next in _this.operatorjson) {
if (str.length > 0) {
function_str += _this.functionCopy(str, mode, step) + s + s_next;
str = "";
}
else {
function_str += s + s_next;
}
i++;
}
else if (!/[^0-9]/.test(s_next) &&
s == "-" &&
(s_pre == "(" ||
s_pre == null ||
s_pre == "," ||
s_pre == " " ||
s_pre in _this.operatorjson)) {
str += s;
}
else {
if (str.length > 0) {
function_str += _this.functionCopy(str, mode, step) + s;
str = "";
}
else {
function_str += s;
}
}
}
else {
str += s;
}
if (i == funcstack.length - 1) {
if (_this.iscelldata(_this.trim(str))) {
if (mode == "down") {
function_str += _this.downparam(_this.trim(str), step);
}
else if (mode == "up") {
function_str += _this.upparam(_this.trim(str), step);
}
else if (mode == "left") {
function_str += _this.leftparam(_this.trim(str), step);
}
else if (mode == "right") {
function_str += _this.rightparam(_this.trim(str), step);
}
}
else {
function_str += _this.trim(str);
}
}
i++;
}
return function_str;
};
fromulaRef.downparam = function (txt, step) {
return this.updateparam("d", txt, step);
};
fromulaRef.upparam = function (txt, step) {
return this.updateparam("u", txt, step);
};
fromulaRef.leftparam = function (txt, step) {
return this.updateparam("l", txt, step);
};
fromulaRef.rightparam = function (txt, step) {
return this.updateparam("r", txt, step);
};
fromulaRef.updateparam = function (orient, txt, step) {
var _this = this;
var val = txt.split("!"), rangetxt, prefix = "";
if (val.length > 1) {
rangetxt = val[1];
prefix = val[0] + "!";
}
else {
rangetxt = val[0];
}
if (rangetxt.indexOf(":") == -1) {
var row = parseInt(rangetxt.replace(/[^0-9]/g, ""));
var col = ABCatNum(rangetxt.replace(/[^A-Za-z]/g, ""));
var freezonFuc = _this.isfreezonFuc(rangetxt);
var $row = freezonFuc[0] ? "$" : "", $col = freezonFuc[1] ? "$" : "";
if (orient == "u" && !freezonFuc[0]) {
row -= step;
}
else if (orient == "r" && !freezonFuc[1]) {
col += step;
}
else if (orient == "l" && !freezonFuc[1]) {
col -= step;
}
else if (!freezonFuc[0]) {
row += step;
}
if (row < 0 || col < 0) {
return _this.error.r;
}
if (!isNaN(row) && !isNaN(col)) {
return prefix + $col + chatatABC(col) + $row + row;
}
else if (!isNaN(row)) {
return prefix + $row + row;
}
else if (!isNaN(col)) {
return prefix + $col + chatatABC(col);
}
else {
return txt;
}
}
else {
rangetxt = rangetxt.split(":");
var row = [], col = [];
row[0] = parseInt(rangetxt[0].replace(/[^0-9]/g, ""));
row[1] = parseInt(rangetxt[1].replace(/[^0-9]/g, ""));
if (row[0] > row[1]) {
return txt;
}
col[0] = ABCatNum(rangetxt[0].replace(/[^A-Za-z]/g, ""));
col[1] = ABCatNum(rangetxt[1].replace(/[^A-Za-z]/g, ""));
if (col[0] > col[1]) {
return txt;
}
var freezonFuc0 = _this.isfreezonFuc(rangetxt[0]);
var freezonFuc1 = _this.isfreezonFuc(rangetxt[1]);
var $row0 = freezonFuc0[0] ? "$" : "", $col0 = freezonFuc0[1] ? "$" : "";
var $row1 = freezonFuc1[0] ? "$" : "", $col1 = freezonFuc1[1] ? "$" : "";
if (orient == "u") {
if (!freezonFuc0[0]) {
row[0] -= step;
}
if (!freezonFuc1[0]) {
row[1] -= step;
}
}
else if (orient == "r") {
if (!freezonFuc0[1]) {
col[0] += step;
}
if (!freezonFuc1[1]) {
col[1] += step;
}
}
else if (orient == "l") {
if (!freezonFuc0[1]) {
col[0] -= step;
}
if (!freezonFuc1[1]) {
col[1] -= step;
}
}
else {
if (!freezonFuc0[0]) {
row[0] += step;
}
if (!freezonFuc1[0]) {
row[1] += step;
}
}
if (row[0] < 0 || col[0] < 0) {
return _this.error.r;
}
if (isNaN(col[0]) && isNaN(col[1])) {
return prefix + $row0 + row[0] + ":" + $row1 + row[1];
}
else if (isNaN(row[0]) && isNaN(row[1])) {
return (prefix + $col0 + chatatABC(col[0]) + ":" + $col1 + chatatABC(col[1]));
}
else {
return (prefix +
$col0 +
chatatABC(col[0]) +
$row0 +
row[0] +
":" +
$col1 +
chatatABC(col[1]) +
$row1 +
row[1]);
}
}
};
fromulaRef.iscelldata = function (txt) {
//判断是否为单元格格式
var val = txt.split("!"), rangetxt;
if (val.length > 1) {
rangetxt = val[1];
}
else {
rangetxt = val[0];
}
var reg_cell = /^(([a-zA-Z]+)|([$][a-zA-Z]+))(([0-9]+)|([$][0-9]+))$/g; //增加正则判断单元格为字母+数字的格式:如 A1:B3
var reg_cellRange = /^(((([a-zA-Z]+)|([$][a-zA-Z]+))(([0-9]+)|([$][0-9]+)))|((([a-zA-Z]+)|([$][a-zA-Z]+))))$/g; //增加正则判断单元格为字母+数字或字母的格式:如 A1:B3,A:A
if (rangetxt.indexOf(":") == -1) {
var row = parseInt(rangetxt.replace(/[^0-9]/g, "")) - 1;
var col = ABCatNum(rangetxt.replace(/[^A-Za-z]/g, ""));
if (!isNaN(row) && !isNaN(col) && rangetxt.toString().match(reg_cell)) {
return true;
}
else if (!isNaN(row)) {
return false;
}
else if (!isNaN(col)) {
return false;
}
else {
return false;
}
}
else {
reg_cellRange =
/^(((([a-zA-Z]+)|([$][a-zA-Z]+))(([0-9]+)|([$][0-9]+)))|((([a-zA-Z]+)|([$][a-zA-Z]+)))|((([0-9]+)|([$][0-9]+s))))$/g;
rangetxt = rangetxt.split(":");
var row = [], col = [];
row[0] = parseInt(rangetxt[0].replace(/[^0-9]/g, "")) - 1;
row[1] = parseInt(rangetxt[1].replace(/[^0-9]/g, "")) - 1;
if (row[0] > row[1]) {
return false;
}
col[0] = ABCatNum(rangetxt[0].replace(/[^A-Za-z]/g, ""));
col[1] = ABCatNum(rangetxt[1].replace(/[^A-Za-z]/g, ""));
if (col[0] > col[1]) {
return false;
}
if (rangetxt[0].toString().match(reg_cellRange) &&
rangetxt[1].toString().match(reg_cellRange)) {
return true;
}
else {
return false;
}
}
};
fromulaRef.isfreezonFuc = function (txt) {
var row = txt.replace(/[^0-9]/g, "");
var col = txt.replace(/[^A-Za-z]/g, "");
var row$ = txt.substr(txt.indexOf(row) - 1, 1);
var col$ = txt.substr(txt.indexOf(col) - 1, 1);
var ret = [false, false];
if (row$ == "$") {
ret[0] = true;
}
if (col$ == "$") {
ret[1] = true;
}
return ret;
};
fromulaRef.operator = "==|!=|<>|<=|>=|=|+|-|>|<|/|*|%|&|^";
fromulaRef.error = {
v: "#VALUE!", //错误的参数或运算符
n: "#NAME?", //公式名称错误
na: "#N/A", //函数或公式中没有可用数值
r: "#REF!", //删除了由其他公式引用的单元格
d: "#DIV/0!", //除数是0或空单元格
nm: "#NUM!", //当公式或函数中某个数字有问题时
nl: "#NULL!", //交叉运算符(空格)使用不正确
sp: "#SPILL!", //数组范围有其它值
};
fromulaRef.operatorjson = null;
return fromulaRef;
}());
exports.fromulaRef = fromulaRef;
function isChinese(temp) {
var re = /[^\u4e00-\u9fa5]/;
var reg = /[\u3002|\uff1f|\uff01|\uff0c|\u3001|\uff1b|\uff1a|\u201c|\u201d|\u2018|\u2019|\uff08|\uff09|\u300a|\u300b|\u3008|\u3009|\u3010|\u3011|\u300e|\u300f|\u300c|\u300d|\ufe43|\ufe44|\u3014|\u3015|\u2026|\u2014|\uff5e|\ufe4f|\uffe5]/;
if (reg.test(temp))
return true;
if (re.test(temp))
return false;
return true;
}
function isJapanese(temp) {
var re = /[^\u0800-\u4e00]/;
if (re.test(temp))
return false;
return true;
}
function isKoera(chr) {
if ((chr > 0x3130 && chr < 0x318f) || (chr >= 0xac00 && chr <= 0xd7a3)) {
return true;
}
return false;
}
function isContainMultiType(str) {
var isUnicode = false;
if (escape(str).indexOf("%u") > -1) {
isUnicode = true;
}
var isNot = false;
var reg = /[0-9a-z]/gi;
if (reg.test(str)) {
isNot = true;
}
var reEnSign = /[\x00-\xff]+/g;
if (reEnSign.test(str)) {
isNot = true;
}
if (isUnicode && isNot) {
return true;
}
return false;
}
/**
* multi sequence conversion
* example:
* 1、E14 -> 13_4
* 2、E14 J14 O14 T14 Y14 AD14 AI14 AN14 AS14 AX14 ->
* ['13_4', '13_9','13_14', '13_19', '13_24', '13_3', '13_8', '13_13', '13_18', '13_23']
* 3、E46:E47 -> ['45_4', '46_4']
*
* @param {string} sqref - before sequence
* @returns {string[]}
*/
function getMultiSequenceToNum(sqref) {
if (!sqref || (sqref === null || sqref === void 0 ? void 0 : sqref.length) <= 0)
return [];
sqref = sqref.toUpperCase();
var sqrefRawArr = sqref.split(" ");
var sqrefArr = sqrefRawArr.filter(function (e) { return e && e.trim(); });
var sqrefLastArr = getSqrefRawArrFormat(sqrefArr);
var resArr = [];
for (var i = 0; i < sqrefLastArr.length; i++) {
var _res = getSingleSequenceToNum(sqrefLastArr[i]);
if (_res)
resArr.push(_res);
}
return resArr;
}
/**
* get region sequence
* example:
* 1、[A1:C2'] -> ['A1', 'A2', 'B1', 'B2', 'C1', 'C2']
*
* @param {string[]} arr - formats arr
* @returns {string[]} - after arr
*/
function getRegionSequence(arr) {
var _a, _b;
var formatArr = [];
var regEn = new RegExp(/[A-Z]+|[0-9]+/g);
var startArr = (_a = arr[0]) === null || _a === void 0 ? void 0 : _a.match(regEn);
var lastArr = (_b = arr[1]) === null || _b === void 0 ? void 0 : _b.match(regEn);
var columnMax = Math.max.apply(Math, [ABCatNum(startArr[0]), ABCatNum(lastArr[0])]);
var columnMin = Math.min.apply(Math, [ABCatNum(startArr[0]), ABCatNum(lastArr[0])]);
var rowMax = Math.max.apply(Math, [parseInt(startArr[1]), parseInt(lastArr[1])]);
var rowMin = Math.min.apply(Math, [parseInt(startArr[1]), parseInt(lastArr[1])]);
for (var i = columnMin; i <= columnMax; i++) {
for (var j = rowMin; j <= rowMax; j++) {
formatArr.push("".concat(chatatABC(i)).concat(j));
}
}
return formatArr;
}
/**
* unified processing of conversion formats
* example:
* 1、['E38', 'A1:C2'] -> ['E38', 'A1', 'A2', 'B1', 'B2', 'C1', 'C2']
*
* @param {string[]} arr - formats arr
* @returns {string[]} - after arr
*/
function getSqrefRawArrFormat(arr) {
arr === null || arr === void 0 ? void 0 : arr.map(function (el) {
if (el.includes(":")) {
var tempArr = el.split(":");
if ((tempArr === null || tempArr === void 0 ? void 0 : tempArr.length) === 2) {
arr = arr.concat(getRegionSequence(tempArr));
arr.splice(arr.indexOf(el), 1);
}
}
});
var resultArr = arr.filter(function (value, index, array) { return array.indexOf(value) === index; });
return resultArr;
}
/**
* single sequence to number
* example:
* 1、A1 -> 0_0
* 2、ES14 -> 13_4
*
* @param {string} sqref - before sequence
* @returns {string} - after sequence
*/
function getSingleSequenceToNum(sqref) {
var sqrefArray = sqref.match(/[A-Z]+|[0-9]+/g);
var sqrefLen = sqrefArray.length;
var regEn = new RegExp("^[A-Z]+$");
var ret = "";
for (var i = sqrefLen - 1; i >= 0; i--) {
var cur = sqrefArray[i];
if (regEn.test(cur)) {
ret += ABCatNum(cur) + "_";
}
else {
ret += parseInt(cur) - 1 + "_";
}
}
return ret.substring(0, ret.length - 1);
}
/**
* R1C1 to Sequence
* example: sheet2!R1C1 => sheet!A1
*
* @param {string} value - R1C1 value
* @returns
*/
function getTransR1C1ToSequence(value) {
if (!value && (value === null || value === void 0 ? void 0 : value.length) <= 0)
return "";
var len = value.length;
var index = value.lastIndexOf("!");
var valueArr = [value.slice(0, index), value.slice(index + 1, len)];
var repStr = valueArr[1] || "";
var indexR = repStr.indexOf("R");
var indexC = repStr.indexOf("C");
var row = Number(repStr.slice(indexR + 1, indexC));
var column = chatatABC(Number(repStr.slice(indexC + 1, repStr === null || repStr === void 0 ? void 0 : repStr.length)) - 1);
return "".concat(valueArr[0], "!").concat(column).concat(row);
}
/**
* strip x14 format data
*
* @param {string} value
* @returns {Object} - { formula, sqref }
*/
function getPeelOffX14(value) {
var _a;
if (!value || (value === null || value === void 0 ? void 0 : value.length) <= 0)
return {};
// formula
var formulaReg = new RegExp("</x14:formula[^]>", "g");
var lastIndex = (_a = value.match(formulaReg)) === null || _a === void 0 ? void 0 : _a.length;
var lastValue = "</x14:formula".concat(lastIndex, ">");
var lastValueEnd = value.indexOf(lastValue);
var formulaValue = value.substring(0, lastValueEnd + lastValue.length);
formulaValue = formulaValue
.replace(/<xm:f>/g, "")
.replace(/<\/xm:f>/g, "")
.replace(/x14:/g, "")
.replace(/\/x14:/g, "");
var formula = formulaValue;
// sqref
var xmSqrefLen = "<xm:sqref>".length;
var sqrefStart = value.indexOf("<xm:sqref>");
var sqrefEnd = value.indexOf("</xm:sqref>");
var sqref = value.substring(sqrefStart + xmSqrefLen, sqrefEnd);
return {
formula: formula,
sqref: sqref,
};
}
/**
* get the value in the formula
*
* @param {string} value - extracted value
* @returns {string[]}
*/
function getMultiFormulaValue(value) {
var _a, _b;
if (!value || (value === null || value === void 0 ? void 0 : value.length) <= 0)
return [];
var lenReg = new RegExp("formula", "g");
var len = (((_a = value.match(lenReg)) === null || _a === void 0 ? void 0 : _a.length) || 0) / 2;
if (len === 0)
return [];
var retArr = [];
for (var i = 1; i <= len; i++) {
var startLen = (_b = "<formula".concat(i, ">")) === null || _b === void 0 ? void 0 : _b.length;
var start = value.indexOf("<formula".concat(i, ">"));
var end = value.indexOf("</formula".concat(i, ">"));
var _value = value.substring(start + startLen, end);
retArr.push(escapeCharacter(_value.replace(/"|^\"|\"$/g, "")));
}
return retArr;
}
var setMerge = function (luckyMerge, worksheet) {
if (luckyMerge === void 0) { luckyMerge = {}; }
var mergearr = Object.values(luckyMerge);
mergearr.forEach(function (elem) {
// elem格式:{r: 0, c: 0, rs: 1, cs: 2}
// 按开始行,开始列,结束行,结束列合并(相当于 K10:M12)
worksheet.mergeCells(elem.r + 1, elem.c + 1, elem.r + elem.rs, elem.c + elem.cs);
});
};
exports.setMerge = setMerge;
//获取数据类型
var getObjType = function (obj) {
var toString = Object.prototype.toString;
var map = {
"[object Boolean]": "boolean",
"[object Number]": "number",
"[object String]": "string",
"[object Function]": "function",
"[object Array]": "array",
"[object Date]": "date",
"[object RegExp]": "regExp",
"[object Undefined]": "undefined",
"[object Null]": "null",
"[object Object]": "object",
};
return map[toString.call(obj)];
};
exports.getObjType = getObjType;
//转换颜色
var rgb2hex = function (rgb) {
if (rgb.charAt(0) == "#") {
return rgb;
}
var ds = rgb.split(/\D+/);
var decimal = Number(ds[1]) * 65536 + Number(ds[2]) * 256 + Number(ds[3]);
return "#" + zero_fill_hex(decimal, 6);
function zero_fill_hex(num, digits) {
var s = num.toString(16);
while (s.length < digits)
s = "0" + s;
return s;
}
};
exports.rgb2hex = rgb2hex;