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

Quando ho creato la proprietà AllowEdit false, un errore di compilazione mostrerà:Come rendere una cella excel ReadOnly usando C#?

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

Come posso impostare l'intervallo di celle da sola lettura?

Quando sto usando la convalida per questa gamma Ho avuto qualche eccezione sul mio evento CellContentChanged.

Ecco il codice che si trova in 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

cella A Excel può essere impostato per 'leggere only' solo di aver impostato è proprietà' Locked = true' e quindi impostare il 'WorkSheet = Protected'. Non so se è facile farlo con il codice C# ma potresti provarlo. – Schaliasos

risposta

3

Non v'è alcun modo per rendere una cella di sola lettura in Excel.

Quello che puoi fare nel tuo codice C# è, definire una cella che sta per essere "di sola lettura" in una variabile o in un elenco, iscriversi all'evento SheetChange, nell'evento SheetChange, se quella cella viene cambiata , semplicemente annulla questa modifica.

Esempio elenco privato readOnlyCells = new List();

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

Aggiornamento

Un'altra alternativa è quella di utilizzare i dati di convalida:

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

Con esso si avrà meno controllo e la cellula semplicemente non accetterà alcun input.

+0

Nel mio codice sta dicendo che "XlDVType" non esiste nel mio spazio dei nomi – SuryaKavitha

+0

provare l'aggiunta di questa direttiva using using Excel = Microsoft.Office.Interop.Excel; – animaonline

+0

Ho usato ur codice nel mio application.Its limitandosi a modificare il valore, ma la sua dicendo come un avviso del tipo "Alcuni utenti limitare questo valore" e dopo posso cancellare quella casella avviso ho avuto alcuni problemi nel mio caso CellContentChanged .. Come posso risolvere questo problema ora? – SuryaKavitha

1

Penso che possa essere fatto impostando la proprietà Locked su true, e proteggere il foglio di lavoro.

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

possiamo dare prima Worksheet.Protect (...) e Second possiamo dare Range.locked = true? – SuryaKavitha

Problemi correlati