Excel Sparklines não exportados para PDF ao usar a automação COM
-
25-09-2019 - |
Pergunta
Estou tendo um problema em exportar programaticamente folhas do Excel que contêm linhas de faíscas para o formato PDF.
Quando exporto manualmente a planilha do Excel para o formato PDF usando o recurso de exportação de PDF nativo do Excel 2010, tudo funciona bem, mas no momento em que faço isso usando a simples automação COM, tudo é exportado para PDF, com exceção das células que contêm linhas de faísca.
O estranho é que, quando adiciono algumas barras de dados à planilha do Excel, as linhas de faíscas próximas às barras de dados são repentinamente exportadas, mas as mais distantes das barras de dados não estão.
Verifiquei esses problemas em várias máquinas e sistemas operacionais diferentes. Isso pode estar relacionado à seguinte pergunta sobre Stackoverflow.
Estou usando o seguinte, muito direto, o código vb.net. Eu tentei brincar com as várias configurações e variáveis, mas sem sorte.
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
Solução
Estive em contato com o suporte da Microsoft e eles reconheceram que é um bug. A equipe de produtos está olhando para a inclusão em um futuro pacote de serviços.
Até então, tornar o aplicativo visível antes de realizar a exportação resolverá o problema. Se você não deseja que o usuário o veja, poderá posicionar a tela da janela.