使用c#解锁excel单元格时出现异常

本文关键字:异常 单元格 解锁 excel 使用 | 更新日期: 2023-09-27 18:19:37

我正在尝试以下代码,但有一个异常:

无法更改合并单元格的一部分。

在以下行引发异常:

PortfolioSheet.get_Range("A1",missing).EntireColumn.Locked = false;

完整代码:

Microsoft.Office.Interop.Excel.Application ThisApplication = new Microsoft.Office.Interop.Excel.Application();
Microsoft.Office.Interop.Excel.Workbook ThisWorkBook;
string _stFileName = Server.MapPath("/ExcelTemplate/EFIRM_Facility_Template.xlsm");
object missing = System.Reflection.Missing.Value;
ThisWorkBook = ThisApplication.Workbooks.Open(_stFileName, missing, missing, 5, missing, missing, missing,
    missing, missing, missing, missing, missing, missing, missing, missing);

Microsoft.Office.Interop.Excel.Worksheet PortfolioSheet = (Microsoft.Office.Interop.Excel.Worksheet)ThisWorkBook.Sheets[1]; //fill portfoliosheet
//PortfolioSheet.get_Range("A1" + dtDynamicForPortfolio.Rows.Count + "").Locked = false;
/* This line */
PortfolioSheet.get_Range("A1",missing).EntireColumn.Locked = false;
PortfolioSheet.get_Range("B1", "H1"+dtDynamicForPortfolio.Rows.Count).Locked = false;
int iCol = 1;
int iRow = 0;
foreach (DataRow r in dtDynamicForPortfolio.Rows)
{
    iRow++;
    iCol = 0;
    foreach (DataColumn c in dtDynamicForPortfolio.Columns)
    {
        iCol++;
        PortfolioSheet.Cells[iRow + 1, iCol] = Convert.ToString(r[c.ColumnName]);
    //  ThisSheet.get_Range("A1", "C3").Locked = true;
    }
}
PortfolioSheet.get_Range("A1", missing).EntireColumn.Locked = true;
PortfolioSheet.get_Range("B1", "H1").Locked = true;

我该如何避免这种情况?

使用c#解锁excel单元格时出现异常

您在正在编辑的excel中的某一行上有一个合并的单元格。Excel.Interop不允许您更改entirecolumn/entirerows(如果您在特定列/行上有这些行)。您需要指定没有合并单元格的特定区域。

合并单元格是指将多个列/行分组作为excel中的单个单元格。