private void GroupCellsHorizontal(IXLRange range, int[] groupRowNumbers)
        {
            IDictionary <int, (object StartCellValue, int StartColNum)> previousCellValues = new Dictionary <int, (object, int)>();
            int colsCount = range.Columns().Count();

            for (int colNum = 1; colNum <= colsCount; colNum++)
            {
                IXLRangeColumn col = range.Column(colNum);
                foreach (int rowNum in groupRowNumbers)
                {
                    object cellValue = col.Cell(rowNum).Value;
                    if (previousCellValues.TryGetValue(rowNum, out var previousResult))
                    {
                        if (!previousResult.StartCellValue.Equals(cellValue))
                        {
                            range.Range(rowNum, previousResult.StartColNum, rowNum, colNum - 1).Merge();
                            previousCellValues[rowNum] = (cellValue, colNum);
                        }
                        else if (colNum == colsCount)
                        {
                            range.Range(rowNum, previousResult.StartColNum, rowNum, colNum).Merge();
                        }
                    }
                    else
                    {
                        previousCellValues[rowNum] = (cellValue, colNum);
                    }
                }
            }
        }
예제 #2
0
        private SubtotalGroup CreateGroup(IXLRange groupRng, int groupClmn, int level, string title, SubtotalSummaryFunc[] summaries, bool pageBreaks)
        {
            var         firstRow = groupRng.RangeAddress.FirstAddress.RowNumber;
            var         lastRow  = groupRng.RangeAddress.LastAddress.RowNumber;
            IXLRangeRow summRow;

            if (_summaryAbove)
            {
                var fr = _range.Row(firstRow - _range.RangeAddress.FirstAddress.RowNumber + 1).Unsubscribed();
                summRow = fr.RowAbove();
                summRow.CopyStylesFrom(fr);
            }
            else
            {
                var fr = _range.Row(lastRow - _range.RangeAddress.FirstAddress.RowNumber + 1).Unsubscribed();
                summRow = fr.RowBelow();
                summRow.CopyStylesFrom(fr);
            }

            summRow.Clear(XLClearOptions.Contents | XLClearOptions.DataType); // ClosedXML issue 844
            summRow.Cell(groupClmn).Value = _getGroupLabel != null?_getGroupLabel(title) : title + " Итог";

            Sheet.Row(summRow.RowNumber()).OutlineLevel = level - 1;

            foreach (var summ in summaries)
            {
                /*if (summ.FuncNum == 0)
                 * {
                 *  summRow.Cell(summ.Column).Value = summ.Calculate(groupRng);
                 * }
                 * else */if (summ.FuncNum > 0)
                {
                    var funcRngAddr = groupRng.Column(summ.Column).Unsubscribed().RangeAddress;
                    summRow.Cell(summ.Column).FormulaA1 = string.Format("Subtotal({0},{1})", summ.FuncNum, funcRngAddr.ToStringRelative());
                }
                else
                {
                    throw new NotSupportedException(string.Format("Aggregate function {0} not supported.", summ.FuncName));
                }
            }

            using (var rows = Sheet.Rows(firstRow, lastRow))
            {
                rows.ForEach(r => r.OutlineLevel = level);
            }

            return(new SubtotalGroup(level, groupClmn, title, groupRng, summRow, pageBreaks));
        }
        /// <summary>
        /// 武器相关查询
        /// </summary>
        public string WeaponNameSelect()
        {
            init = true;
            var col = 1;

            try
            {
                WeaponRange = book.Worksheet("武器索引").RangeUsed();
                switch (Weapon_Type.SelectedIndex)
                {
                case 0: col = 1; break;

                case 1: col = 5; break;

                case 2: col = 9; break;

                case 3: col = 13; break;

                case 4: col = 17; break;

                default: col = 1; break;
                }
                for (int i = 1; i <= WeaponRange.Column(col).CellsUsed().Count(); i++)
                {
                    if (WeaponRange.Cell(i, col).Value.ToString() == Weapon_Type.SelectedItem.ToString())
                    {
                        Weapon[i - 1] = WeaponRange.Cell(i, col + 1).Value.ToString();
                    }
                }
                if (Weapon_Choose.Items.Count == 0)
                {
                    Weapon_Choose.Items.AddRange(Weapon);
                }
                return(WeaponRange.Cell(Weapon_Choose.SelectedIndex + 1, col + 2).Value.ToString());// Weapon_Choose.SelectedItem.ToString();
            }

            catch (NullReferenceException)
            {
                DialogResult err;
                err = MessageBox.Show("未找到表格文件,或表格文件错误。\n请尝试打开“帮助”项中的部署工具进行修复。", "提示");
                Close();
                return("");
            }
            catch (Exception)
            {
                return(Weapon[0].ToString());
            }
        }