Спарклайны Excel не экспортируются в PDF при использовании COM Automation - PullRequest
1 голос
/ 17 ноября 2010

У меня проблема с программным экспортом листов Excel, содержащих спарклайны, в формат PDF.

Когда я вручную экспортирую лист Excel в формат PDF с помощью собственного средства экспорта PDF в Excel 2010, все работает нормально, но в тот момент, когда я делаю это с помощью простой автоматизации COM, все экспортируется в PDF, за исключением ячеек, содержащих спарклайны.

Странная вещь заключается в том, что когда я добавляю несколько панелей данных на лист Excel, спарклайны рядом с панелями данных внезапно экспортируются, а те, которые находятся дальше от панелей данных, - нет.

Я проверил эти проблемы на нескольких разных машинах и в операционных системах. Это может быть связано со следующим вопросом на StackOverflow .

Я использую следующий очень простой код VB.NET. Я пытался поиграть с различными настройками и переменными, но не повезло.

Public Class Form1

    Enum XlFixedFormatType
        xlTypePDF = 0
        xlTypeXPS = 1
    End Enum

    Enum XlUpdateLinks
        xlUpdateLinksUserSetting = 1
        xlUpdateLinksNever = 2
        xlUpdateLinksAlways = 3
    End Enum

    Enum XlFixedFormatQuality
        xlQualityStandard = 0
        xlQualityMinimum = 1
    End Enum

    Private Sub buttonConvert_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles buttonConvert.Click
        Dim pdf As String = Convert("C:\Sparkline.xlsx")
        Process.Start(pdf)
    End Sub

    Public Function Convert(ByVal fileName As String) As String
        Dim outPutFilename As String, printObject As Object = Nothing
        Dim app As Object      '** In reality this is a Microsoft.Office.Interop.Excel.Application
        Dim doc As Object      '** In reality this is a Microsoft.Office.Interop.Excel.Workbook

        app = CreateObject("Excel.Application")

        '** Open the _document
        doc = app.Workbooks.Open(fileName:=fileName, _
                                   UpdateLinks:=XlUpdateLinks.xlUpdateLinksNever, _
                                   ReadOnly:=True, _
                                   AddToMru:=False, _
                                   IgnoreReadOnlyRecommended:=True, _
                                   CorruptLoad:=True, _
                                   Editable:=False)

        '** Set visible sheets depending on selected range
        printObject = app.ActiveWorkbook.ActiveSheet

        '** Write the file under the same name, but with different extension
        outPutFilename = System.IO.Path.ChangeExtension(fileName, "pdf")

        printObject.ExportAsFixedFormat(Type:=XlFixedFormatType.xlTypePDF, _
                                fileName:=outPutFilename, _
                                quality:=XlFixedFormatQuality.xlQualityStandard, _
                                IncludeDocProperties:=False, _
                                IgnorePrintAreas:=False, _
                                OpenAfterPublish:=False)

        doc.Close(False)
        app.Quit()

        '** Return the name of the converted file
        Return outPutFilename

    End Function

End Class

1 Ответ

1 голос
/ 03 декабря 2010

Я связался со службой поддержки Microsoft, и они признали, что это ошибка. Команда разработчиков ищет его для включения в будущий пакет обновления.

До тех пор, пока приложение не станет видимым до выполнения экспорта, это решит проблему. Если вы не хотите, чтобы пользователь видел это, вы можете расположить окно за пределами экрана.

...