在 git 中配置 PowerPoint 比较和合并
Configure PowerPoint Compare & Merge in git
PowerPoint 具有比较 UI 中的 2 个 PowerPoint 文件的功能。它位于 Review 功能区,然后是 Compare。
我想配置 git 以便能够从命令行比较和合并 2 个 PowerPoint 文件,弹出打开 PowerPoint,解决更改并保存。
但不幸的是,我似乎无法找到一种无需多次点击即可在比较模式下打开 PowerPoint 的方法。有谁知道调用 powerpnt.exe 以这种神奇模式打开的正确方法吗?
经过充分研究,结论是,虽然 PowerPoint 确实支持合并模式,但无法使用 command-line 参数在该模式下打开它。
但是 API 合并文档在 COM 对象模型中可用,因此也可从 .NET 通过主要互操作程序集使用。
我最终写了一个小的 open-source 项目,作为 command-line 和 PowerPoint 之间的代理来启动和合并文件。 (目前仍在进行中和粗糙的工作):
https://github.com/jessehouwing/ppt-diffmerge
ppt-diffmerge-tool --local="$LOCAL" --remote="$REMOTE" --base="$BASE" --output="$RESULT"
核心代码:
PowerPointApplication app = null;
Presentation presentation = null;
try
{
app = new PowerPointApplication();
app.PresentationCloseFinal += App_PresentationClose;
if (!string.IsNullOrWhiteSpace(Output))
{
File.Copy(Local, Output, true);
Local = Output;
}
presentation = app.Presentations.Open(Local);
if (string.IsNullOrWhiteSpace(Base))
{
presentation.Merge(Remote);
}
else
{
presentation.MergeWithBaseline(Remote, Base);
}
handle.WaitOne();
}
finally
{
Marshal.ReleaseComObject(presentation);
Marshal.ReleaseComObject(app);
}
return 0;
这很疯狂,甚至支持 3 向合并!
PowerPoint 具有比较 UI 中的 2 个 PowerPoint 文件的功能。它位于 Review 功能区,然后是 Compare。
我想配置 git 以便能够从命令行比较和合并 2 个 PowerPoint 文件,弹出打开 PowerPoint,解决更改并保存。
但不幸的是,我似乎无法找到一种无需多次点击即可在比较模式下打开 PowerPoint 的方法。有谁知道调用 powerpnt.exe 以这种神奇模式打开的正确方法吗?
经过充分研究,结论是,虽然 PowerPoint 确实支持合并模式,但无法使用 command-line 参数在该模式下打开它。
但是 API 合并文档在 COM 对象模型中可用,因此也可从 .NET 通过主要互操作程序集使用。
我最终写了一个小的 open-source 项目,作为 command-line 和 PowerPoint 之间的代理来启动和合并文件。 (目前仍在进行中和粗糙的工作):
https://github.com/jessehouwing/ppt-diffmerge
ppt-diffmerge-tool --local="$LOCAL" --remote="$REMOTE" --base="$BASE" --output="$RESULT"
核心代码:
PowerPointApplication app = null;
Presentation presentation = null;
try
{
app = new PowerPointApplication();
app.PresentationCloseFinal += App_PresentationClose;
if (!string.IsNullOrWhiteSpace(Output))
{
File.Copy(Local, Output, true);
Local = Output;
}
presentation = app.Presentations.Open(Local);
if (string.IsNullOrWhiteSpace(Base))
{
presentation.Merge(Remote);
}
else
{
presentation.MergeWithBaseline(Remote, Base);
}
handle.WaitOne();
}
finally
{
Marshal.ReleaseComObject(presentation);
Marshal.ReleaseComObject(app);
}
return 0;
这很疯狂,甚至支持 3 向合并!