Пример #1
0
        // Build sheets index based on the provided dimensions.
        private void BuildEmptySheetsIndexFromDiemensions(IDictionary <string, string> sheetDimensionsRanges)
        {
            // Build sheets index dictionary placeholder.
            this._sheetsIndex = new Dictionary <string, LiveSheet>();

            // Base on the provided sheet dimensions ranges, create appropriate
            // number of empty sheets of appropriate size and add it
            // into the spreadsheet sheetIndex
            foreach (var sheetDimensionsRange in sheetDimensionsRanges)
            {
                // Translate range string in to the separate parameters.
                RangeTranslator.RangeStringToParameters(sheetDimensionsRange.Value, out string sheetTitleId, out int leftIndex, out int topIndex, out int columnCount, out int rowCount);

                // Create empty sheet based on the parameters obtained from the translation
                // of the dimensions range string back in to the separate parameters.
                LiveSheet emptySheet = LiveSheet.Factory.GetSheet(this.SpreadsheetId, sheetTitleId, columnCount, rowCount);

                // Add newly created empty sheet in to the spreadsheet sheets index.
                this._sheetsIndex.Add(sheetTitleId, emptySheet);
            }
        }
Пример #2
0
        public static void RangeStringToParameters(string range, out string sheetTitleId, out int leftColumnIndex, out int topRowIndex, out int columnCount, out int rowCount)
        {
            // Get index of the first letter of the range sheet title id.
            // Always equal 0;
            int sheetTitleIdStartIndex = 0;

            // Length of the string representing range sheet title id.
            // Equal to the index of the first separator last char '!'.
            int sheetTitleIdLenght = range.LastIndexOf(@"!");

            // Get index of the first letter of the string representing left part of range.
            // Equal to the combined length of the sheet title and the first separator.
            int rangeLeftStartIndex = sheetTitleIdLenght + 1;

            // Get index of the first letter of the string representing right part of range.
            int rangeRightStartIndex = range.LastIndexOf(@":") + 1;

            // Get string representing sheet title id - part of range.
            // And assign as an out parameter.
            sheetTitleId = range.Substring(sheetTitleIdStartIndex, sheetTitleIdLenght);

            // Get string representing right/bottom - part of range.
            string rangeRightBottom = range.Substring(rangeRightStartIndex)?.ToUpper();

            // Get string representing left/top - part of range.
            string rangeLeftTop = range.Substring(rangeLeftStartIndex, rangeRightStartIndex - 1 - rangeLeftStartIndex)?.ToUpper();

            // Get index of the first letter of the string representing top part of range.
            int rangeTopStartIndex = rangeLeftTop.IndexOfAny(Numbers);

            // Get index of the first letter of the string representing bottom part of range.
            int rangeBottomStartIndex = rangeRightBottom.IndexOfAny(Numbers);

            // Get length of the string representing left part of the range.
            int rangeLeftLenght = rangeTopStartIndex;

            // Get length of the string representing right part of the range.
            int rangeRightLenght = rangeBottomStartIndex;

            // Get string representing left part of range.
            string rangeLeft = rangeLeftTop.Substring(0, rangeLeftLenght);

            // Get string representing top part of range.
            string rangeTop = rangeLeftTop.Substring(rangeTopStartIndex).TrimEnd(':');

            // Get string representing right part of range.
            string rangeRight = rangeRightBottom.Substring(0, rangeRightLenght);

            // Get string representing bottom part of range.
            string rangeBottom = rangeRightBottom.Substring(rangeRightLenght);

            // Get value of the left column index described by the provided range.
            // And assign it as an out parameter.
            leftColumnIndex = RangeTranslator.ColumnIndexerStringToIndex(rangeLeft);

            // Get value of the top column index described by the provided range.
            // And assign it as an out parameter.
            topRowIndex = RangeTranslator.RowIndexerStringToIndex(rangeTop);

            // Get value of the left column index described by the provided range.
            // And assign as an out parameter.
            int rightColumnIndex = RangeTranslator.ColumnIndexerStringToIndex(rangeRight);

            // Get value of the left column index described by the provided range.
            // And assign as an out parameter.
            int bottomRowIndex = RangeTranslator.RowIndexerStringToIndex(rangeBottom);

            // Calculate columns number. 5 2 1
            columnCount = (rightColumnIndex + 1) - leftColumnIndex;

            // Calculate row number.
            rowCount = (bottomRowIndex + 1) - topRowIndex;
        }