Excel Sparklines non esportati in PDF quando si utilizza l'automazione COM
-
25-09-2019 - |
Domanda
Sto avendo un problema di programmazione esportare fogli Excel che contengono sparkline in formato PDF.
Quando ho esportare manualmente il foglio di Excel in formato PDF utilizzando nativo impianto esportazione PDF Excel 2010 quindi tutto funziona bene, ma il momento lo faccio utilizzando semplici automazione COM poi tutto viene esportato in formato PDF con l'eccezione di cellule contenenti sparkline.
La cosa strana è che quando aggiungo un paio di bar di dati al foglio di excel poi i sparkline vicino le barre dei dati vengono esportati all'improvviso, ma quelli più lontani dai bar di dati non sono.
Ho verificato questi problemi su più macchine diverse e sistemi operativi. Questo può essere correlato alla seguente domanda sulla StackOverflow .
Sto usando il seguente, molto semplice, il codice VB.NET. Ho provato a giocare con le varie impostazioni e le variabili, ma senza fortuna.
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
Soluzione
Sono stato in contatto con il supporto tecnico Microsoft e hanno riconosciuto che è un bug. Il team di prodotto sta guardando per l'inclusione in un futuro servizio pacchetto.
Fino ad allora, rendere visibile l'applicazione prima di effettuare l'esportazione risolverà il problema. Se non si desidera che l'utente vede quindi è possibile posizionare la finestra fuori dallo schermo.