Minigráficos de Excel no se exporta a PDF al utilizar automatización COM
-
25-09-2019 - |
Pregunta
Estoy teniendo un problema exportar mediante programación hojas de Excel que contienen sparklines a formato PDF.
Cuando la exportación manualmente la hoja de Excel a formato PDF utilizando las instalaciones Exportación de PDF nativo de Excel 2010 entonces todo funciona bien, pero en el momento que lo hago usando sencilla automatización COM entonces todo se exporta a PDF con la excepción de las células que contienen sparklines.
Lo extraño es que cuando agrego un par de barras de datos a la hoja de Excel a continuación, los minigráficos cerca de las barras de datos se exportan repente, pero los más alejados de las barras de datos no lo son.
Me han verificado estos problemas en varios equipos diferentes y sistemas operativos. Esto puede estar relacionado con la siguiente pregunta en Stackoverflow .
Estoy utilizando el siguiente, muy sencillo, código VB.NET. He tratado de jugar con los diferentes ajustes y variables, pero sin suerte.
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
Solución
he estado en contacto con el soporte técnico de Microsoft y han reconocido que es un error. El equipo de producto está mirando para su inclusión en un futuro servicio paquete.
Hasta entonces, haciendo que la aplicación visible antes de llevar a cabo la exportación va a resolver el problema. Si no desea que el usuario vea que a continuación se puede colocar la ventana fuera de la pantalla.