public static object GetRange(FillParameter parameter, Worksheet sheet, Dictionary<string, object> paramList) { if (!paramList.ContainsKey("rangeType")) { throw new ArgumentException("rangeType"); } if (!paramList.ContainsKey("position")) { throw new ArgumentException("position"); } if((string)paramList["rangeType"] == "cell") { return sheet.Range[paramList["position"], paramList["position"]]; } int leftOffset = 0; int rightOffset = 0; int topOffset = 0; int bottomOffset = 0; int size = 0; if (paramList.ContainsKey("leftOffset")) { leftOffset = Convert.ToInt32(paramList["leftOffset"]); } if (paramList.ContainsKey("rightOffset")) { rightOffset = Convert.ToInt32(paramList["rightOffset"]); } if (paramList.ContainsKey("topOffset")) { topOffset = Convert.ToInt32(paramList["topOffset"]); } if (paramList.ContainsKey("bottomOffset")) { bottomOffset = Convert.ToInt32(paramList["bottomOffset"]); } if (paramList.ContainsKey("size")) { size = Convert.ToInt32(paramList["size"]) - 1; } Range targetRange = null; int lastRow = parameter.BatchSize > 100 ? sheet.Cells.SpecialCells(XlCellType.xlCellTypeLastCell). Row - 1 : parameter.RowOffset + parameter.BatchSize - 1; if (lastRow < parameter.RowOffset) { lastRow = parameter.RowOffset; } switch ((string)paramList["rangeType"]) { case "row": switch ((string)paramList["position"]) { case "top": targetRange = SheetDataAdapter.CalRange(sheet, parameter.RowOffset + topOffset, parameter.ColumnOffset + leftOffset, parameter.RowOffset + topOffset + size, parameter.ColumnOffset + parameter.ColumnNameArray.Length - 1 + rightOffset); break; case "bottom": targetRange = SheetDataAdapter.CalRange(sheet, lastRow + bottomOffset, parameter.ColumnOffset + leftOffset, lastRow + bottomOffset + size, parameter.ColumnOffset + parameter.ColumnNameArray.Length - 1 + rightOffset); break; } break; case "column": switch ((string)paramList["position"]) { case "left": targetRange = SheetDataAdapter.CalRange(sheet, parameter.RowOffset + topOffset, parameter.ColumnOffset + leftOffset, lastRow + bottomOffset, parameter.ColumnOffset + leftOffset + size); break; case "right": targetRange = SheetDataAdapter.CalRange(sheet, parameter.RowOffset + topOffset, parameter.ColumnOffset + parameter.ColumnNameArray.Length - 1 + rightOffset, lastRow + bottomOffset, parameter.ColumnOffset + parameter.ColumnNameArray.Length - 1 + rightOffset + size); break; } break; } return targetRange; }
public static object GetRange(FillParameter parameter, Worksheet sheet, XElement element) { Dictionary<string, object> paramList = new Dictionary<string, object>(); foreach (var attribute in element.Attributes()) { paramList.Add(attribute.Name.LocalName, attribute.Value); } return GetRange(parameter, sheet, paramList); }