如何使用颜色格式的 excel 公式引用另一个工作簿中的单元格?

How do you reference cells in another workbook using an excel formula for Color Formatting?

我有两份来自不同工作簿的工作sheet:一份我正在编辑 (xlwkstTempSummary),另一份我想比较其中的值 (xlwkstSummary)。我想根据导入的 sheet 中的值将背景颜色应用于临时 sheet 中的单个列。这是我当前代码的一个片段:

Excel.Workbook xlwkbkImport = books.Open(file_location,misValue, true, 
    misValue, misValue, misValue, true, misValue, misValue, misValue, false, 
    misValue, misValue, misValue, 0);

Excel.Sheets sheets = xlwkbkImport.Worksheets;
Excel.Worksheet xlwkstSummary = (Excel.Worksheet)sheets.get_Item(1);

Excel.Range r = xlwkstTempSummary.get_Range("F" + summary_start_row.ToString(), "F" + (summary_start_row + clinic_row_count - 1).ToString());
string file_name = file_location.Name;
string file_directory = Path.GetDirectoryName(file_location);
Excel.FormatConditions r_format = r.FormatConditions;

Excel.FormatCondition c1 = r_format.Add((Excel.XlFormatConditionType)2) /*format based on expression*/,
                misValue,
                @"=AND(AND($G" + summary_start_row + @"<>""4 Star"", $G" + 
                summary_start_row + @"<>""5 Star"", $G" +
                summary_start_row + @"<>""75th"", $G" + 
                summary_start_row + @"<>""90th""), $F" +
                summary_start_row + @"<VLOOKUP($C" + summary_start_row + 
                @",'" + file_directory + @"[" + file_name + @"]Summary'!$A:$D,4,FALSE))", 
                misValue, misValue, misValue, misValue, misValue); 
Excel.Interior c1_interior = c1.Interior;
c1_interior.Color = Color.FromArgb(216, 49, 49); //Red

我目前正在使用 vlookup 从导入的 sheet 中获取我需要的值,当直接写入 excel 时表达式工作正常,但是当我 运行程序,我收到以下错误:

System.ArgumentException:参数不正确。 (HRESULT 异常:0x80070057 (E_INVALIDARG)) 在 System.RuntimeType.ForwardCallToInvokeMember(String memberName, BindingFlags flags, Object target, Int32[] aWrapperTypes, MessageData& msgData)

我能想到的失败的唯一原因是未能在我的 vlookup 调用中正确解析导入工作簿的名称。更熟悉 Microsoft.Office.Interop.Excel 库的人可以阐明这个问题吗?

好的,所以我无法弄清楚为什么我对导入的工作簿的引用不起作用。我确实发现 Path.GetPathDirectory(1) 函数 returns 文件路径末尾没有“\”,但添加它并没有改变错误。

我开始了解到我原来的方法是有缺陷的,因为如果文件已经在 excel 中打开,VLookup 只会 return 值,否则会询问文件的位置。这显然不是我想要的,因为这是一个自动化过程。

我的问题的解决方案是创建一个具有 "Very Hidden" 可见性的新 sheet:

Excel.Worksheet xlwkstTempDataStore = TempSheets.Add(misValue, xlwkstTempCareGaps, misValue, misValue);
xlwkstTempDataStore.Name = "data";
xlwkstTempDataStore.Visible = (Excel.XlSheetVisibility)2; //Very Hidden

将数据从导入的工作簿复制到我的新 sheet 后,我只需要在我的 VLookup 中引用非常隐藏的 sheet:

Excel.FormatCondition c1 = r_format.Add((Excel.XlFormatConditionType)2 /*format based on expression*/,
                                misValue,
                                @"=AND(AND($G" + summary_start_row + @"<>""4 Star"", $G" + summary_start_row + @"<>""5 Star"", $G" +
                                    summary_start_row + @"<>""75th"", $G" + summary_start_row + @"<>""90th""), $F" +
                                    summary_start_row + @"<VLOOKUP($C" + summary_start_row + @",data!$A:$D$" + last_data_store_row + @",4,FALSE))", 
                                misValue, misValue, misValue, misValue, misValue); 
                Excel.Interior c1_interior = c1.Interior;
                c1_interior.Color = Color.FromArgb(216, 49, 49); //Red