I am developing a windows form application using C#. In this application the user will click a button then the program will copy some columns and rows from the clipboard and past them on a new excel workbook where user can edit the information. In Excel, I want to block one column only which is the ID such that the user can edit all cells except that column because this column is system generated. I am not able to get it working. below is my code
DataObject dataObj = null;
dataGridView1.SelectAll(); // copying data to clipboard
dataObj = dataGridView1.GetClipboardContent(); //
if (dataObj != null)
Clipboard.SetDataObject(dataObj);
object misValue = System.Reflection.Missing.Value;
xlexcel = new Microsoft.Office.Interop.Excel.Application();
xlexcel.DisplayFullScreen = true;
Microsoft.Office.Interop.Excel.Range CR = xlWorkSheet.get_Range("A1", "A1");
CR.Select();
xlWorkSheet.PasteSpecial(CR, Type.Missing, Type.Missing, Type.Missing,
Type.Missing, Type.Missing, false);
// for example block column A only
xlWorkSheet.Range["A1"].EntireColumn.Style.Locked = true;
// protect the sheet
xlWorkSheet.Protect(Type.Missing, true, true, true,
Type.Missing, Type.Missing, true, true, Type.Missing,
Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing,
Type.Missing, Type.Missing);
My problem is that after running this code and then unprotecting the sheet, the user can still edit column A. Is there a way I can protect only column A from editing? I am using Microsoft.Office.Interop.Excel version 15. and .Net Framework 4.5.1
Any help is really appreciated.
Here try this. I don't exactly know where the issue is occurring but this might help.
DataObject dataObj = null;
dataGridView1.SelectAll(); // copying data to clipboard
dataObj = dataGridView1.GetClipboardContent(); //
if (dataObj != null)
Clipboard.SetDataObject(dataObj);
object misValue = System.Reflection.Missing.Value;
xlexcel = new Microsoft.Office.Interop.Excel.Application();
xlexcel.DisplayFullScreen = true;
Microsoft.Office.Interop.Excel.Range CR = xlWorkSheet.get_Range("A1", "A1");
CR.Select();
xlWorkSheet.PasteSpecial(CR, Type.Missing, Type.Missing, Type.Missing,
Type.Missing, Type.Missing, false);
// for example unblock columns B - Z only
xlWorkSheet.Range("B1", "Z1").EntireColumn.Locked = false;
// protect the sheet
xlWorkSheet.Protect(Type.Missing, true, true, true,
Type.Missing, Type.Missing, true, true, Type.Missing,
Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing,
Type.Missing, Type.Missing);
This is in no way a perfect solution to all your problems. Especially since I don't quite know how many other columns you plan to use, but this code will leave column A locked and then leave B through Z unlocked. If you have any others questions toss them in the comments.