C# 穿透字符串PowerPoint互操作
我有两个PowerPoints,一个是原创的,一个是经过编辑的。我在每个PowerPoint中都有一个包含许多单词的文本框。这样做的目的是在已编辑的文档中找到从原始PowerPoint中添加或删除的任何单词,并将它们放入列表中。然后我想把这些已经被添加或删除的单词划掉,但是我不能访问我需要的任何属性,因为我有一个字符串而不是一个文本框。你知道我怎样才能把这些词删掉吗?例如,原文“本文本”编辑了“本新文本”结果“本新文本” 我的代码是fallowsC# 穿透字符串PowerPoint互操作,c#,interop,office-addins,C#,Interop,Office Addins,我有两个PowerPoints,一个是原创的,一个是经过编辑的。我在每个PowerPoint中都有一个包含许多单词的文本框。这样做的目的是在已编辑的文档中找到从原始PowerPoint中添加或删除的任何单词,并将它们放入列表中。然后我想把这些已经被添加或删除的单词划掉,但是我不能访问我需要的任何属性,因为我有一个字符串而不是一个文本框。你知道我怎样才能把这些词删掉吗?例如,原文“本文本”编辑了“本新文本”结果“本新文本” 我的代码是fallows List<int>
List<int> originalShapesListID = new List<int>();
List<int> editedShapesListID = new List<int>();
List<int> originalListID = new List<int>();
List<int> editedListID = new List<int>();
List<Microsoft.Office.Interop.PowerPoint.Shape> originalList = new List<Microsoft.Office.Interop.PowerPoint.Shape>();
List<Microsoft.Office.Interop.PowerPoint.Shape> editList = new List<Microsoft.Office.Interop.PowerPoint.Shape>();
Microsoft.Office.Interop.PowerPoint.Shape editedShpID;
List<Microsoft.Office.Interop.PowerPoint.Shape> originalListWords = new List<Microsoft.Office.Interop.PowerPoint.Shape>();
List<char> editListWords = new List<char>();
editedShpID = null;
Microsoft.Office.Interop.PowerPoint.Shape originalShpID;
long editedShapeID;
long originalShapeID;
editedShapeID = 0;
originalShapeID = 0;
originalShpID = null;
originalShp = null;
editShp = null;
Microsoft.Office.Interop.PowerPoint.TextFrame txtFrame;
char delimiter = Convert.ToChar(" ");
List<string> one = new List<string>();
List<string> two = new List<string>();
int indexOfWord = 0;
检查是否有添加或删除的单词
var q = from original in originalList
join editedTmp in editList on original.Id equals editedTmp.Id into g
from edited in g.DefaultIfEmpty()
select new
{
original,
edited
};
//foreach through both lists
foreach (var item in q)
{
List<string> diff;
var originalString = item.original.TextFrame.TextRange.Text;
var editString = item.edited.TextFrame.TextRange.Text;
var firstStringList = originalString.Split(delimiter).ToList();
var secondStringList = editString.Split(delimiter).ToList();
if (secondStringList.Count() > firstStringList.Count())
{
diff = secondStringList.Except(firstStringList).ToList();
//change to blue for added word
}
else
{
diff = firstStringList.Except(secondStringList).ToList();
// change to red for deleted word
}
var q=原始列表中的原始值
在原始.Id等于editedTmp.Id的editList中将editedTmp加入到g中
从g.DefaultIfEmpty()中编辑
选择新的
{
起初的
编辑
};
//浏览两个列表
foreach(q中的var项目)
{
列表差异;
var originalString=item.original.TextFrame.TextRange.Text;
var editString=item.edited.TextFrame.TextRange.Text;
var firstStringList=originalString.Split(分隔符).ToList();
var secondStringList=editString.Split(分隔符).ToList();
if(secondStringList.Count()>firstStringList.Count())
{
diff=secondStringList.Except(firstStringList.ToList();
//更改为蓝色以添加单词
}
其他的
{
diff=firstStringList.Except(secondStringList.ToList();
//将已删除的单词更改为红色
}
}
var q = from original in originalList
join editedTmp in editList on original.Id equals editedTmp.Id into g
from edited in g.DefaultIfEmpty()
select new
{
original,
edited
};
//foreach through both lists
foreach (var item in q)
{
List<string> diff;
var originalString = item.original.TextFrame.TextRange.Text;
var editString = item.edited.TextFrame.TextRange.Text;
var firstStringList = originalString.Split(delimiter).ToList();
var secondStringList = editString.Split(delimiter).ToList();
if (secondStringList.Count() > firstStringList.Count())
{
diff = secondStringList.Except(firstStringList).ToList();
//change to blue for added word
}
else
{
diff = firstStringList.Except(secondStringList).ToList();
// change to red for deleted word
}