Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
c#VSTO循环遍历每一行,并根据另一个单元格值设置格式_C#_Excel_Vsto - Fatal编程技术网

c#VSTO循环遍历每一行,并根据另一个单元格值设置格式

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

我有一个将行输出到excel的VSTO应用程序。我正在尝试根据单元格中的值应用一些格式。我的要求是,如果列“V”在单元格中包含值“No”,则包含值的整行需要为背景颜色“浅灰色”。注:第V列是excel中“是”或“否”的下拉列表。所以它不是一个普通的基于文本的单元格。有什么办法吗

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);
}