From 7f419ac9eea9523aa1254f6cf7a147815ff76ae7 Mon Sep 17 00:00:00 2001 From: manikk Date: Thu, 24 May 2018 10:54:52 +0530 Subject: [PATCH] Increasing the no. of columns support --- src/scripts/models/worksheet-model.js | 3 +- src/scripts/utils/file-util.js | 39 +- tests/utils/file-util.test.js | 660 ++++++++++++++++++++++++++ 3 files changed, 700 insertions(+), 2 deletions(-) diff --git a/src/scripts/models/worksheet-model.js b/src/scripts/models/worksheet-model.js index 7a8f432..5550605 100644 --- a/src/scripts/models/worksheet-model.js +++ b/src/scripts/models/worksheet-model.js @@ -60,7 +60,8 @@ window.JSFile = window.JSFile || {}; self[cell_letter + cell_number] = new module.WorksheetCell({type: 's', value: item.value}); // increment letter - cell_letter = module.FileUtil.nextLetter(cell_letter); + //cell_letter = module.FileUtil.nextLetter(cell_letter); + cell_letter = module.FileUtil.nextColumn(cell_letter); // count letters _letter_count++; diff --git a/src/scripts/utils/file-util.js b/src/scripts/utils/file-util.js index 34ff7ca..a65572f 100644 --- a/src/scripts/utils/file-util.js +++ b/src/scripts/utils/file-util.js @@ -259,7 +259,7 @@ window.JSFile = window.JSFile || {}; } // increment letter - letter = self.nextLetter(letter); + letter = self.nextColumn(letter); }); }); @@ -439,6 +439,43 @@ window.JSFile = window.JSFile || {}; return result; }; + + this.nextColumn = function(currentColumn) { + //Logic only works upto two series column - A ... ZZ + //As it supports around 702 columns, in which practically we wouldn't hit + + var charCode; + + // convert letter to upper case + currentColumn = currentColumn.toUpperCase(); + var nxtColumn = ""; + + if(currentColumn.length > 2) { + console.warn("Only 702 columns are supported"); + } + + if(currentColumn[currentColumn.length -1] === "Z" ) { + // Generate unicode value for given character + charCode = currentColumn.charCodeAt(0); + var suffix = "A"; + if(charCode < 90) { + // Convert integer to character + nxtColumn = String.fromCharCode(charCode + 1) + suffix; + } else { + suffix += "A"; + nxtColumn = suffix; + } + + } else { + // Generate unicode value for given character + charCode = currentColumn[currentColumn.length -1].charCodeAt(0); + var prefix = currentColumn.slice(0, -1); + // Convert integer to character + nxtColumn = prefix + String.fromCharCode(charCode + 1); + } + + return nxtColumn; + }; }; // create singleton diff --git a/tests/utils/file-util.test.js b/tests/utils/file-util.test.js index 99f6b20..3fb7cb6 100644 --- a/tests/utils/file-util.test.js +++ b/tests/utils/file-util.test.js @@ -309,6 +309,7 @@ describe("FileUtil", function() { var result = Util.nextLetter("a"); expect(result).toEqual("b"); }); + it("should return AB", function () { var result = Util.nextLetter("AA"); expect(result).toEqual("AB"); @@ -521,4 +522,663 @@ describe("FileUtil", function() { expect(result).toEqual('application/vnd.oasis.opendocument.spreadsheet'); }); }); + + //-------------------------------------------- + // nextColumn + //-------------------------------------------- + + describe("nextColumn", function () { + + it("should return B", function () { + var result = Util.nextColumn("A"); + expect(result).toEqual("B"); + }); + + it("should return C", function () { + var result = Util.nextColumn("B"); + expect(result).toEqual("C"); + }); + + it("should return J", function () { + var result = Util.nextColumn("I"); + expect(result).toEqual("J"); + }); + + it("should return N", function () { + var result = Util.nextColumn("M"); + expect(result).toEqual("N"); + }); + + it("should return AA", function () { + var result = Util.nextColumn("Z"); + expect(result).toEqual("AA"); + }); + + it("should return AB", function () { + var result = Util.nextColumn("AA"); + expect(result).toEqual("AB"); + }); + + it("should return AC", function () { + var result = Util.nextColumn("AB"); + expect(result).toEqual("AC"); + }); + + it("should return AK", function () { + var result = Util.nextColumn("AJ"); + expect(result).toEqual("AK"); + }); + + it("should return AN", function () { + var result = Util.nextColumn("AM"); + expect(result).toEqual("AN"); + }); + + it("should return BA", function () { + var result = Util.nextColumn("AZ"); + expect(result).toEqual("BA"); + }); + + it("should return BB", function () { + var result = Util.nextColumn("BA"); + expect(result).toEqual("BB"); + }); + + it("should return BC", function () { + var result = Util.nextColumn("BB"); + expect(result).toEqual("BC"); + }); + + it("should return BK", function () { + var result = Util.nextColumn("BJ"); + expect(result).toEqual("BK"); + }); + + it("should return BN", function () { + var result = Util.nextColumn("BM"); + expect(result).toEqual("BN"); + }); + + it("should return CA", function () { + var result = Util.nextColumn("BZ"); + expect(result).toEqual("CA"); + }); + + it("should return CB", function () { + var result = Util.nextColumn("CA"); + expect(result).toEqual("CB"); + }); + + it("should return CC", function () { + var result = Util.nextColumn("CB"); + expect(result).toEqual("CC"); + }); + + it("should return CK", function () { + var result = Util.nextColumn("CJ"); + expect(result).toEqual("CK"); + }); + + it("should return CN", function () { + var result = Util.nextColumn("CM"); + expect(result).toEqual("CN"); + }); + + it("should return DA", function () { + var result = Util.nextColumn("CZ"); + expect(result).toEqual("DA"); + }); + + it("should return DB", function () { + var result = Util.nextColumn("DA"); + expect(result).toEqual("DB"); + }); + + it("should return DC", function () { + var result = Util.nextColumn("DB"); + expect(result).toEqual("DC"); + }); + + it("should return DK", function () { + var result = Util.nextColumn("DJ"); + expect(result).toEqual("DK"); + }); + + it("should return DN", function () { + var result = Util.nextColumn("DM"); + expect(result).toEqual("DN"); + }); + + it("should return EA", function () { + var result = Util.nextColumn("DZ"); + expect(result).toEqual("EA"); + }); + + it("should return EB", function () { + var result = Util.nextColumn("EA"); + expect(result).toEqual("EB"); + }); + + it("should return EC", function () { + var result = Util.nextColumn("EB"); + expect(result).toEqual("EC"); + }); + + it("should return EK", function () { + var result = Util.nextColumn("EJ"); + expect(result).toEqual("EK"); + }); + + it("should return EN", function () { + var result = Util.nextColumn("EM"); + expect(result).toEqual("EN"); + }); + + it("should return FA", function () { + var result = Util.nextColumn("EZ"); + expect(result).toEqual("FA"); + }); + + it("should return FB", function () { + var result = Util.nextColumn("FA"); + expect(result).toEqual("FB"); + }); + + it("should return FC", function () { + var result = Util.nextColumn("FB"); + expect(result).toEqual("FC"); + }); + + it("should return FK", function () { + var result = Util.nextColumn("FJ"); + expect(result).toEqual("FK"); + }); + + it("should return FN", function () { + var result = Util.nextColumn("FM"); + expect(result).toEqual("FN"); + }); + + it("should return GA", function () { + var result = Util.nextColumn("FZ"); + expect(result).toEqual("GA"); + }); + + it("should return GB", function () { + var result = Util.nextColumn("GA"); + expect(result).toEqual("GB"); + }); + + it("should return GC", function () { + var result = Util.nextColumn("GB"); + expect(result).toEqual("GC"); + }); + + it("should return GK", function () { + var result = Util.nextColumn("GJ"); + expect(result).toEqual("GK"); + }); + + it("should return GN", function () { + var result = Util.nextColumn("GM"); + expect(result).toEqual("GN"); + }); + + it("should return HA", function () { + var result = Util.nextColumn("GZ"); + expect(result).toEqual("HA"); + }); + + it("should return HB", function () { + var result = Util.nextColumn("HA"); + expect(result).toEqual("HB"); + }); + + it("should return HC", function () { + var result = Util.nextColumn("HB"); + expect(result).toEqual("HC"); + }); + + it("should return HK", function () { + var result = Util.nextColumn("HJ"); + expect(result).toEqual("HK"); + }); + + it("should return HN", function () { + var result = Util.nextColumn("HM"); + expect(result).toEqual("HN"); + }); + + it("should return IA", function () { + var result = Util.nextColumn("HZ"); + expect(result).toEqual("IA"); + }); + + it("should return IB", function () { + var result = Util.nextColumn("IA"); + expect(result).toEqual("IB"); + }); + + it("should return IC", function () { + var result = Util.nextColumn("IB"); + expect(result).toEqual("IC"); + }); + + it("should return IK", function () { + var result = Util.nextColumn("IJ"); + expect(result).toEqual("IK"); + }); + + it("should return IN", function () { + var result = Util.nextColumn("IM"); + expect(result).toEqual("IN"); + }); + + it("should return JA", function () { + var result = Util.nextColumn("IZ"); + expect(result).toEqual("JA"); + }); + + it("should return JB", function () { + var result = Util.nextColumn("JA"); + expect(result).toEqual("JB"); + }); + + it("should return JC", function () { + var result = Util.nextColumn("JB"); + expect(result).toEqual("JC"); + }); + + it("should return JK", function () { + var result = Util.nextColumn("JJ"); + expect(result).toEqual("JK"); + }); + + it("should return JN", function () { + var result = Util.nextColumn("JM"); + expect(result).toEqual("JN"); + }); + + it("should return KA", function () { + var result = Util.nextColumn("JZ"); + expect(result).toEqual("KA"); + }); + + it("should return KB", function () { + var result = Util.nextColumn("KA"); + expect(result).toEqual("KB"); + }); + + it("should return KC", function () { + var result = Util.nextColumn("KB"); + expect(result).toEqual("KC"); + }); + + it("should return KK", function () { + var result = Util.nextColumn("KJ"); + expect(result).toEqual("KK"); + }); + + it("should return KN", function () { + var result = Util.nextColumn("KM"); + expect(result).toEqual("KN"); + }); + + it("should return LA", function () { + var result = Util.nextColumn("KZ"); + expect(result).toEqual("LA"); + }); + + it("should return LB", function () { + var result = Util.nextColumn("LA"); + expect(result).toEqual("LB"); + }); + + it("should return LC", function () { + var result = Util.nextColumn("LB"); + expect(result).toEqual("LC"); + }); + + it("should return LK", function () { + var result = Util.nextColumn("LJ"); + expect(result).toEqual("LK"); + }); + + it("should return LN", function () { + var result = Util.nextColumn("LM"); + expect(result).toEqual("LN"); + }); + + it("should return MA", function () { + var result = Util.nextColumn("LZ"); + expect(result).toEqual("MA"); + }); + + it("should return MB", function () { + var result = Util.nextColumn("MA"); + expect(result).toEqual("MB"); + }); + + it("should return MC", function () { + var result = Util.nextColumn("MB"); + expect(result).toEqual("MC"); + }); + + it("should return MK", function () { + var result = Util.nextColumn("MJ"); + expect(result).toEqual("MK"); + }); + + it("should return MN", function () { + var result = Util.nextColumn("MM"); + expect(result).toEqual("MN"); + }); + + it("should return NA", function () { + var result = Util.nextColumn("MZ"); + expect(result).toEqual("NA"); + + }); + + it("should return NB", function () { + var result = Util.nextColumn("NA"); + expect(result).toEqual("NB"); + }); + + it("should return NC", function () { + var result = Util.nextColumn("NB"); + expect(result).toEqual("NC"); + }); + + it("should return NK", function () { + var result = Util.nextColumn("NJ"); + expect(result).toEqual("NK"); + }); + + it("should return NN", function () { + var result = Util.nextColumn("NM"); + expect(result).toEqual("NN"); + }); + + it("should return OA", function () { + var result = Util.nextColumn("NZ"); + expect(result).toEqual("OA"); + }); + + it("should return PB", function () { + var result = Util.nextColumn("PA"); + expect(result).toEqual("PB"); + }); + + it("should return PC", function () { + var result = Util.nextColumn("PB"); + expect(result).toEqual("PC"); + }); + + it("should return PK", function () { + var result = Util.nextColumn("PJ"); + expect(result).toEqual("PK"); + }); + + it("should return PN", function () { + var result = Util.nextColumn("PM"); + expect(result).toEqual("PN"); + }); + + it("should return QA", function () { + var result = Util.nextColumn("PZ"); + expect(result).toEqual("QA"); + }); + + it("should return QB", function () { + var result = Util.nextColumn("QA"); + expect(result).toEqual("QB"); + }); + + it("should return QC", function () { + var result = Util.nextColumn("QB"); + expect(result).toEqual("QC"); + }); + + it("should return QK", function () { + var result = Util.nextColumn("QJ"); + expect(result).toEqual("QK"); + }); + + it("should return QN", function () { + var result = Util.nextColumn("QM"); + expect(result).toEqual("QN"); + }); + + it("should return RA", function () { + var result = Util.nextColumn("QZ"); + expect(result).toEqual("RA"); + }); + + it("should return RB", function () { + var result = Util.nextColumn("RA"); + expect(result).toEqual("RB"); + }); + + it("should return RC", function () { + var result = Util.nextColumn("RB"); + expect(result).toEqual("RC"); + }); + + it("should return RK", function () { + var result = Util.nextColumn("RJ"); + expect(result).toEqual("RK"); + }); + + it("should return RN", function () { + var result = Util.nextColumn("RM"); + expect(result).toEqual("RN"); + }); + + it("should return SA", function () { + var result = Util.nextColumn("RZ"); + expect(result).toEqual("SA"); + }); + + it("should return SB", function () { + var result = Util.nextColumn("SA"); + expect(result).toEqual("SB"); + }); + + it("should return SC", function () { + var result = Util.nextColumn("SB"); + expect(result).toEqual("SC"); + }); + + it("should return SK", function () { + var result = Util.nextColumn("SJ"); + expect(result).toEqual("SK"); + }); + + it("should return SN", function () { + var result = Util.nextColumn("SM"); + expect(result).toEqual("SN"); + }); + + it("should return TA", function () { + var result = Util.nextColumn("SZ"); + expect(result).toEqual("TA"); + }); + + it("should return TB", function () { + var result = Util.nextColumn("TA"); + expect(result).toEqual("TB"); + }); + + it("should return TC", function () { + var result = Util.nextColumn("TB"); + expect(result).toEqual("TC"); + }); + + it("should return TK", function () { + var result = Util.nextColumn("TJ"); + expect(result).toEqual("TK"); + }); + + it("should return TN", function () { + var result = Util.nextColumn("TM"); + expect(result).toEqual("TN"); + }); + + it("should return UA", function () { + var result = Util.nextColumn("TZ"); + expect(result).toEqual("UA"); + }); + + it("should return UB", function () { + var result = Util.nextColumn("UA"); + expect(result).toEqual("UB"); + }); + + it("should return UC", function () { + var result = Util.nextColumn("UB"); + expect(result).toEqual("UC"); + }); + + it("should return UK", function () { + var result = Util.nextColumn("UJ"); + expect(result).toEqual("UK"); + }); + + it("should return UN", function () { + var result = Util.nextColumn("UM"); + expect(result).toEqual("UN"); + }); + + it("should return VA", function () { + var result = Util.nextColumn("UZ"); + expect(result).toEqual("VA"); + }); + + it("should return VB", function () { + var result = Util.nextColumn("VA"); + expect(result).toEqual("VB"); + }); + + it("should return VC", function () { + var result = Util.nextColumn("VB"); + expect(result).toEqual("VC"); + }); + + it("should return VK", function () { + var result = Util.nextColumn("VJ"); + expect(result).toEqual("VK"); + }); + + it("should return VN", function () { + var result = Util.nextColumn("VM"); + expect(result).toEqual("VN"); + }); + + it("should return WA", function () { + var result = Util.nextColumn("VZ"); + expect(result).toEqual("WA"); + }); + + it("should return WB", function () { + var result = Util.nextColumn("WA"); + expect(result).toEqual("WB"); + }); + + it("should return WC", function () { + var result = Util.nextColumn("WB"); + expect(result).toEqual("WC"); + }); + + it("should return WK", function () { + var result = Util.nextColumn("WJ"); + expect(result).toEqual("WK"); + }); + + it("should return WN", function () { + var result = Util.nextColumn("WM"); + expect(result).toEqual("WN"); + }); + + it("should return XA", function () { + var result = Util.nextColumn("WZ"); + expect(result).toEqual("XA"); + }); + + it("should return XB", function () { + var result = Util.nextColumn("XA"); + expect(result).toEqual("XB"); + }); + + it("should return XC", function () { + var result = Util.nextColumn("XB"); + expect(result).toEqual("XC"); + }); + + it("should return XK", function () { + var result = Util.nextColumn("XJ"); + expect(result).toEqual("XK"); + }); + + it("should return XN", function () { + var result = Util.nextColumn("XM"); + expect(result).toEqual("XN"); + }); + + it("should return YA", function () { + var result = Util.nextColumn("XZ"); + expect(result).toEqual("YA"); + }); + + it("should return YB", function () { + var result = Util.nextColumn("YA"); + expect(result).toEqual("YB"); + }); + + it("should return YC", function () { + var result = Util.nextColumn("YB"); + expect(result).toEqual("YC"); + }); + + it("should return YK", function () { + var result = Util.nextColumn("YJ"); + expect(result).toEqual("YK"); + }); + + it("should return YN", function () { + var result = Util.nextColumn("YM"); + expect(result).toEqual("YN"); + }); + + it("should return ZA", function () { + var result = Util.nextColumn("YZ"); + expect(result).toEqual("ZA"); + }); + + it("should return ZB", function () { + var result = Util.nextColumn("ZA"); + expect(result).toEqual("ZB"); + }); + + it("should return ZC", function () { + var result = Util.nextColumn("ZB"); + expect(result).toEqual("ZC"); + }); + + it("should return ZK", function () { + var result = Util.nextColumn("ZJ"); + expect(result).toEqual("ZK"); + }); + + it("should return ZN", function () { + var result = Util.nextColumn("ZM"); + expect(result).toEqual("ZN"); + }); + + it("should return ZZ", function () { + var result = Util.nextColumn("ZY"); + expect(result).toEqual("ZZ"); + }); + }); + });