将MS ChartImage导出到PPT [英] Export MS ChartImage to PPT

查看:114
本文介绍了将MS ChartImage导出到PPT的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试将图表图像导出到PPT,即一张幻灯片中的每个图像,下面是我的代码

I am trying to Export Chart images to PPT i.e. each image in one slide, below is my code

 String strTemplate, strPic;
            strTemplate = "C:\\Program Files (x86)\\Microsoft Office\\Templates\\Presentation Designs\\Maple.GIF";

            //strPic = @"C:\Users\rongala.ganesh\Pictures\arrow_left_green_large.png";

            bool bAssistantOn;

            Microsoft.Office.Interop.PowerPoint.Application objApp;
            Microsoft.Office.Interop.PowerPoint.Presentations objPresSet;
            Microsoft.Office.Interop.PowerPoint._Presentation objPres;
            Microsoft.Office.Interop.PowerPoint.Slides objSlides;
            Microsoft.Office.Interop.PowerPoint._Slide objSlide;
            Microsoft.Office.Interop.PowerPoint.TextRange objTextRng;
            Microsoft.Office.Interop.PowerPoint.Shapes objShapes;
            Microsoft.Office.Interop.PowerPoint.Shape objShape;
            Microsoft.Office.Interop.PowerPoint.SlideShowWindows objSSWs;
            Microsoft.Office.Interop.PowerPoint.SlideShowTransition objSST;
            Microsoft.Office.Interop.PowerPoint.SlideShowSettings objSSS;
            Microsoft.Office.Interop.PowerPoint.SlideRange objSldRng;
            //Create a new presentation based on a template.
            objApp = new Microsoft.Office.Interop.PowerPoint.Application();
            objApp.Visible = MsoTriState.msoTrue;
            objPresSet = objApp.Presentations;
            objPres = objPresSet.Open(strTemplate,
                 MsoTriState.msoFalse, MsoTriState.msoTrue, MsoTriState.msoTrue);
            objSlides = objPres.Slides;
            //Build Slide #1:
            //Add text to the slide, change the font and insert/position a
            //picture on the first slide.
            objSlide = objSlides.Add(1, Microsoft.Office.Interop.PowerPoint.PpSlideLayout.ppLayoutTitleOnly);
            objTextRng = objSlide.Shapes[1].TextFrame.TextRange;
            // objTextRng.Text = "FAME Presentation";
            objTextRng.Font.Name = "Comic Sans MS";
            objTextRng.Font.Size = 25;
            foreach (var ar in arr)
            {
                // ScriptManager.RegisterClientScriptBlock(this.Page,typeof(string),"alert"
                objSlide = objSlides.Add(1, Microsoft.Office.Interop.PowerPoint.PpSlideLayout.ppLayoutTitleOnly);
                objTextRng = objSlide.Shapes[1].TextFrame.TextRange;
                // objTextRng.Text = "FAME Presentation";
                objTextRng.Font.Name = "Comic Sans MS";
                objTextRng.Font.Size = 25;
                string[] str = (string[])ar;
                strPic = str[0];
                objSlide.Shapes.AddPicture(strPic, MsoTriState.msoFalse, MsoTriState.msoTrue,
                      150, 150, 500, 350);
                objTextRng = objSlide.Shapes[1].TextFrame.TextRange;
                objTextRng.Text = str[1];
                objTextRng.Font.Name = "Comic Sans MS";
                objTextRng.Font.Size = 48;

                //Build Slide #2:
                //Add text to the slide title, format the text. Also add a chart to the
                //slide and change the chart type to a 3D pie chart.

                //Build Slide #3:
                //Change the background color of this slide only. Add a text effect to the slide
                //and apply various color schemes and shadows to the text effect.
            }



        }
        catch (Exception ex)
        {

            throw ex;
        }

运行此命令时,localHost的所有操作均正常,但是当我托管此应用程序IIS7时,Throwing exception PowerPoint无法打开文件.所以我认为最好添加Response Header,所以我遵循以下代码

When I Run this, every thing is working fine in localHost, but when I host this application IIS7 it Throwing exception PowerPoint could not open file. So what I thought is better to add Response Header, so I followed the below code

dt 是数据表名称,其中包含当我单击SaveImage时保存的图像的路径

dt is the DataTable Name which contains paths of the images saved when I click on SaveImage

 GridView1.AllowPaging = false;

            GridView1.DataSource = dt;
            GridView1.DataBind();////////write this code only if paging is enabled.

            Response.Clear();

            Response.AddHeader("content-disposition", "attachment;filename=FileName.ppt");///////for text file write FileName.txt

            Response.Charset = "";
            // If you want the option to open the Excel file without saving than

            // comment out the line below
            // Response.Cache.SetCacheability(HttpCacheability.NoCache);

            Response.ContentType = "application/vnd.ppt";//for text file write vnd.txt



            System.IO.StringWriter stringWrite = new System.IO.StringWriter();
            System.Web.UI.HtmlTextWriter htmlWrite =

            new HtmlTextWriter(stringWrite);
            GridView1.RenderControl(htmlWrite);

            Response.Write(stringWrite.ToString());

            Response.End();

我可以在此处将图像添加到PPT中,但是它们在同一张幻灯片中,并且图像彼此重叠.

Here I can add Images to PPT, but they are in same slide, and the images are overlapping each other.

推荐答案

MS不支持在服务器上使用Interop(例如ASP.NET)-请参见

Using Interop on the server (like ASP.NET) is NOT supported by MS - see http://support.microsoft.com/default.aspx?scid=kb;EN-US;q257757#kb2

由于Windows Vista MS引入了几种与安全性有关的措施,这些措施可防止Windows服务执行类似于桌面的"操作……这意味着您必须规避几种安全性措施才能使其正常工作(不推荐!).

Since Windows Vista MS introduced several security-related measures which prevent a Windows Service from doing "desktop-like" things... which means you would have to circumvent several security measures to get it to work (NOT recommended!).

要在服务器场景中处理PPT,有一些选择(免费和商业):

To deal with PPT in a server-scenario there are some options (free and commercial) out there:

例如(一个商业选项是 Aspose.Slides ,它可以处理旧的(PPT)和新的(PPTX)格式.

A commercial option is Aspose.Slides which can handle old (PPT) and new (PPTX) format.

这篇关于将MS ChartImage导出到PPT的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