比较2两个xlsx文件(SVN differ等)

通过乌龟svn看两个excel文件的differ挺痛苦的,一个格子红一个不红的,很不直观。

我们的目标是,希望可以和查看TXT文件一样来查看两个excel文件的差异。

思路

①先把xlsx文件转为csv文件

②通过第三方的对比软件展示差异化内容(比如TortoiseMerge.exe)

XLSX转CSV

这一步通过类库比如EPPLUS或微软的库,都可以做到。我这边使用的EPPLUS

        public static string Convert(string fileName)
        {
            var fi = new FileInfo(fileName);
            var tempFile = Path.GetTempFileName();
            StreamWriter sw = new StreamWriter(tempFile);
            using (ExcelPackage ep =  ExcelFileOpener.Open(fi, false))
            {
                var workbook = ep.Workbook;

                for (int i = 1; i <= workbook.Worksheets.Count; i++)
                {
                    WriteSheet(workbook.Worksheets[i], sw);
                }
            }

            sw.Close();
            return tempFile;
        }

        private static void WriteSheet(ExcelWorksheet sheetIn, StreamWriter sw)
        {
            if (sheetIn.Name.StartsWith("~") || sheetIn.Dimension == null)
                return;

            for (int row = 1; row <= sheetIn.Dimension.End.Row; row++)
            {
                for (int col = 1; col <= sheetIn.Dimension.End.Column; col++)
                {
                    sw.Write(sheetIn.GetValue(row, col) + "\t"); 
                }

                sw.WriteLine();
            }
        }

我们看一个excel文件转化为一个win临时文件夹中的csv文件。

完成文本对比调用

        static void Main(string[] args)
        {
            var tortoiseMergePos = args[0];
            var oldPath = args[1];
            var newPath = args[2];

            var csvOldFile = Excel2Csv.Convert(oldPath);
            var csvNewFile = Excel2Csv.Convert(newPath);

            System.Diagnostics.Process.Start(tortoiseMergePos, string.Format("{0} {1}", csvOldFile, csvNewFile));
        }

这一步就非常简单了,直接贴main函数。

要关联svn使用,我们只需要指定svn对于.xlsx文件格式的比较程序脚本为

"XXX\bin\Debug\ExcelComparer.exe" "D:\Program Files\TortoiseSVN\bin\TortoiseMerge.exe" %base %mine

最后的对比效果

猜你喜欢

转载自blog.csdn.net/narlon/article/details/86645118
今日推荐