2012-05-14 35 views
6
Range range= (Range)this.workSheet.Cells[1,1]; 
range.AllowEdit = false; 

Khi tôi thiết lập thuộc tính false AllowEdit, một lỗi biên dịch sẽ hiển thị:Làm thế nào để tạo ra một tế bào excel ReadOnly bằng C#?

Error: Property or indexer 'Microsoft.Office.Interop.Excel.Range.AllowEdit' cannot be assigned to -- it is read only

Làm thế nào tôi có thể thiết lập các phạm vi của các tế bào được chỉ đọc?

Khi tôi đang sử dụng xác thực cho phạm vi này, tôi đã nhận được một số ngoại lệ trên Sự kiện CellContentChanged của mình.

Đây là mã mà là ở CellContentChanged:

var updater = new Action<StyleColorItem>(
      item => 
      { 
       var editedItem = _taskViewModel.TrackedItems.First(it => it.Id == item.Id); 
      // Above line I am getting the exception like "Sequence contains no matching element" 
       editedItem.Update(item);' 
      }); 
+0

Một ô excel có thể được đặt thành 'chỉ đọc' khi bạn đặt thuộc tính' Khóa = True' và sau đó đặt 'WorkSheet = Protected'. Tôi không biết nếu nó là dễ dàng để làm điều đó bằng mã C# nhưng bạn có thể thử nó. – Schaliasos

Trả lời

3

Không có cách nào để làm cho một tế bào chỉ đọc trong excel.

Bạn có thể làm gì trong mã C#, xác định ô sẽ là "chỉ đọc" trong một biến hoặc danh sách, đăng ký sự kiện SheetChange, trong sự kiện SheetChange, nếu ô đó bị thay đổi , chỉ cần hoàn tác thay đổi đó.

Ví dụ Danh sách riêng readOnlyCells = new List();

private void OnActiveSheetCellChange(object changedSheet, Excel.Range changedCell) 
{ 
    if (readOnlyCells.Contains(changedCell)) 
     changedCell.Value = string.Empty; 
     //.... YOUR CODE 

Cập nhật

Một lựa chọn khác là sử dụng Data Validation:

changedCell.Validation.Add(Excel.XlDVType.xlValidateCustom, Type.Missing, Type.Missing, "\"\""); 

Sử dụng nó, bạn sẽ có ít sự kiểm soát và di động sẽ chỉ đơn giản là không chấp nhận bất kỳ đầu vào.

+0

Trong mã của tôi là nói rằng "XlDVType" không tồn tại trong không gian tên của tôi – SuryaKavitha

+0

hãy thử thêm bằng cách sử dụng chỉ thị bằng cách sử dụng Excel = Microsoft.Office.Interop.Excel; – animaonline

+0

Tôi đã sử dụng mã ur trong ứng dụng của mình. Tôi hạn chế chỉnh sửa giá trị nhưng câu nói của nó là cảnh báo như "Một số người dùng hạn chế giá trị này" và sau khi tôi hủy hộp cảnh báo đó, tôi đã gặp một số sự cố trong sự kiện CellContentChanged của mình .. Làm cách nào tôi có thể giải quyết vấn đề này vấn đề bây giờ? – SuryaKavitha

1

Tôi nghĩ rằng nó có thể được thực hiện bằng cách đặt thuộc tính Locked thành true và bảo vệ trang tính.

range.Locked = true; 
this.workSheet.Protect(Type.Missing, Type.Missing, 
         true, 
         Type.Missing, Type.Missing, Type.Missing, Type.Missing, 
         Type.Missing, Type.Missing, Type.Missing, Type.Missing, 
         Type.Missing, Type.Missing, Type.Missing, Type.Missing, 
         Type.Missing); 
+0

chúng ta có thể cung cấp cho Worksheet.Protect đầu tiên (...) và thứ hai chúng ta có thể cung cấp cho Range.locked = true? – SuryaKavitha

Các vấn đề liên quan