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