c#VSTO循环遍历每一行,并根据另一个单元格值设置格式
我有一个将行输出到excel的VSTO应用程序。我正在尝试根据单元格中的值应用一些格式。我的要求是,如果列“V”在单元格中包含值“No”,则包含值的整行需要为背景颜色“浅灰色”。注:第V列是excel中“是”或“否”的下拉列表。所以它不是一个普通的基于文本的单元格。有什么办法吗c#VSTO循环遍历每一行,并根据另一个单元格值设置格式,c#,excel,vsto,C#,Excel,Vsto,我有一个将行输出到excel的VSTO应用程序。我正在尝试根据单元格中的值应用一些格式。我的要求是,如果列“V”在单元格中包含值“No”,则包含值的整行需要为背景颜色“浅灰色”。注:第V列是excel中“是”或“否”的下拉列表。所以它不是一个普通的基于文本的单元格。有什么办法吗 var last = uiWorksheet.Cells.SpecialCells(XlCellType.xlCellTypeLastCell, Type.Missing); var lastUsedRow = las
var last = uiWorksheet.Cells.SpecialCells(XlCellType.xlCellTypeLastCell, Type.Missing);
var lastUsedRow = last.Row < 6 ? 6 : last.Row;
var lastUsedColumn = last.Column;
var xlrange = uiWorksheet.get_Range("V:V");
if (xlrange.Value2.ToString() == "No")
{
???.EntireRow.Interior.Color = Microsoft.Office.Interop.Excel.XlRgbColor.rgbLightGray;
}
var last=ui工作表.Cells.SpecialCells(XlCellType.xlCellTypeLastCell,Type.Missing);
var lastUsedRow=最后一行<6?6:最后一排;
var lastUsedColumn=last.Column;
var xlrange=ui工作表。获取范围(“V:V”);
if(xlrange.Value2.ToString()=“否”)
{
??.EntireRow.Interior.Color=Microsoft.Office.Interop.Excel.XlRgbColor.RGB灰色;
}
要在列中查找值,需要使用Find
和FindNext
函数。
之后,您需要迭代结果并更改颜色
请注意以下事项:
FindNext方法的搜索返回到搜索的开始
到达范围结束后的范围。您的代码必须确保
搜索不会在无限循环中结束
这似乎只突出了第一行。它不会对每一行都这样做?更新了答案。这似乎已经用灰色突出显示了所有内容?它突出显示了整行,其中列中的单元格有“no”字符串。在我的excel上工作得很好。这太奇怪了——列格式是通用的(不是文本),不应该引起问题,是吗?该列还有一个下拉功能,允许用户将其转换为“是”。这会导致问题吗?
var xlrange = uiWorksheet.get_Range("V:V");
var searchFor = "No";
Range firstResult = null;
var currentResult = xlrange.Find(What: searchFor,
LookIn: XlFindLookIn.xlValues, LookAt: XlLookAt.xlWhole,
SearchOrder: XlSearchOrder.xlByRows
);
while(currentResult != null)
{
if (firstResult == null)
firstResult = currentResult;
else if (currentResult.get_Address(XlReferenceStyle.xlA1)
== firstResult.get_Address(XlReferenceStyle.xlA1))
{
break;
}
currentResult.EntireRow.Interior.Color = XlRgbColor.rgbLightGray;
currentResult = xlrange.FindNext(currentResult);
}