I have written code that takes two Excel files and compares them.
Anything in the second Excel File that does not match the exact same cell from the first Excel File gets a cross-hatch pattern to signify that something has changed.
This file is then saved with a new name so that the original two files are left un-altered.

Issue: If you insert a row/column, that row/column and everything after it will be "different."
The driver for this project is an Excel File that has 26 (or more) worksheets - each one can have a completely different layout. Thus, I cannot simply look in one column for an "identifier" to see if it has changed and if so, find it on the page. This Excel file is sent to another person, updated, and sent back.

Anyone have another idea of how I can do this?
(Note: I am using GemBox.Spreadsheet to access Excel as it is much faster than using Excel Com Object - thus the code...)

Some thoughts:
Before sending the initial Excel file, could I run it through a program to "tag" each cell? Perhaps giving it a name/range or something else? Ideally this would be something not easily visible/changed by the other person (thus not using the comments).


Code:
Dim ef As New ExcelFile 
                Dim ef2 As New ExcelFile 
                Dim ws As ExcelWorksheet = ef.Worksheets(0) 
                Dim ws2 As ExcelWorksheet = ef2.Worksheets(0) 
 
                Dim sheetCount As Integer = 0 
                For Each sheet In ef.Worksheets 
                        ws2 = ef2.Worksheets(sheetCount) 
                        Dim rowCount As Integer = 0 
                        For Each row In sheet.Rows 
                                Dim columnCount As Integer = 0 
                                For Each cell In row.AllocatedCells 
                                        Dim wsCell, ws2Cell As String 
                                        wsCell = cell.value 
                                        ws2Cell = ws2.Cells(rowCount, columnCount).Value 
                                        If wsCell <> ws2Cell Then 
                                                ws2.Cells(rowCount, columnCount).Style.FillPattern.SetPattern(FillPatternStyle.ThinHorizontalCrosshatch, Color.Green, Color.Yellow) 
                                        End If 
                                        columnCount += 1 
                                Next 
                                rowCount += 1 
                        Next 
                        sheetCount += 1 
                Next

Last edited by shabbir; 9Jun2010 at 19:51.. Reason: Code blocks