Excel导出为固定格式PDF。

8

我可以在c#中成功地将Excel文件导出为PDF文件。

private static void ExportWorkbookToPDF(string workbook, string output)
{
    if (string.IsNullOrEmpty(workbook) || string.IsNullOrEmpty(output))
    {
        throw new NullReferenceException("Cannot create PDF copy " +
            "from empty workbook.");
    }

    Application excelApplication = new Application();
    excelApplication.ScreenUpdating = false;
    excelApplication.DisplayAlerts = false;
    excelApplication.Visible = false;

    Workbook excelWorkbook = excelApplication.Workbooks.Open(
        Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) + 
        "\\" + workbook);

    if (excelWorkbook == null)
    {
        excelApplication.Quit();
        excelApplication = null;
        excelWorkbook = null;

        throw new NullReferenceException("Cannot create new excel workbook.");
    }

    try
    {
        excelWorkbook.ExportAsFixedFormat(XlFixedFormatType.xlTypePDF, 
            Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) + 
            "\\" + output);
    }
    catch (Exception e)
    {
        Console.WriteLine(e.Message);
        Console.ReadLine();
    }
    finally
    {
        excelWorkbook.Close();
        excelApplication.Quit();
        excelApplication = null;
        excelWorkbook = null;
    }
}

我需要访问哪个参数或对象才能将Excel文件保存为页面宽度而不是页面高度?


页面宽度和高度是打印机的属性。生成PDF时不需要处理这些属性,用户在打印PDF时选择它们。通常选择横向模式。试图提前处理会导致严重的颈部疼痛。 - Hans Passant
PDF文档的页面宽度和高度,不需要使用打印机。 - bl4kh4k
3个回答

17

我已经找到了强制以横向视图导出PDF工作簿的属性。

try 
{ 
    ((Microsoft.Office.Interop.Excel._Worksheet)  
    excelWorkbook.ActiveSheet).PageSetup.Orientation =  
    Microsoft.Office.Interop.Excel.XlPageOrientation.xlLandscape;

    excelWorkbook.ExportAsFixedFormat(XlFixedFormatType.xlTypePDF,  
    Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) + 
        "\\" + output); 
} 

@bl4kh4k 我应该感谢您。我从未想过这样做,解决了我的一个烦人问题。 - Steve
如果您有多个工作表,请使用属性excelWorkbook.Sheets来访问它们。使用循环,在强制转换之前检查其类型是否为“Chart”或“Worksheet”,然后按项目更改方向。 - zeta
我不知道。我建议发布一个相关问题。 - Steve

4

不需要安装服务包。只需安装插件即可。如果未安装插件,Excel非常智能,会抛出“无效参数”异常! - Elmue

1
请尝试这个:

请尝试这个:

object misValue = System.Reflection.Missing.Value;
string paramExportFilePath = @"C:\Test2.pdf";
Excel.XlFixedFormatType paramExportFormat = Excel.XlFixedFormatType.xlTypePDF;
Excel.XlFixedFormatQuality paramExportQuality = Excel.XlFixedFormatQuality.xlQualityStandard;
bool paramOpenAfterPublish = false;
bool paramIncludeDocProps = true;
bool paramIgnorePrintAreas = true;
if (xlWorkBook != null)//save as pdf
    xlWorkBook.ExportAsFixedFormat(paramExportFormat, paramExportFilePath, paramExportQuality,     paramIncludeDocProps, paramIgnorePrintAreas, 1, 1, paramOpenAfterPublish, misValue);

参数 paramIgnorePrintAreas=true 可以调整页面大小。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接