2015-04-05 63 views
1

我想用一个按钮来使所有的单元格除了命名范围以外的所有单元格的Excel加载项。如何更改内部的颜色和不是边框

我正在使用TintAndShade属性,将其设置为-0.7。我遇到的问题是,当我打开新的工作表时,单元格内部处于“无填充”模式。因此TintAndShade属性没有区别。然后,我试着检查内部颜色是否默认(ColorIndex = -4142),如果是这种情况,我将颜色设置为白色(ColorIndex = 2)。我遇到的问题是,它会擦除​​所有边界(我认为边界也处于“无填充”模式)。我不能将它们设置为黑色,因为它不是默认颜色。

是否有人知道如何更改内部颜色而不删除默认边框颜色?或者还有没有其他更简单的方法来制作这样的按钮(除了命名范围之外的所有单元格)?

谢谢!

这里是我的代码,如果你想查询:

int shadeMargin = 0; 
Excel.Worksheet excelWorksheet = Globals.ThisAddIn.Application.ActiveSheet; 
Excel.Names tags = Globals.ThisAddIn.Application.ActiveWorkbook.Names; 

Excel.Range last = excelWorksheet.Cells.SpecialCells(Excel.XlCellType.xlCellTypeLastCell, Type.Missing); 
Excel.Range xlRange = excelWorksheet.get_Range("A1", last); 

for (int i = 1; i < xlRange.Rows.Count + 1 + shadeMargin; i++) 
{ 
    for (int j = 1; j < xlRange.Columns.Count + 1 + shadeMargin; j++) 
    { 
     if (xlRange.Cells[i, j].Interior.ColorIndex == -4142) // Correspond to the "No Fill" color 
     { 
       xlRange.Cells[i, j].Interior.ColorIndex = 2; // Replaced by WHITE color 
     } 
     xlRange.Cells[i, j].Interior.TintAndShade = -0.7; 

     } 
} 

foreach (Excel.Name tag in tags) 
{ 
    Excel.Range tagRange = tag.RefersToRange; 
    for (int i = 1; i < tagRange.Rows.Count + 1; i++) 
    { 
     for (int j = 1; j < tagRange.Columns.Count + 1; j++) 
     { 
      tagRange.Cells[i, j].Interior.TintAndShade = 0; 
     } 
     } 
    } 
+0

单元格实际上是否有边框,或者您是否看到网格线?您可以转到功能区上的查看并取消选中“显示”组中的网格线旁边的以进行验证。 – 2015-04-07 15:10:15

+0

不,你是对的,他们没有边框,当我取消选中“显示”按钮。 – Vilsisse 2015-04-16 10:55:52

回答

0

边框和底纹是单独的属性。在没有填充颜色(例如白色)的情况下显示网格线。你可以通过设置边界来匹配网格线,但它不会是完美的。使用宏记录器获取设置不同边框线条样式,主题颜色,锡兰色调和重量的代码,然后尝试以您想要的方式设置它们。

+0

好的,谢谢你,我使用了宏录像机。我认为我现在拥有的东西几乎可以满足我想要的,但仍然不完美:我选择的颜色类似于单元格上显示的颜色,但没有选择它。但我开始认为这是不可能的...... – Vilsisse 2015-04-16 12:15:00

+0

使用颜色选择器,这些边界是#D4D4D4,它与RGB(212,212,212)相同。当我用这种颜色绘制边框时,看起来和其他的完全一样。 – 2015-04-16 14:25:51