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

Cuando establece la propiedad AllowEdit a falso, un error de compilación mostrará:¿Cómo hacer una celda de Excel ReadOnly usando C#?

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

¿Cómo se establecen el rango de celdas a ser de sólo lectura?

Cuando estoy usando la validación para este rango obtuve algunas excepciones en mi evento CellContentChanged.

Aquí está el código que se encuentra en 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

Una celda de Excel se puede establecer en '' solo lectura'solo de establecer su propiedad 'Bloqueado = Verdadero' y luego establecer' Hoja de trabajo = Protegido'. No sé si es fácil hacerlo por código C#, pero podrías intentarlo. – Schaliasos

Respuesta

3

No hay manera de hacer que una célula de sólo lectura en Excel.

Lo que puede hacer en su código C# es definir una celda que será "de solo lectura" en una variable o una lista, suscribirse al evento SheetChange, en el evento SheetChange, si esa celda se cambia , simplemente deshazte de ese cambio.

Ejemplo private List readOnlyCells = new List();

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

actualización

Otra alternativa es utilizar los datos de validación:

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

Usándolo usted tendrá menos control y la célula simplemente no acepta ninguna entrada.

+0

En mi código dice que "XlDVType" no existe en mi espacio de nombres – SuryaKavitha

+0

intente agregar esto usando la directiva usando Excel = Microsoft.Office.Interop.Excel; – animaonline

+0

Utilicé el código ur en mi aplicación. Limita a editar el valor pero dice como una alerta como "Algunos usuarios restringen este valor" y después de cancelar ese cuadro de alerta recibí algunos problemas en mi evento CellContentChanged. ¿Cómo puedo resolver esto? problema ahora? – SuryaKavitha

1

Creo que se puede hacer estableciendo la propiedad Locked en verdadero y protegiendo la hoja de trabajo.

+0

podemos dar la primera hoja de trabajo. Proteger (...) y segundo podemos dar Range.locked = true? – SuryaKavitha

Cuestiones relacionadas