2011-05-05 204 views
1

我使用c#爲excel文件的特定單元格着色。 我使用excel單元格着色

Application excel = new Application(); 
Workbook wb = excel.Workbooks.Open(destPath); 
Worksheet ws = wb.Worksheets[1]; 
ws.Cells[row, clmn].Interior.Color = XlRgbColor.rgbBlack; 

上色cells..But這是行不通的.. 這是給最後一行的異常我在哪裏着色單元

"Exception from HRESULT: 0x800A03EC" 

我不能修復異常 誰能幫我..

+1

你確定這是'wb.Worksheets [1]'和'不wb.Worksheets [0]'你找什麼? Excel默認情況下編號從0開始的工作表。另外,Cells [row,clmn]是否有任何內容?否則,您可能在設置格式時遇到問題; Excel通常使用稀疏數組存儲,這意味着一個特定的單元格直到放入內容纔會真正存在。 – 2011-05-05 12:50:34

回答

0

在我以前的項目中,我用下面的代碼片段,以色彩單元的Excel:

ws.Cells[row, clmn].Interior.Color = System.Drawing.ColorTranslator.ToWin32(Color.Black); 
+0

不,它不工作..它給出了一個異常「從HRESULT異常:0x800A03EC」 – bill 2011-05-05 12:45:42

+0

檢查行和clmn是否大於0 – Syjin 2011-05-05 13:02:58

0

我測試了一個新的Excel文件中的代碼,它工作正常。但是,當測試行值爲0時,我能夠重現錯誤。因此,問題可能出在行和clmn值上。否則,它必須是特定於您的Excel文件的東西......也許是受保護的單元格或沿着這些行的東西。

1

它可能無法工作,因爲工作表受到保護。

您可以檢查它通過以下方式:

Application excel = new Application(); 
Workbook wb = excel.Workbooks.Open(destPath); 
Worksheet ws = wb.Worksheets[1]; 

bool wasProtected = ws.ProtectContents; 
if (wasProtected == true) 
{ 
    // unprotect the worksheet 
} 
else 
{ 
    ws.Cells[row, clmn].Interior.Color = XlRgbColor.rgbBlack; 
} 

... 

if (wasProtected == true) 
{ 
    // protect back the worksheet 
} 
+0

你不需要指定「== true」,你只需要指定(wasProtected )或者如果你想檢查false(!wasProtected)。僅供參考,因爲它可以節省時間。 – IamBatman 2017-08-07 19:13:29