C#Excel仅允许编辑特定行

时间:2018-01-22 07:12:51

标签: c# excel

我在C#中生成excel文件,excel文件格式如下。

enter image description here

C1 中的列将是动态的,因为可能有多个日期。

我需要做的只是允许使用 Ctype

编辑行
  

YYY

有没有办法识别Ctype = YYY

的行

我用来生成excel的代码如下

public string ExcelGenerator()
        {
            DataTable dt = GetDataTable();

            var fileName = "ExcelFile";
            var excelApp = new Application();
            var workbooks = excelApp.Workbooks;
            var excelWorkBook = workbooks.Add(XlWBATemplate.xlWBATWorksheet);
            var sheets = excelWorkBook.Sheets;
            var excelWorkSheet = sheets[1];
            excelWorkSheet.Name = "ExcelFile";

            int iCol = 1;
            // Add column headings...

            foreach (DataColumn c in dt.Columns)
            {
                excelWorkSheet.Cells[1, iCol] = c.ColumnName; ;
                ((Range)excelWorkSheet.Cells[1, iCol]).Interior.Color = ColorTranslator.ToOle(Color.DarkGray);
                iCol++;
            }

            // for each row of data...

            for (int j = 0; j < dt.Rows.Count; j++)
            {
                for (int k = 0; k < dt.Columns.Count; k++)
                {
                    excelWorkSheet.Cells[j + 2, k + 1] = dt.Rows[j].ItemArray[k].ToString();

                }
            }

            string fullpath = Path.Combine(excelPath, fileName);
            if (File.Exists(fullpath))
            {
                try
                {
                    File.Delete(fullpath);
                }
                catch (IOException e)
                {
                    Console.Write(e.Message);
                }
            }
            excelApp.DisplayAlerts = false;

            excelWorkBook.SaveAs(fullpath, Microsoft.Office.Interop.Excel.XlFileFormat.xlWorkbookDefault, Type.Missing, Type.Missing, true, false, XlSaveAsAccessMode.xlNoChange, XlSaveConflictResolution.xlLocalSessionChanges, Type.Missing, Type.Missing);
            excelWorkBook.Close(false, Type.Missing, Type.Missing);
            excelApp.Quit();
            Marshal.ReleaseComObject(workbooks);
            Marshal.ReleaseComObject(excelWorkSheet);
            Marshal.ReleaseComObject(sheets);
            Marshal.ReleaseComObject(excelWorkBook);
            Marshal.ReleaseComObject(excelApp);
            excelWorkSheet = null;
            excelWorkBook = null;
            excelApp = null;
            workbooks = null;
            GC.WaitForPendingFinalizers();
            GC.Collect();
            return fileName;

        }

1 个答案:

答案 0 :(得分:1)

Excel.Office.Interop不允许通过编程方式进行范围取消保护。

有关详细信息,请访问此网站。 https://msdn.microsoft.com/en-us/library/dkcs53f3.aspx

但是如果您使用EPPlus库,则可以像Excel用户一样。

如果您允许选择性可编辑列,则Excel需要sheet protection = true和一些不受保护的范围。

(使用EPPlus)

excelWorkSheet.Protection.IsProtected = true;
excelWorkSheet.ProtectedRanges.Add("editable", new ExcelAddress("B"));