比对xls文件
使用bat运行diff-xls.js文件
bat代码
@echo off
Cscript "路径\diff-xls.js" %1 %2
JS代码
// extensions: xls;xlsx;xlsm;xlsb;xlam
//
// TortoiseSVN Diff script for Excel files
//
// Copyright (C) 2004-2008, 2012-2016, 2019 the TortoiseSVN team
// This file is distributed under the same license as TortoiseSVN
//
// Last commit by:
// $Author: stefankueng $
// $Date: 2019-08-04 12:31:04 +0200 (So., 04 Aug 2019) $
// $Rev: 28647 $
//
// Authors:
// Hiroki Najima <h.najima at gmail.com>, 2013
// Michael Joras <michael@joras.net>, 2008
// Suraj Barkale, 2006
//
// ----- configuration -----
// Fast mode switch
// Fast mode does not copy Worksheets but require opened base document at the same time.
var bFastMode = false;
// ----- constants -----
var vbCritical = 0x10;
var vbExclamation = 0x30;
//var vbInformation = 0x40;
var xlNone = -4142;
var xlMaximized = -4137;
var xlArrangeStyleHorizontal = -4128;
var xlCellValue = 1;
//var xlExpression = 2;
//var xlEqual = 3;
var xlNotEqual = 4;
//var vOffice95 = 7;
//var vOffice97 = 8;
//var vOffice2000 = 9;
//var vOffice2002 = 10;
var vOffice2003 = 11;
//var vOffice2007 = 12;
//var vOffice2010 = 14;
//var vOffice2013 = 15;
// ----- main -----
var aWarningMessages = [];
var objArgs = WScript.Arguments;
if (objArgs.length < 2)
{
Abort("Usage: [CScript | WScript] diff-xls.js base.xls new.xls", "Invalid arguments");
}
var sBaseDoc = objArgs(0);
var sNewDoc = objArgs(1);
var objScript = new ActiveXObject("Scripting.FileSystemObject");
if (objScript.GetBaseName(sBaseDoc) === objScript.GetBaseName(sNewDoc))
{
Abort("File '" + sBaseDoc + "' and '" + sNewDoc + "' is same file name.\nCannot compare the documents.", "Same file name");
}
if (!objScript.FileExists(sBaseDoc))
{
Abort("File '" + sBaseDoc + "' does not exist.\nCannot compare the documents.", "File not found");
}
if (!objScript.FileExists(sNewDoc))
{
Abort("File '" + sNewDoc + "' does not exist.\nCannot compare the documents.", "File not found");
}
sBaseDoc = objScript.GetAbsolutePathName(sBaseDoc);
sNewDoc = objScript.GetAbsolutePathName(sNewDoc);
objScript = null;
var objExcelApp;
try
{
objExcelApp = WScript.CreateObject("Excel.Application");
}
catch (e)
{
Abort("You must have Excel installed to perform this operation.", "Excel Instantiation Failed");
}
// disable all macros
objExcelApp.AutomationSecurity = 3; //msoAutomationSecurityForceDisable
var fExcelVersion = parseInt(objExcelApp.Version, 10);
// Open base Excel book
var objBaseWorkbook;
try
{
objBaseWorkbook = objExcelApp.Workbooks.Open(sBaseDoc, null, true);
}
catch (e)
{
Abort("Failed to open '" + sBaseDoc + "'\nIt might not be a valid Excel file.", "File open error");
}
// Open new Excel book
var objNewWorkbook;
try
{
objNewWorkbook = objExcelApp.Workbooks.Open(sNewDoc, null, true);
}
catch (e)
{
Abort("Failed to open '" + sNewDoc + "'\nIt might not be a valid Excel file.", "File open error");
}
// Show Excel window
objExcelApp.Visible = true;
// Arrange windows
if (objBaseWorkbook.ProtectWindows || objNewWorkbook.ProtectWindows)
{
StoreWarning("Unable to arrange windows because one or both Workbooks are protected.");
}
else
{
// Make windows a compare side by side view
if (fExcelVersion >= vOffice2003)
{
objExcelApp.Windows.CompareSideBySideWith(objExcelApp.Windows(2).Caption);
}
objExcelApp.Application.WindowState = xlMaximized;
objExcelApp.Windows.Arrange(xlArrangeStyleHorizontal);
}
if (!bFastMode && objNewWorkbook.ProtectWindows)
{
StoreWarning("Fall back to fast mode because " + objNewWorkbook.Name + " is protected.");
bFastMode = true;
}
// Create a special workbook for formula conversion.
var objSpecialWorkbook = objExcelApp.Workbooks.Add;
// Mark differences in sNewDoc red
var length = objNewWorkbook.Worksheets.Count;
for (var i = 1; i <= length; i++)
{
var objBaseWorksheet = null;
if (i <= objBaseWorkbook.Worksheets.Count) {
objBaseWorksheet = objBaseWorkbook.Worksheets(i);
}
var objNewWorksheet = objNewWorkbook.Worksheets(i);
if (objBaseWorksheet !== null) {
UnhideWorksheet(objBaseWorksheet);
}
UnhideWorksheet(objNewWorksheet);
if (!bFastMode && objBaseWorksheet !== null)
{
objBaseWorkbook.Sheets(i).Copy(null, objNewWorkbook.Sheets(objNewWorkbook.Sheets.Count));
var objDummyWorksheet = objNewWorkbook.Sheets(objNewWorkbook.Sheets.Count);
objDummyWorksheet.Name = "Dummy_for_Comparison" + i;
objDummyWorksheet.Visible = true;
if (fExcelVersion >= vOffice2003)
{
objDummyWorksheet.Tab.ColorIndex = 16; // 16: Dark gray RGB(128,128,128)
}
}
if (objNewWorksheet.ProtectContents)
{
StoreWarning("Unable to mark differences to " +
ToAbsoluteReference(objNewWorksheet) +
" because the Worksheet is protected.");
}
else
{
objNewWorksheet.Cells.FormatConditions.Delete();
var sFormula;
if (bFastMode && objBaseWorksheet !== null)
{
sFormula = "=INDIRECT(\"" + ToAbsoluteReference(objBaseWorksheet) + "!\"&ADDRESS(ROW(),COLUMN()))";
}
else
{
sFormula = "=INDIRECT(\"Dummy_for_Comparison" + i + "!\"&ADDRESS(ROW(),COLUMN()))";
}
sFormula = convertFormula(sFormula);
objNewWorksheet.Cells.FormatConditions.Add(xlCellValue, xlNotEqual, sFormula);
objNewWorksheet.Cells.FormatConditions(1).Interior.ColorIndex = 3; // 3:Red RGB(128,0,0)
}
}
// Close the special workbook quietly
objSpecialWorkbook.Saved = true;
objSpecialWorkbook.Close();
// Activate first Worksheet
objBaseWorkbook.Sheets(1).Activate();
objNewWorkbook.Sheets(1).Activate();
// Suppress save dialog if nothing changed
objBaseWorkbook.Saved = true;
objNewWorkbook.Saved = true;
// Show warnings if exist
ShowWarning();
WScript.Quit(0);
// ----- functions -----
// Show Message Dialog
// VBcript's MsgBox emulation
function MsgBox(sMessage, iButtons, sTitle)
{
var objShell = new ActiveXObject("WScript.Shell");
objShell.popup(sMessage, 0, sTitle, iButtons);
}
// Show an error message and quit script with cleanup Excel Application Object.
function Abort(sMessage, sTitle)
{
MsgBox(sMessage, vbCritical, sTitle);
if (objExcelApp)
{
objExcelApp.Quit();
}
WScript.Quit(1);
}
// Unhide the Worksheet if it is hidden.
// This also sets color to the tab, if Office2003 or later.
// - 46 (Orange) : Hidden Worksheet
// - xlNone (default) : Not hidden Worksheet
function UnhideWorksheet(objWorksheet)
{
if (objWorksheet.Visible)
{
if (fExcelVersion >= vOffice2003)
{
if (objWorksheet.Tab.ColorIndex !== xlNone)
{
if (objWorksheet.Parent.ProtectStructure)
{
StoreWarning("Unable to set tab color to " +
ToAbsoluteReference(objWorksheet) +
" because the Workbook's structure is protected.");
}
else
{
objWorksheet.Tab.ColorIndex = xlNone;
}
}
}
}
else if (objWorksheet.Parent.ProtectStructure)
{
StoreWarning("Unable to unhide " +
ToAbsoluteReference(objWorksheet) +
" because the Workbook's structure is protected.");
}
else
{
objWorksheet.Visible = true;
if (fExcelVersion >= vOffice2003)
{
objWorksheet.Tab.ColorIndex = 10; // 10:Green RGB(0,128,0)
}
}
}
// Generate Absolute Reference Formula of Worksheet.
function ToAbsoluteReference(objWorksheet)
{
return "[" + objWorksheet.Parent.Name + "]" + objWorksheet.Name;
}
// Convert a formula for workaround in some situation.
// Actually I don't know what will be changed between sFormula and FormulaLocal.
function convertFormula(sFormula)
{
var worksheet = objSpecialWorkbook.Sheets(1);
var originalContent = worksheet.Cells(1, 1).Formula;
worksheet.Cells(1, 1).Formula = sFormula;
sFormula = worksheet.Cells(1, 1).FormulaLocal;
worksheet.Cells(1, 1).Formula = originalContent;
return sFormula;
}
// Accumulate a warning message.
function StoreWarning(sMessage)
{
aWarningMessages[aWarningMessages.length] = sMessage;
}
// Show accumulated warning messages if exist.
// To avoid make huge message dialog, this limits message count to show.
function ShowWarning()
{
var aWarningMessagesLength = aWarningMessages.length;
if (aWarningMessagesLength === 0)
{
return;
}
var sMessage = "The following warnings occurred while processing.\n";
for (var j = 0; j < aWarningMessagesLength; j++)
{
if (j >= 10)
{
sMessage += "... And more " + (aWarningMessagesLength - j) + " messages";
break;
}
sMessage += "[" + (j + 1) + "] " + aWarningMessages[j] + "\n";
}
MsgBox(sMessage, vbExclamation, "Warning");
}
比对xls文件的更多相关文章
- [数据科学] 从csv, xls文件中提取数据
在python语言中,用丰富的函数库来从文件中提取数据,这篇博客讲解怎么从csv, xls文件中得到想要的数据. 点击下载数据文件http://seanlahman.com/files/databas ...
- 用DataGridView导入TXT文件,并导出为XLS文件
使用 DataGridView 控件,可以显示和编辑来自多种不同类型的数据源的表格数据.也可以导出.txt,.xls等格式的文件.今天我们就先介绍一下用DataGridView把导入txt文件,导出x ...
- sharepoint2013爬xls文件:Error initializing IFilter for extension的解决方案
最近sharepoint2013爬网出现: error initializing IFilter for extension '.xls' (Error code is 0x80030002). Th ...
- java上传xls文件
using System; using System.Collections.Generic; using System.Web; using System.Web.UI; using System. ...
- Python中,添加写入数据到已经存在的Excel的xls文件,即打开excel文件,写入新数据
背景 Python中,想要打开已经存在的excel的xls文件,然后在最后新的一行的数据. 折腾过程 1.找到了参考资料: writing to existing workbook using xlw ...
- Excel的文件打开特别慢,xls文件特别大解决一例
Excel的文件打开特别慢,xls文件特别大解决一例 打开Excel的xls文件打开特别慢,而且操作也非常慢,动辄需要10几20分钟,很不正常.一个简单的Excel的xls文件有10几兆,甚至几百兆的 ...
- Excel 关于新建xls文件 新建sheet 合并sheet的VBA操作代码
Sub 合并一个文件夹下全部xls文件中sheet到一个xls的sheet()workDir = ThisWorkbook.Path '当前xls文件所在的目录绝对路径'MsgBox workDir, ...
- poi excel文件上传并解析xls文件
1.jsp页面 <form action="hw/pe_xls_upload" method="post" enctype="multipart ...
- php中使用PHPExcel操作excel(xls)文件
读取中文的xls.csv文件会有问题,网上找了下资料,发现PHPExcel类库好用,官网地址:http://phpexcel.codeplex.com/ 1.读取xls文件内容 代码如下 复制代码 ...
- java poi导入EXCEL xls文件代码
/** * */ package com.bn.car.common.report.excel; import java.io.FileInputStream; import java.io.IOEx ...
随机推荐
- zabbix数据库
1. 安装MySQL 5.6 操作系统为CentOS7 X64 MySQL文件下载地址 http://dev.mysql.com/downloads/repo/yum/ 卸载已存在文件 rpm -qa ...
- 安装PHP5.6.20
安装php的前提是安装了数据库和httpd!!!!!!!! 1 因为yum缺省安装的是PHP5.4,所以先要添加yum库 [root@svnhost ~]# rpm -Uvh https://mirr ...
- 【动手学深度学习】第五章笔记:层与块、参数管理、自定义层、读写文件、GPU
为了更好的阅读体验,请点击这里 由于本章内容比较少且以后很显然会经常回来翻,因此会写得比较详细. 5.1 层和块 事实证明,研究讨论"比单个层大"但"比整个模型小&quo ...
- CLR via C# 笔记 -- 可空值类型(19)
1. 值类型的变量永远不会为null,所有需要使用System.Nullable<T> 2. 操作数是null,结构是null:==.!=操作数都为null,则返回true:<.&g ...
- libevent之evbuffer
目录 Evbuffers:缓冲 IO 的实用程序功能 简介 创建或释放 evbuffer Evbuffers 和线程安全 检查 evbuffer 向 evbuffer 添加数据:基础知识 将数据从一个 ...
- 在Linux驱动中使用notifier通知链
在Linux驱动中使用notifier通知链 背景 在驱动分析中经常看到fb_notifier_callback,现在趁有空学习一下. 介绍 linux中的观察者模式是最显然的就是"通知链& ...
- 读懂反向传播算法(bp算法)
原文链接:这里 介绍 反向传播算法可以说是神经网络最基础也是最重要的知识点.基本上所以的优化算法都是在反向传播算出梯度之后进行改进的.同时,也因为反向传播算法是一个递归的形式,一层一层的向后传播误差即 ...
- 案例源码公开!分享瑞芯微RK3568J与FPGA的PCIe通信案例,嵌入式必读!
ARM + FPGA架构有何种优势 近年来,随着中国新基建.中国制造2025的持续推进,单ARM处理器越来越难满足工业现场的功能要求,特别是能源电力.工业控制.智慧医疗等行业通常需要ARM + F ...
- 韦东山IMX6ULL Linux开发板基于Buildroot系统QT应用环境配置开发运行
@ 目录 一. 编译系统 1.设置交叉编译工具链 2.编译系统 二. QT下载 1.安装 Qtcreator 2.创建第一个程序 3.配置 QtCreator 开发环境 4.移植QT程序到开发板 一. ...
- LabVIEW Actor Framwork (1)________ 边学边做server&client
初始需求: 现在要做一个类似聊天的demo,一个server端,若干个client端:首先是server启动,通过server可以打开若干个client端,然后每个client可以独立给server发 ...