假设我在数据库中有一条记录,管理员和普通用户都可以进行更新.
任何人都可以建议一个好的方法/架构如何版本控制此表中的每个更改,以便可以将记录回滚到以前的版本.
继续我之前的问题,文本差异可视化的任何良好控制是什么?
像StackOverflow的修订差异查看器,但对于WinForms或WPF
要求:
没有应用程序,只有组件.
我对OSS差异工具不感兴趣
这里有一个由Google托管的非常酷的差异类:
http://code.google.com/p/google-diff-match-patch/
我之前在一些网站上使用过它,但现在我需要在 Excel宏中使用它来比较两个单元格之间的文本.
但是,它仅适用于JavaScript,Python,Java和C++,而不适用于VBA.
我的用户仅限于Excel 2003,因此纯.NET解决方案无效.手动将代码翻译为VBA将花费太多时间并且难以升级.
我考虑的一个选项是使用.NET编译器(JScript.NET或J#)编译JavaScript或Java源代码,使用Reflector输出为VB.NET,然后最终手动将VB.NET代码降级为VBA,给我一个纯粹的VBA解决方案.在使用任何.NET编译器进行编译时遇到问题之后,我放弃了这条路径.
假设我可以使用一个可用的.NET库,我本可以使用ExcelDna(http://www.codeplex.com/exceldna)这个开源Excel插件来简化.NET代码集成.
我的最后一个想法是托管一个Internet Explorer对象,向它发送JavaScript源代码并调用它.即使我让它工作,我的猜测是它会变得很脏而且很混乱.
更新:找到解决方案!
我通过接受的答案使用了下面描述的WSC方法.我不得不稍微更改WSC代码以清理差异并返回一个VBA兼容的数组数组:
function DiffFast(text1, text2)
{
var d = dmp.diff_main(text1, text2, true);
dmp.diff_cleanupSemantic(d);
var dictionary = new ActiveXObject("Scripting.Dictionary"); // VBA-compatible array
for ( var i = 0; i < d.length; i++ ) {
dictionary.add(i, JS2VBArray(d[i]));
}
return dictionary.Items();
}
function JS2VBArray(objJSArray)
{
var dictionary = new ActiveXObject("Scripting.Dictionary");
for (var i = 0; i < objJSArray.length; i++) {
dictionary.add( i, objJSArray[ i ] );
}
return dictionary.Items(); …Run Code Online (Sandbox Code Playgroud) 好吧,我想比较2个字符串(版本1和版本2)并获得我可以自己转换为html的格式的差异,就像你可以查看如何在堆栈溢出时编辑帖子或像svn跟踪之间的差异修订....
它必须是完整的托管代码库.
像这个 JavaScript,但我需要在服务器端做它..
我需要比较两个office文档,在这种情况下是两个word文档并提供差异,这有点类似于SVN中显示的内容.不是那么大,但至少能够突出差异.
我尝试使用办公室COM DLL,并得到了这个...
object fileToOpen = (object)@"D:\doc1.docx";
string fileToCompare = @"D:\doc2.docx";
WRD.Application WA = new WRD.Application();
Document wordDoc = null;
wordDoc = WA.Documents.Open(ref fileToOpen, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);
wordDoc.Compare(fileToCompare, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);
Run Code Online (Sandbox Code Playgroud)
有关如何进一步处理的任何提示?这将是一个具有大量点击的Web应用程序.使用office com对象是正确的方法,还是有其他我可以看的东西?