C# Excel/word导出到PDF格式

时间:2022-10-21 15:14:29
   // Create COM Objects
        Microsoft.Office.Interop.PowerPoint.Application pptApplication = null;
        Microsoft.Office.Interop.PowerPoint.Presentation pptPresentation = null;
        try
        {
            object unknownType = Type.Missing;

            //start power point
            pptApplication = new Microsoft.Office.Interop.PowerPoint.Application();

            //open powerpoint document
            pptPresentation = pptApplication.Presentations.Open(originalPptPath,
                Microsoft.Office.Core.MsoTriState.msoTrue, Microsoft.Office.Core.MsoTriState.msoTrue,
                Microsoft.Office.Core.MsoTriState.msoFalse);

            pptApplication.ShowStartupDialog = false;

            pptPresentation.SaveAs(
                Server.MapPath("11.pdf"),

      Microsoft.Office.Interop.PowerPoint.PpSaveAsFileType.ppSaveAsPDF,

      Microsoft.Office.Core.MsoTriState.msoCTrue);

            /*
            // save PowerPoint as PDF
            pptPresentation.ExportAsFixedFormat(pdfPath,
                Microsoft.Office.Interop.PowerPoint.PpFixedFormatType.ppFixedFormatTypePDF,
                Microsoft.Office.Interop.PowerPoint.PpFixedFormatIntent.ppFixedFormatIntentPrint,
                MsoTriState.msoFalse, Microsoft.Office.Interop.PowerPoint.PpPrintHandoutOrder.ppPrintHandoutVerticalFirst,
                Microsoft.Office.Interop.PowerPoint.PpPrintOutputType.ppPrintOutputSlides, MsoTriState.msoFalse, null,
                Microsoft.Office.Interop.PowerPoint.PpPrintRangeType.ppPrintAll, string.Empty, true, true, true,
                true, false, unknownType);
            */
        }
        finally
        {
            // Close and release the Document object.
            if (pptPresentation != null)
            {
                pptPresentation.Close();
                pptPresentation = null;
            }

            // Quit PowerPoint and release the ApplicationClass object.
            if (pptApplication != null)
            {
                pptApplication.Quit();
                pptApplication = null;
            }

 

首先引用Microsoft.Office.Interop.Word; 和 Microsoft.Office.Interop.Excel 引用


public bool ExportWorkbookToPdf(string workbookPath, string outputPath) { // If either required string is null or empty, stop and bail out if (string.IsNullOrEmpty(workbookPath) || string.IsNullOrEmpty(outputPath)) { return false; } // Create COM Objects Microsoft.Office.Interop.Excel.Application excelApplication; Microsoft.Office.Interop.Excel.Workbook excelWorkbook; // Create new instance of Excel excelApplication = new Microsoft.Office.Interop.Excel.Application(); // Make the process invisible to the user excelApplication.ScreenUpdating = false; // Make the process silent excelApplication.DisplayAlerts = false; // Open the workbook that you wish to export to PDF excelWorkbook = excelApplication.Workbooks.Open(workbookPath); // If the workbook failed to open, stop, clean up, and bail out if (excelWorkbook == null) { excelApplication.Quit(); excelApplication = null; excelWorkbook = null; return false; } var exportSuccessful = true; try { // Call Excel's native export function (valid in Office 2007 and Office 2010, AFAIK) excelWorkbook.ExportAsFixedFormat(Microsoft.Office.Interop.Excel.XlFixedFormatType.xlTypePDF, outputPath); } catch (System.Exception ex) { // Mark the export as failed for the return value... exportSuccessful = false; // Do something with any exceptions here, if you wish... // MessageBox.Show... } finally { // Close the workbook, quit the Excel, and clean up regardless of the results... excelWorkbook.Close(); excelApplication.Quit(); excelApplication = null; excelWorkbook = null; } // You can use the following method to automatically open the PDF after export if you wish // Make sure that the file actually exists first... if (System.IO.File.Exists(outputPath)) { System.Diagnostics.Process.Start(outputPath); } return exportSuccessful; }

 下面是word导出pdf

    Microsoft.Office.Interop.Word.Application word;


        word = new Microsoft.Office.Interop.Word.Application();

        word.ScreenUpdating = false;

    
  
       
            word= new Microsoft.Office.Interop.Word.Application();
            wordDocument = word.Documents.Open(Server.MapPath("a.docx"));

            wordDocument.ExportAsFixedFormat(Server.MapPath("a.pdf"), WdExportFormat.wdExportFormatPDF);
             
            word.Quit();

 下面是Powerpoint

 

 

Microsoft Office Excel 不能访问文件“D:\WWWRoot\KOBELCOSH\WebUI\ExcelTemplate\QUOTE5.xls”。 可能的原因有: 1 文件名称或路径不存在。 2 文件正被其他程序使用。 3 您正要保存的工作簿与当前打开的工作簿同名。 说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 异常详细信息: System.Runtime.InteropServices.COMException: Microsoft Office Excel 不能访问文件“D:\WWWRoot\KOBELCOSH\WebUI\ExcelTemplate\QUOTE5.xls”。 可能的原因有: 1 文件名称或路径不存在。 2 文件正被其他程序使用。 3 您正要保存的工作簿与当前打开的工作簿同名。 源错误: 执行当前 Web 请求期间生成了未处理的异常。可以使用下面的异常堆栈跟踪信息确定有关异常原因和发生位置的信息。  堆栈跟踪:

[COMException (0x800a03ec): Microsoft Office Excel 不能访问文件“D:\WWWRoot\KOBELCOSH\WebUI\ExcelTemplate\QUOTE5.xls”。 可能的原因有: ? 文件名称或路径不存在。 ? 文件正被其他程序使用。 ? 您正要保存的工作簿与当前打开的工作簿同名。]    Microsoft.Office.Interop.Excel.Workbooks.Add(Object Template) +0    KOBELCO.WebUI.Quote5.OutputExcel(String lblMachineModel, String lbPhone, String lblFax, String lblCustomerNameCn, String lblAgentNameA, String lblAgentPhoneA, String lblUseModel, String lblComment) in D:\Mingyou\KOBELCOSH\Kobelco\WebUI\Quote5.aspx.cs:38    KOBELCO.WebUI.Quote5.gvResult_SelectedIndexChanging(Object sender, GridViewSelectEventArgs e) in D:\Mingyou\KOBELCOSH\Kobelco\WebUI\Quote5.aspx.cs:180    System.Web.UI.WebControls.GridView.OnSelectedIndexChanging(GridViewSelectEventArgs e) +108    System.Web.UI.WebControls.GridView.HandleSelect(Int32 rowIndex) +43    System.Web.UI.WebControls.GridView.HandleEvent(EventArgs e, Boolean causesValidation, String validationGroup) +197    System.Web.UI.WebControls.GridView.OnBubbleEvent(Object source, EventArgs e) +95    System.Web.UI.Control.RaiseBubbleEvent(Object source, EventArgs args) +37    System.Web.UI.WebControls.GridViewRow.OnBubbleEvent(Object source, EventArgs e) +123    System.Web.UI.Control.RaiseBubbleEvent(Object source, EventArgs args) +37    System.Web.UI.WebControls.LinkButton.OnCommand(CommandEventArgs e) +118    System.Web.UI.WebControls.LinkButton.RaisePostBackEvent(String eventArgument) +135    System.Web.UI.WebControls.LinkButton.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) +10    System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +13    System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +175    System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +1565     解决办法: 1.  1).通过webconfig中增加模拟,加入管理员权限,  <identity impersonate="true" userName="系统管理员" password="系统管理员密码"/>  2).这样就能够启动Application进程,操作EXCEL了,能够新建EXCEL,导出EXCEL,但是还是不能打开服务器端的EXCEL文件

