这一段用spreadsheetcontrol,好多问题,记性越来越差,记录一下(14.1.4.0版本)
1、A1 B1两个单元格合并,触发MouseClick 和CellBeginEdit事件,会因点击的是A1位置还是B1位置,e.columnindex 会有所不同
2、最后修改A1单元格,然后点击界面按钮保存时,因为单元格焦点没有转移,A1单元格的Editor没有自动关闭,所以无法获取到刚输入的值,可以在保存按钮里添加
spreadsheetControl1.CloseCellEditor(DevExpress.XtraSpreadsheet.CellEditorEnterValueMode.ActiveCell);
强制关闭Editor。
3、保护特定单元格
using DevExpress.Spreadsheet;
spreadsheetControl1.BeginUpdate();
Worksheet worksheet = spreadsheetControl1.ActiveWorksheet;
// Give specific user permission to edit a range in a protected worksheet
ProtectedRange protectedRange = worksheet.ProtectedRanges.Add("My Range", worksheet["C3:E8"]);
EditRangePermission permission = new EditRangePermission();
permission.UserName = Environment.UserName;
permission.DomainName = Environment.UserDomainName;
permission.Deny = false;
protectedRange.SecurityDescriptor = protectedRange.CreateSecurityDescriptor(new EditRangePermission[] { permission });
protectedRange.SetPassword("123");
// Protect a worksheet
if (!worksheet.IsProtected)
worksheet.Protect("password", WorksheetProtectionPermissions.Default);
spreadsheetControl1.EndUpdate();
这样有个问题,每次双击受保护的单元格时会有个弹出提示,很影响使用感受
还是使用CellBeginEdit事件来实现不可编辑,依据条件设置e.Cancel,但无法阻止粘贴
---------------------------------
终于想出来阻止粘贴的办法
单元格赋值时,通过调用SetValue函数或直接Value= ,这两种操作都不会触发spreadsheetcontrol的CellValueChanged事件,所以可以在此事件中设置条件,判断此单元格的值是否能够被修改(修改途径只包含界面操作,比如直接编辑--CellBeginEdit事件控制,粘贴)
4、滚动条事件 worksheet
void ScrollTo(Range scrolledAreaTopLeftCell);
void ScrollTo(int rowIndex, int columnIndex);
void ScrollToRow(int rowIndex);
void ScrollToRow(string rowHeading);
void ScrollToColumn(int columnIndex);
void ScrollToColumn(string columnHeading);
5、有的时候设置了某cell.Formula="=A1";
但不起作用,单元格直接显示 =A1
不清楚为什么,但跟excel格式有关,可能与导入的excel文件是否有宏代码冲突
6.格式粘贴Range
Worksheet worksheet = spreadsheetControl1.ActiveWorksheet;
worksheet.Columns["A"].WidthInCharacters = 32;
worksheet.Columns["B"].WidthInCharacters = 20;
//Style style = workbook.Styles[BuiltInStyleId.Input];
// Specify the content and formatting for a source cell.
worksheet.Cells["A1"].Value = "Source Cell";
Cell sourceCell = worksheet.Cells["B1"];
sourceCell.Formula = "= PI()";
sourceCell.NumberFormat = "0.0000";
//sourceCell.Style = style;
sourceCell.Font.Color = Color.Blue;
sourceCell.Font.Bold = true;
sourceCell.Borders.SetOutsideBorders(Color.Black, BorderLineStyle.Thin);
// Copy all information from the source cell to the "B3" cell.
worksheet.Cells["A3"].Value = "Copy All";
worksheet.Cells["B3"].CopyFrom(sourceCell);
// Copy only the source cell content (e.g., text, numbers, formula calculated values) to the "B4" cell.
worksheet.Cells["A4"].Value = "Copy Values";
worksheet.Cells["B4"].CopyFrom(sourceCell, PasteSpecial.Values);
// Copy the source cell content (e.g., text, numbers, formula calculated values)
// and number formats to the "B5" cell.
worksheet.Cells["A5"].Value = "Copy Values and Number Formats";
worksheet.Cells["B5"].CopyFrom(sourceCell, PasteSpecial.Values | PasteSpecial.NumberFormats);
// Copy only the formatting information from the source cell to the "B6" cell.
worksheet.Cells["A6"].Value = "Copy Formats";
worksheet.Cells["B6"].CopyFrom(sourceCell, PasteSpecial.Formats);
// Copy all information from the source cell to the "B7" cell except for border settings.
worksheet.Cells["A7"].Value = "Copy All Except Borders";
worksheet.Cells["B7"].CopyFrom(sourceCell, PasteSpecial.All & ~PasteSpecial.Borders);
// Copy information only about borders from the source cell to the "B8" cell.
worksheet.Cells["A8"].Value = "Copy Borders";
worksheet.Cells["B8"].CopyFrom(sourceCell, PasteSpecial.Borders);