116 个问题
我写了一段代码来实现这一点,并将结果存储在表格格式:
Microsoft.Office.Interop.Excel.Application application = new Microsoft.Office.Interop.Excel.Application();
Workbook workbook = application.Workbooks.Open(@"D:\test44\excel\test1.xlsx");
Worksheet xlWorksheet = (Worksheet)workbook.Sheets[1];
Range range1 = xlWorksheet.get_Range("B6", "F11");
object[,] valueArray = (object[,])range1.get_Value(XlRangeValueDataType.xlRangeValueDefault);
Range range2 = xlWorksheet.get_Range("H6", "L11");
object[,] valueArray2 = (object[,])range2.get_Value(XlRangeValueDataType.xlRangeValueDefault);
List<Tuple<int, int>> res = new List<Tuple<int, int>>();
for (int i = 1; i <= valueArray.GetLength(0); i++)
{
for (int j = 1; j <= valueArray.GetLength(1); j++)
{
if (valueArray[i, j].ToString() != valueArray2[i, j].ToString())
{
res.Add(new Tuple<int, int>(i, j));
}
}
}
string rangeStart = "B14";
string rangeEnd = "F19";
Range range = xlWorksheet.get_Range(rangeStart, rangeEnd);
range.set_Value(XlRangeValueDataType.xlRangeValueDefault, valueArray2);
xlWorksheet.ListObjects.Add(XlListObjectSourceType.xlSrcRange, range,
Type.Missing, XlYesNoGuess.xlYes, Type.Missing).Name = "TestTable";
xlWorksheet.ListObjects["TestTable"].TableStyle = "TableStyleMedium3";
foreach (var item in res)
{
string cell = (char)(item.Item2 + 64) + item.Item1.ToString();
Console.WriteLine(cell);
range.Range[cell].Font.Color = ColorTranslator.ToOle(Color.Red);
}
workbook.Save();
workbook.Close();
application.Quit();
为了方便起见,我直接写了范围。在实际使用中,需要将其作为参数传递给该方法。
应该注意的是,我使用了范围。Range[cell] 在代码中。这个“单元格”的位置是相对于“range”对象的,而不是相对于整个excel文件的。例如,如果“cell”是“C3”,它实际上是这张纸的“C16”,这是图片中第一个突出显示的单元格。
而且,如果可能的话,我建议您还将初始表修改为与结果表相同的格式,以便您可以使用以下代码获取其值,而无需指定范围。
List<object[,]> tables = new List<object[,]>();
for (int i = 1; i <= xlWorksheet.ListObjects.Count; i++)
{
Range srcRow = xlWorksheet.ListObjects[i].Range;
object[,] valueArray = (object[,])srcRow.get_Value(
XlRangeValueDataType.xlRangeValueDefault);
tables.Add(valueArray);
}
在这种情况下,只需要一个参数来指定结果表的范围。
如果回复有帮助,请点击“接受答案”并点赞。 注意:如果您想接收此线程的相关电子邮件通知,请按照我们文档中的步骤启用电子邮件通知。