zoukankan      html  css  js  c++  java
  • Silverlight visifire Chart图表下载到PPT文件中

    一、Silverlight xaml.cs文件

    1、 //下载图表
            private void btnDown_Click(object sender, RoutedEventArgs e)
            {
                DBServiceClient svc = new DBServiceClient();
                svc.ShowPresentationAsync();
                svc.ShowPresentationCompleted += new EventHandler<ShowPresentationCompletedEventArgs>(svc_ShowPresentationCompleted);
            }

    2、//下载图表
            private void svc_ShowPresentationCompleted(object sender, ShowPresentationCompletedEventArgs e)
            {
             string strUri = Application.Current.Host.Source.AbsoluteUri.Substring(0, Application.Current.Host.Source.AbsoluteUri.IndexOf("/ClientBin")) + "/Temp/" + "Silverlight图表.ppt";
              strUri = "window.location.href='" + strUri + "';";
              System.Windows.Browser.HtmlPage.Window.Eval(strUri);
                //删除Excel临时文件
                DBServiceClient svc = new DBServiceClient();
                svc.DeleteExcelReportAsync();
            }

    二、WCF

    添加引用

    using Microsoft.Office.Core;
    using PowerPoint = Microsoft.Office.Interop.PowerPoint;
    using Graph = Microsoft.Office.Interop.Graph;
    using System.Runtime.InteropServices;

    在所属项目中添加引用,COM选项卡下:

    Microsoft.Office.Interop.PowerPoint

    Microsoft Excel 12.0 Object Library

    Microsoft Graph 12.0 Object Library

    Microsoft PowerPoint 12.0 Object Library

    Microsoft…………Word文档

    添加之后可能会报错:

    检索COM 类工厂中CLSID 为{91493442-5A91-11CF-8700-00AA0060263B} 的组件失败,原因是出现以下错误: 80070005 拒绝访问

    电脑要进行设置

    1:在服务器上安装office的Excel软件.

    2:在"开始"->"运行"中输入dcomcnfg.exe启动"组件服务" 

     3:依次双击"组件服务"->"计算机"->"我的电脑"->"DCOM配置" 

    4:在"DCOM配置"中找到"Microsoft Excel 应用程序",在它上面点击右键,然后点击"属性",弹出"Microsoft Excel 应用程序属性"对话框

    5:点击"标识"标签,选择"交互式用户" 

    6:点击"安全"标签,在"启动和激活权限"上点击"自定义",然后点击对应的"编辑"按钮,在弹出的"安全性"对话框中填加一个"NETWORK SERVICE"用户(注意要选择本计算机名),并给它赋予"本地启动"和"本地激活"权限. 

    7:依然是"安全"标签,在"访问权限"上点击"自定义",然后点击"编辑",在弹出的"安全性"对话框中也填加一个"NETWORK SERVICE"用户,然后赋予"本地访问权限

    (6步骤,可以点击“高级”--“查找”进行添加用户,还要添加IIS-……用户,权限也要有“远程…”权限;DCOM配置要对MicrosoftPPt,word,Excel……都要进行配置)

    项目引用中会增加:

    Microsoft.Office.Core

    Microsoft.Office.Interop.PowerPoint

    Microsoft.Office.Interop.Excel

    Microsoft.Office.Interop.Graph

    Microsoft.Office.Interop.Word

    所属项目版本号会增加:

     <ItemGroup>
        <COMReference Include="Microsoft.Office.Core">
          <Guid>{2DF8D04C-5BFA-101B-BDE5-00AA0044DE52}</Guid>
          <VersionMajor>2</VersionMajor>
          <VersionMinor>4</VersionMinor>
          <Lcid>0</Lcid>
          <WrapperTool>primary</WrapperTool>
          <Isolated>False</Isolated>
          <EmbedInteropTypes>True</EmbedInteropTypes>
        </COMReference>
        <COMReference Include="Microsoft.Office.Interop.Excel">
          <Guid>{00020813-0000-0000-C000-000000000046}</Guid>
          <VersionMajor>1</VersionMajor>
          <VersionMinor>6</VersionMinor>
          <Lcid>0</Lcid>
          <WrapperTool>primary</WrapperTool>
          <Isolated>False</Isolated>
          <EmbedInteropTypes>True</EmbedInteropTypes>
        </COMReference>
        <COMReference Include="Microsoft.Office.Interop.Graph">
          <Guid>{00020802-0000-0000-C000-000000000046}</Guid>
          <VersionMajor>1</VersionMajor>
          <VersionMinor>6</VersionMinor>
          <Lcid>0</Lcid>
          <WrapperTool>primary</WrapperTool>
          <Isolated>False</Isolated>
          <EmbedInteropTypes>True</EmbedInteropTypes>
        </COMReference>
        <COMReference Include="Microsoft.Office.Interop.PowerPoint">
          <Guid>{91493440-5A91-11CF-8700-00AA0060263B}</Guid>
          <VersionMajor>2</VersionMajor>
          <VersionMinor>9</VersionMinor>
          <Lcid>0</Lcid>
          <WrapperTool>primary</WrapperTool>
          <Isolated>False</Isolated>
          <EmbedInteropTypes>True</EmbedInteropTypes>
        </COMReference>
        <COMReference Include="Microsoft.Office.Interop.Word">
          <Guid>{00020905-0000-0000-C000-000000000046}</Guid>
          <VersionMajor>8</VersionMajor>
          <VersionMinor>4</VersionMinor>
          <Lcid>0</Lcid>
          <WrapperTool>primary</WrapperTool>
          <Isolated>False</Isolated>
          <EmbedInteropTypes>True</EmbedInteropTypes>
        </COMReference>
        <COMReference Include="VBIDE">
          <Guid>{0002E157-0000-0000-C000-000000000046}</Guid>
          <VersionMajor>5</VersionMajor>
          <VersionMinor>3</VersionMinor>
          <Lcid>0</Lcid>
          <WrapperTool>tlbimp</WrapperTool>
          <Isolated>False</Isolated>
          <EmbedInteropTypes>True</EmbedInteropTypes>
        </COMReference>
      </ItemGroup>

     WCF代码

            [OperationContract]
            private void ShowPresentation()
            {
                String strTemplate, strPic, strExcel;

    //静态地址(PPT所需内容,图片,Excel文件,模板)
                strTemplate =   "C:\Program Files\Microsoft Office\Templates\Presentation Designs\Blends.pot";
                strPic = "C:\Program Files\Microsoft Office\Templates\Presentation Designs\QQ.gif";
                strExcel = "C:\Program Files\Microsoft Office\Templates\Presentation Designs\股份公司1950-2013年原油产量变化图.xls";

     //动态地址       

     strExcel = Context.Server.MapPath(Context.Request.ApplicationPath) + "\Temp\" + strExcelName;
                strTemplate = Context.Server.MapPath(Context.Request.ApplicationPath) + "\Temp\Blends.pot";
                strPic = Context.Server.MapPath(Context.Request.ApplicationPath) + "\Temp\QQ.gif";
                //bool bAssistantOn;

                PowerPoint.Application objApp;
                PowerPoint.Presentations objPresSet;
                PowerPoint._Presentation objPres;
                PowerPoint.Slides objSlides;
                PowerPoint._Slide objSlide;
                PowerPoint.TextRange objTextRng;
                PowerPoint.Shapes objShapes;
                PowerPoint.Shape objShape;

    //PPT播放所需
                //PowerPoint.SlideShowWindows objSSWs;
                //PowerPoint.SlideShowTransition objSST;
                //PowerPoint.SlideShowSettings objSSS;
                //PowerPoint.SlideRange objSldRng;
                //Graph.Chart objChart;

                //Create a new presentation based on a template.
                objApp = new PowerPoint.Application();
                objApp.Visible = MsoTriState.msoTrue;
                objPresSet = objApp.Presentations;
                objPres = objPresSet.Open(strTemplate,
                    MsoTriState.msoFalse, MsoTriState.msoTrue, MsoTriState.msoTrue);
                objSlides = objPres.Slides;

                //PPT第一页,添加Text文本框,添加图片

                objSlide = objSlides.Add(1, PowerPoint.PpSlideLayout.ppLayoutTitleOnly);
                objTextRng = objSlide.Shapes[1].TextFrame.TextRange;
                objTextRng.Text = "My Sample Presentation";
                objTextRng.Font.Name = "Comic Sans MS";
                objTextRng.Font.Size = 48;
                objSlide.Shapes.AddPicture(strPic, MsoTriState.msoFalse, MsoTriState.msoTrue,
                    150, 150, 500, 350);

                //PPT第二页,添加Text文本框,添加Excel文件

                objSlide = objSlides.Add(2, PowerPoint.PpSlideLayout.ppLayoutTitleOnly);
                objTextRng = objSlide.Shapes[1].TextFrame.TextRange;
                objTextRng.Text = "My Chart";
                objTextRng.Font.Name = "Comic Sans MS";
                objTextRng.Font.Size = 48;

    //给PPT添加对象
                objSlide.Shapes.AddOLEObject(150, 150, 480, 320, "", strExcel, MsoTriState.msoFalse, "", 0, "", MsoTriState.msoFalse);
                //objChart = (Graph.Chart)objSlide.Shapes.AddOLEObject(150, 150, 480, 320,
                //    "MSGraph.Chart.8", "", MsoTriState.msoFalse, "", 0, "",
                //    MsoTriState.msoFalse).OLEFormat.Object;
                //objChart.ChartType = Graph.XlChartType.xl3DPie;
                //objChart.Legend.Position = Graph.XlLegendPosition.xlLegendPositionBottom;
                //objChart.HasTitle = true;
                //objChart.ChartTitle.Text = "Here it is...";

                //PPT第二页,添加结束语

                //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.
                objSlide = objSlides.Add(3, PowerPoint.PpSlideLayout.ppLayoutBlank);
                objSlide.FollowMasterBackground = MsoTriState.msoFalse;
                objShapes = objSlide.Shapes;
                objShape = objShapes.AddTextEffect(MsoPresetTextEffect.msoTextEffect27,
                  "The End", "Impact", 96, MsoTriState.msoFalse, MsoTriState.msoFalse, 230, 200);

                //PPT自动播放   

                //Modify the slide show transition settings for all 3 slides in
                //the presentation.
                //int[] SlideIdx = new int[3];
                //for (int i = 0; i < 3; i++) SlideIdx[i] = i + 1;
                //objSldRng = objSlides.Range(SlideIdx);
                //objSST = objSldRng.SlideShowTransition;
                //objSST.AdvanceOnTime = MsoTriState.msoTrue;
                //objSST.AdvanceTime = 3;
                //objSST.EntryEffect = PowerPoint.PpEntryEffect.ppEffectBoxOut;

                ////Prevent Office Assistant from displaying alert messages:
                //bAssistantOn = objApp.Assistant.On;
                //objApp.Assistant.On = false;

                ////Run the Slide show from slides 1 thru 3.
                //objSSS = objPres.SlideShowSettings;
                //objSSS.StartingSlide = 1;
                //objSSS.EndingSlide = 3;
                //objSSS.Run();

                ////Wait for the slide show to end.
                //objSSWs = objApp.SlideShowWindows;
                //while (objSSWs.Count >= 1) System.Threading.Thread.Sleep(100);

                ////Reenable Office Assisant, if it was on:
                //if (bAssistantOn)
                //{
                //    objApp.Assistant.On = true;
                //    objApp.Assistant.Visible = false;
                //}

           //PPT自动播放结束

               //保存PPT ,关闭PPT,结束进程

                //Close the presentation without saving changes and quit PowerPoint.

    //PPT保存静态地址

     // objPres.SaveAs("C:\Program Files\Microsoft Office\Templates\Presentation Designs\股份公司1950-2013年原油产量变化

    //图.xls",PowerPoint.PpSaveAsFileType.ppSaveAsDefault, MsoTriState.msoFalse);

    //PPT保存动态地址

                objPres.SaveAs(Context.Server.MapPath(Context.Request.ApplicationPath) + "\Temp\Silverlight图表.ppt", PowerPoint.PpSaveAsFileType.ppSaveAsDefault, MsoTriState.msoFalse);
                objPres.Save();
                objPres.Close();
                objApp.Quit();
            }

  • 相关阅读:
    队列课下作业
    20162305 2017-2018-1 《程序设计与数据结构》第6周学习总结
    20162305 2017-2018-1 《程序设计与数据结构》第5周学习总结
    线性结构 实验报告 20162305
    算法复杂度-实验博客
    2017-2018-1 《程序设计与数据结构》第3周学习总结
    20162305 2017-2018-1 《程序设计与数据结构》第2周学习总结
    20162316刘诚昊 课下排序测试
    20162316刘诚昊 17年10月9日测验“排序课堂测试”
    20162316刘诚昊 第五周学习总结
  • 原文地址:https://www.cnblogs.com/xuxin-1989/p/3865752.html
Copyright © 2011-2022 走看看