基於JavaScript的公式解譯器 – 15 【儲存格範圍對象】

來源:互聯網
上載者:User

CellRange儲存格範圍對象

檔案:CellRange.js

function CellRange() {<br /> this.set_ClassName("CellRange");<br /> this._startCell = new Cell();<br /> this._endCell = new Cell();</p><p> switch(arguments.length)<br /> {<br /> case 0: break;<br /> case 1:<br /> {<br /> switch ($T(arguments[0])) {<br /> case "CellRange":<br /> {<br /> this._startCell.set_Row(Math.min(arguments[0].get_StartRow(), arguments[0].get_EndRow()));<br /> this._startCell.set_Col(Math.min(arguments[0].get_StartCol(), arguments[0].get_EndCol()));<br /> this._endCell.set_Row(Math.max(arguments[0].get_StartRow(), arguments[0].get_EndRow()));<br /> this._endCell.set_Col(Math.max(arguments[0].get_StartCol(), arguments[0].get_EndCol()));<br /> }<br /> break;<br /> case "string": this.FromAddress(arguments[0]); break;<br /> default: throw new Exception(this, "CellRange", "Unsupported argument");<br /> } // switch<br /> }<br /> break;<br /> case 2:<br /> {<br /> var cells = [];<br /> for (var i = 0; i < arguments.length; i++) {<br /> switch ($T(arguments[i])) {<br /> case "string": cells[i] = new Cell(arguments[i]); break;<br /> case "Cell": cells[i] = arguments[i]; break;<br /> default: throw new Exception(this, "CellRange", "Unsupported argument:" + $T(arguments[i]));<br /> }<br /> }<br /> this._startCell.set_Row(Math.min(cells[0].get_Row(), cells[1].get_Row()));<br /> this._startCell.set_Col(Math.min(cells[0].get_Col(), cells[1].get_Col()));<br /> this._endCell.set_Row(Math.max(cells[0].get_Row(), cells[1].get_Row()));<br /> this._endCell.set_Col(Math.max(cells[0].get_Col(), cells[1].get_Col()));</p><p> }<br /> break;<br /> default: throw new Exception(this, "CellRange", "Wrong number of arguments");<br /> }<br />};<br />CellRange.prototype = {<br /> get_StartRow: function() {<br /> return this._startCell.get_Row();<br /> },<br /> get_StartCol: function() {<br /> return this._startCell.get_Col();<br /> },<br /> get_EndRow: function() {<br /> return this._endCell.get_Row();<br /> },<br /> get_EndCol: function() {<br /> return this._endCell.get_Col();<br /> },<br /> ContainsCell: function(cell) {<br /> $ASSERT($T(cell) == "Cell");<br /> return cell.get_Row() >= this.get_StartRow() && cell.get_Row() <= this.get_EndRow() &&<br /> cell.get_Col() >= this.get_StartCol() && cell.get_Col() <= this.get_EndCol();<br /> },<br /> IsValid: function() {<br /> return this._startCell.IsValid() && this._endCell().IsValid();<br /> },<br /> ToString: function() { return this.ToAddress(); },<br /> ToAddress: function() {<br /> return this._startCell.ToAddress() + ":" + this._endCell.ToAddress();<br /> },<br /> FromAddress: function(addrStr) {<br /> var match = /(.*):(.*)/i.exec(addrStr);<br /> if (match == null || match[1].length == 0 || match[2].length == 0)<br /> throw new Exception(this, "FromAddress", "Wrong address format");<br /> var cells = [new Cell(match[1]), new Cell(match[2])];<br /> this._startCell.set_Row(Math.min(cells[0].get_Row(), cells[1].get_Row()));<br /> this._startCell.set_Col(Math.min(cells[0].get_Col(), cells[1].get_Col()));<br /> this._endCell.set_Row(Math.max(cells[0].get_Row(), cells[1].get_Row()));<br /> this._endCell.set_Col(Math.max(cells[0].get_Col(), cells[1].get_Col()));<br /> },<br /> // ------------------- TEST ------------------------<br /> Test: function() {<br /> $Debug.WriteLine("============= " + this.get_ClassName() + " ===================");<br /> $Debug.WriteLine("----------------- FromAddress --------------------");<br /> // Test FromAddress<br /> var values = [<br /> // "A1:A1",<br /> // "A1:A10",<br /> // "A10:A1",<br /> "A1:B1",<br /> "B1:A1",<br /> "A1:B10",<br /> "B10:A1",<br /> "AB1:AB10",<br /> "AB10:AB1",<br /> "AB1:CD10",<br /> "CD10:AB1"<br /> ];<br /> for (var i = 0; i < values.length; i++) {<br /> try {<br /> var rng = new CellRange();<br /> $Debug.Write(values[i] + "=");<br /> rng.FromAddress(values[i]);<br /> $Debug.WriteLine(rng.ToAddress());<br /> }<br /> catch (e) {<br /> $Debug.WriteLine("Error:" + e.description);<br /> }<br /> } // for<br /> $Debug.WriteLine("----------------- CTOR: one argument --------------------");<br /> // Test CTOR: one argument<br /> values = [<br /> "A1:A1",<br /> "A1:A10",<br /> "A10:A1",<br /> "A1:B1",<br /> "B1:A1",<br /> "A1:B10",<br /> "B10:A1",<br /> "AB1:AB10",<br /> "AB10:AB1",<br /> "AB1:CD10",<br /> "CD10:AB1",<br /> new CellRange("A1:A1"),<br /> new CellRange("A1:A10"),<br /> new CellRange("A10:A1"),<br /> new CellRange("A1:B1"),<br /> new CellRange("B1:A1"),<br /> new CellRange("A1:B10"),<br /> new CellRange("B10:A1"),<br /> new CellRange("AB1:AB10"),<br /> new CellRange("AB10:AB1"),<br /> new CellRange("AB1:CD10"),<br /> new CellRange("CD10:AB1")<br /> ];</p><p> for (var i = 0; i < values.length; i++) {<br /> try {<br /> $Debug.Write(values[i].ToString() + "=");<br /> var rng = new CellRange(values[i]);<br /> $Debug.WriteLine(rng.ToAddress());<br /> }<br /> catch (e) {<br /> $Debug.WriteLine("Error:" + e.description);<br /> }<br /> } // for<br /> $Debug.WriteLine("----------------- CTOR: Two arguments --------------------");<br /> // Test CTOR: two argument<br /> values = [<br /> "A1", "A1",<br /> "A1", "A10",<br /> "A10", "A1",<br /> "A1", "B1",<br /> "B1", "A1",<br /> "A1", "B10",<br /> "B10", "A1",<br /> "AB1", "AB10",<br /> "AB10", "AB1",<br /> "AB1", "CD10",<br /> "CD10", "AB1",<br /> new Cell("A1"), new Cell("A1"),<br /> new Cell("A1"), new Cell("A10"),<br /> new Cell("A10"), new Cell("A1"),<br /> new Cell("A1"), new Cell("B1"),<br /> new Cell("B1"), new Cell("A1"),<br /> new Cell("A1"), new Cell("B10"),<br /> new Cell("B10"), new Cell("A1"),<br /> new Cell("AB1"), new Cell("AB10"),<br /> new Cell("AB10"), new Cell("AB1"),<br /> new Cell("AB1"), new Cell("CD10"),<br /> new Cell("CD10"), new Cell("AB1")<br /> ];</p><p> for (var i = 0; i < values.length; i += 2) {<br /> try {<br /> $Debug.Write(values[i].ToString() + ":" + values[i + 1].ToString() + "=");<br /> var rng = new CellRange(values[i], values[i + 1]);<br /> $Debug.WriteLine(rng.ToAddress());<br /> }<br /> catch (e) {<br /> $Debug.WriteLine("Error:" + e.description);<br /> }<br /> } // for</p><p> // Test ContainsCell()<br /> values = [<br /> "A1", "A1",<br /> "A1", "A10",<br /> "A10", "A1",<br /> "A1", "B1",<br /> "B1", "A1",<br /> "A1", "B10",<br /> "B10", "A1",<br /> "AB1", "AB10",<br /> "AB10", "AB1",<br /> "AB1", "CD10",<br /> "CD10", "AB1",<br /> new Cell("A1"), new Cell("A1"),<br /> new Cell("A1"), new Cell("A10"),<br /> new Cell("A10"), new Cell("A1"),<br /> new Cell("A1"), new Cell("B1"),<br /> new Cell("B1"), new Cell("A1"),<br /> new Cell("A1"), new Cell("B10"),<br /> new Cell("B10"), new Cell("A1"),<br /> new Cell("AB1"), new Cell("AB10"),<br /> new Cell("AB10"), new Cell("AB1"),<br /> new Cell("AB1"), new Cell("CD10"),<br /> new Cell("CD10"), new Cell("AB1")<br /> ];</p><p> for (var i = 0; i < values.length; i += 2) {<br /> try {<br /> $Debug.Write(values[i].ToString() + ":" + values[i + 1].ToString() + "=");<br /> var rng = new CellRange(values[i], values[i + 1]);<br /> var cell = new Cell();<br /> cell.set_Row((rng.get_StartRow() + rng.get_EndRow()) / 1);<br /> cell.set_Col((rng.get_StartCol() + rng.get_EndCol()) / 1);<br /> if (rng.ContainsCell(cell))<br /> $Debug.WriteLine(cell.ToAddress() + " in range");<br /> else<br /> $Debug.WriteLine(cell.ToAddress() + " NOT in range");<br /> }<br /> catch (e) {<br /> $Debug.WriteLine("Error:" + e.description);<br /> }<br /> } // for<br /> } // Test<br />};

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.