Excel Sparklines pas exporté au format PDF lors de l'utilisation d'automatisation COM
-
25-09-2019 - |
Question
J'ai un problème d'exportation programme feuilles Excel qui contiennent sparklines au format PDF.
Quand exporter manuellement la feuille Excel au format PDF en utilisant l'installation Exportation PDF natif Excel 2010 alors tout fonctionne très bien, mais dès que je le fais en utilisant l'automatisation COM simple, alors tout est exporté au format PDF à l'exception des cellules contenant sparklines.
La chose étrange est que quand j'ajoute quelques barres de données sur la feuille Excel puis les sparklines à proximité des barres de données sont soudainement exportées, mais les plus éloignés des barres de données ne sont pas.
J'ai vérifié ces problèmes sur plusieurs machines différentes et systèmes d'exploitation. Cela peut être lié à la question suivante sur StackOverflow .
J'utilise ce qui suit, très simple, le code VB.NET. Je l'ai essayé de jouer avec les différents paramètres et variables, mais pas de chance.
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
La solution
Je suis en contact avec le support technique Microsoft et ils ont reconnu qu'il est un bug. L'équipe produit examine pour l'inclusion dans un futur service pack.
Jusque-là, ce qui rend l'application visible avant de procéder à l'exportation va résoudre le problème. Si vous ne voulez pas l'utilisateur de voir alors vous pouvez placer la fenêtre de l'écran.