2013-06-24 32 views
0

我想下面的代碼,但有一個例外,Excel單元格時是個例外:有解鎖使用C#

無法更改合併單元格的一部分。

例外,在這條線被拋出:

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; 

我怎樣才能避免這種情況?

+1

[unmerge](http://office.microsoft.com/en-gb/excel-help/merge-and-unmerge-cells-HP005251021.aspx) – 2013-06-24 13:48:19

+0

如果您取消合併整個工作表,您可能需要一種方法使這些合併的單元格返回到工作表。 –

回答

0

您正在編輯的Excel中的某行上有合併的單元格。 Excel.Interop不允許您更改整個列/整個行,如果你有那些特定的列/行。您需要指定沒有合併單元格的特定範圍。

合併單元格就是這樣一種情況,您可以將多個列/行分組以充當Excel中的單個單元格。