2.        在组件服务,DOCM设置 Microsoft Excel Application的属性,      因为是在64位系统上面操作,组件服务中DOCOM中默认是没有的,因为Microsoft Excel Application是32的DCOM配置,所以通过如下方式解决(参考第三步)

3.    1).开始--〉运行--〉cmd    2)命令提示符下面,输入mmc -32,打开32的控制台    3).文件菜单中,添加删除管理单元--〉组件服务    4).在"DCOM配置"中找到"Microsoft Excel 应用程序",在它上面点击右键,然后点击"属性",弹出"Microsoft Excel 应用程序属性"对话框  5).点击"标识"标签,选择"交互式用户"  6).点击"安全"标签,在"启动和激活权限"上点击"自定义",然后点击对应的"编辑"按钮,在弹出的"安全性"对话框中填加一个"NETWORK SERVICE"用户(注意要选择本计算机名),并给它赋予"本地启动"和"本地激活"权限    7).依然是"安全"标签,在"访问权限"上点击"自定义",然后点击"编辑",在弹出的"安全性"对话框中也填加一个"NETWORK SERVICE"用户,然后赋予"本地访问"权限. 4.重新启动IIS,测试通过

如果是iis7+win2008 R2 则在组件服务中的 EXCEL Application 修改以上属性即可。 --------------------- 作者:smeyou 来源:CSDN 原文:https://blog.csdn.net/smeyou/article/details/7754392 版权声明:本文为博主原创文章,转载请附上博文链接!