主要功能:将选中的单元格所在列100行复制并插入到B列
引用
using System.Text.RegularExpressions; using DevExpress.XtraSpreadsheet; using DevExpress.Spreadsheet;
主要代码
spreadsheetControl1.BeginUpdate(); Cell dragCell = spreadsheetControl1.ActiveCell; Cell dropCell = spreadsheetControl1.ActiveWorksheet.Cells["B2"]; int pasteLeftColumnIndex = dropCell.IsMerged ? dropCell.GetMergedRanges()[0].LeftColumnIndex : dropCell.LeftColumnIndex; int copyLeftColumnIndex = dragCell.IsMerged ? dragCell.GetMergedRanges()[0].LeftColumnIndex : dragCell.LeftColumnIndex; int copyRightColumnIndex = dragCell.IsMerged ? dragCell.GetMergedRanges()[0].RightColumnIndex : dragCell.RightColumnIndex; int interval = copyRightColumnIndex - copyLeftColumnIndex + 1; bool bTowardMove = copyLeftColumnIndex > pasteLeftColumnIndex; string copyFromRangeReferenceA1 = string.Format("{0}1:{1}100", ToName(copyLeftColumnIndex + (bTowardMove ? interval : 0)), ToName(copyRightColumnIndex + (bTowardMove ? interval : 0))); string pasteRangeReferenceA1 = string.Format("{0}1:{1}100", ToName(pasteLeftColumnIndex), ToName(pasteLeftColumnIndex + interval)); spreadsheetControl1.ActiveWorksheet.Columns.Insert(pasteLeftColumnIndex, interval); spreadsheetControl1.ActiveWorksheet.Range[pasteRangeReferenceA1].CopyFrom(spreadsheetControl1.ActiveWorksheet.Range[copyFromRangeReferenceA1]); for (int i = pasteLeftColumnIndex, j = copyLeftColumnIndex, k = 0; k < interval; i++, j++, k++) { spreadsheetControl1.ActiveWorksheet.Columns[i].Width = spreadsheetControl1.ActiveWorksheet.Columns[j].Width; } spreadsheetControl1.EndUpdate();
由数字转换为Excel中的列字母
public static int ToIndex(string columnName) { if (!Regex.IsMatch(columnName.ToUpper(), @"[A-Z]+")) { throw new Exception("invalid parameter"); } int index = 0; char[] chars = columnName.ToUpper().ToCharArray(); for (int i = 0; i < chars.Length; i++) { index += ((int)chars[i] - (int)'A' + 1) * (int)Math.Pow(26, chars.Length - i - 1); } return index - 1; } public static string ToName(int index) { if (index < 0) { throw new Exception("invalid parameter"); } List<string> chars = new List<string>(); do { if (chars.Count > 0) index--; chars.Insert(0, ((char)(index % 26 + (int)'A')).ToString()); index = (int)((index - index % 26) / 26); } while (index > 0); return String.Join(string.Empty, chars.ToArray()); }