脑子木了,简单方法调用问题,求解决方案?有代码有易做图
怎么能让SlideShow(int page)方法在比对得到动画不一致的情况下调用。起初想法是重载GetInfo()方法,返回Presentation,现在看来好像不行,因为这样的话,CopyItem()方易做图因为方法返回类型不明确而报错。
看易做图:
--------------------编程问答-------------------- 荷,ppt的二次开发,这种东西还真是少见啊
#region 遍历幻灯片并提取相应动画信息
/// <summary>
///
/// </summary>
public List<string> mi_GetInfo()
{
pptApp.Visible = Microsoft.Office.Core.MsoTriState.msoTrue;
pptPresentation = pptApp.Presentations.Open(fileName, Microsoft.Office.Core.MsoTriState.msoFalse, Microsoft.Office.Core.MsoTriState.msoFalse, Microsoft.Office.Core.MsoTriState.msoTrue);
mi_logview.Write(LogView.eType.Success, "文档读取成功,从第一个动画页开始分析并提取相关信息...");
foreach (PowerPoint.Slide slide in pptPresentation.Slides)
{
foreach (PowerPoint.Shape shape in slide.Shapes)
{
if (slide.TimeLine.MainSequence.FindFirstAnimationFor(shape) != null)
{
Ani_item.Add("当前页面是第 " + slide.SlideNumber.ToString() + " 页");
...此处省略代码若干,基本都是添加泛型集合
}
}
mi_logview.Write(LogView.eType.Success, "当前第 " + slide.SlideNumber.ToString() + " 页分析完成");
mi_logview.Write(LogView.eType.Normal, "==============================================");
}
//pptApp.Quit();
GC.Collect();
return Ani_item;
}
#endregion
此处为放弃的方案
#region GetInfo 重载
#endregion
#region 跟踪信息
/// <summary>
/// 在LogView中跟踪信息提取
/// </summary>
public void TraceAnimation()
{
foreach (string InfoStr in Ani_item)
{
mi_logview.Write(LogView.eType.Trace, InfoStr);
}
}
#endregion
#region 拷贝数据
/// <summary>
/// 将分析得到的数据拷贝
/// </summary>
public void CopyItem()
{
Ani_item2 = mi_GetInfo();
}
public void ComyItem2()
{
Ani_item1 = mi_GetInfo();
}
#endregion
#region 分析暂停,并演示幻灯片
/// <summary>
///
/// </summary>
///
protected void DelaySlideShow()
{
声明了Timer,哪位仁兄好心能给出方案让放映幻灯片的同时让Richtextbox 停止工作,不胜感谢
}
#endregion
#region 比较动画信息
/// <summary>
/// 将动画按顺序比较
/// </summary>
/// <param name="page"></param>
///
public void Compare()
{
if (Ani_item1.Count != Ani_item2.Count)
{
MessageBox.Show("两个文件页数长度不一致或提取数据出现异常!请核对是否打开了使用了正常的文件进行比对?");
}
try
{
for (int i = 0; i < Ani_item2.Count; i++)
{
if (Ani_item1[i] == Ani_item2[i])
{
MessageBox.Show("相同 ");
}
else if (Ani_item1[i] != Ani_item2[i])
{
MessageBox.Show("比对结果发生在第" + Epage + "页!");
SlideShow(Epage)
}
else
{
}
}
}
catch (ArgumentException e)
{
MessageBox.Show("异常: 程序检测到两个文件动画数据长度不一致, " + e.ToString());
}
}
#endregion
public void SlideShow(int page)
{
pptPresentation.SlideShowSettings.RangeType = Microsoft.Office.Interop.PowerPoint.PpSlideShowRangeType.ppShowSlideRange;
pptPresentation.SlideShowSettings.StartingSlide = page;
pptPresentation.SlideShowSettings.EndingSlide = page + 1;
pptPresentation.SlideShowSettings.Run();
}
}
}
mark一下先 --------------------编程问答-------------------- 少见,不懂.替你急啊. --------------------编程问答-------------------- 别介!来个人嘛 --------------------编程问答-------------------- VBA? 没搞过PPT 。 mark --------------------编程问答-------------------- Richtextbox 停止工作
此控件工作的时候在做什么事情 --------------------编程问答--------------------
Log 文字,提示软件信息报一些错误。
--------------------编程问答-------------------- 不懂·帮顶 = - --------------------编程问答-------------------- 帮不了忙,只有一顶了 --------------------编程问答-------------------- 帮不了忙,只有一顶了 --------------------编程问答-------------------- 哎,真没有人能顶啊。 --------------------编程问答-------------------- 帮忙顶起
--------------------编程问答-------------------- 学习,帮顶 --------------------编程问答-------------------- 不会,只能帮顶 --------------------编程问答-------------------- 帮顶了,实在不懂! --------------------编程问答-------------------- 再顶了。 --------------------编程问答-------------------- 顶起! --------------------编程问答-------------------- 我再顶起! --------------------编程问答-------------------- 楼主别急。。等阿捷。。逍遥。。过客他妈来了就好办了。。_-_ --------------------编程问答-------------------- 我顶内个肺 --------------------编程问答--------------------
这些人是高手? --------------------编程问答-------------------- --------------------编程问答--------------------
--------------------编程问答-------------------- 不太明白你的意思:
//接着顶
1、你的richTextBox控件名是?
2、DelaySlideShow你要在哪里调用?
你目前的程序,哪些代码行是写入log等信息到richTextBox的?
是通过 mi_logview.Write(LogView.eType.Trace, InfoStr);
操作的? --------------------编程问答-------------------- 其实主要问题 是slideshow()方法调用的时候,没有办法把 pptApp pptPresentation 两个接口传递过来 。我考虑过放到构造函数中初如化这两个接口,但是因为是两个或多个PPT进行分析,如果这样,调 用方法的时候就会又重新打开当前的PPT,这样就重复了。
不是知道仁兄有没有更好的办法。
--------------------编程问答-------------------- 不懂·帮顶 = - --------------------编程问答--------------------
又见放歌大大
你上次写的那个小算法 俺还记忆犹新啊 --------------------编程问答-------------------- 哥们,半夜的,看到回复还多高兴呢。您老人家聊天来着。
--------------------编程问答-------------------- 再顶! --------------------编程问答-------------------- 是的。。在我眼中是高手。。有些解决办法他们用的很纯熟。。特别阿捷。。分涨啊。。哈哈哈
--------------------编程问答-------------------- 问题能解决什么都好说,现在没有人能说出个123
--------------------编程问答-------------------- --------------------编程问答-------------------- 又一个凑热闹的,期盼高手出现。 --------------------编程问答-------------------- 楼主的代码看不懂啊:
两个或多个ppt进行分析?但在代码里没看到有多个pptApp啊!
CopyItem(),CopyItem2()这两个方法得到的结果不是一样的嘛?
楼主的代码都是一个类里面的方法?这个类只有一个实例?依次调用这个类的CopyItem(),CopyItem2(),Compare()就能比较了? --------------------编程问答-------------------- 学习,帮顶
补充:.NET技术 , C#