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); } } } }
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()); } }