比较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

最后的对比效果

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值