web-dev-qa-db-fra.com

Comment exporter un graphique avec un texte alternatif dans Excel vers PDF en utilisant Python ou R?

J'ai environ 500 graphiques générés dans Excel à l'aide de VBA et je dois les exporter au format PDF. Ces graphiques ont un texte alternatif pour les rendre accessibles aux aveugles. Lorsque j'utilise le VBA (ExportAsFixedFormat) pour générer le pdf, le texte alternatif sera manqué dans le pdf. Existe-t-il un code dans python ou R pour convertir le graphique d'Excel en pdf et conserver le texte alternatif?

Si j'enregistre manuellement les graphiques au format pdf, le texte alternatif sera enregistré avec le graphique dans le fichier pdf. Cependant, comme j'ai trop de graphiques, ce serait bien de pouvoir le faire automatiquement.

 ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=PdfFileName, _
        Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=False

Le code ci-dessus dans VBA est utile pour créer un pdf mais ne conserve pas le texte alternatif.

16
Sam S

Le code suivant génère un fichier pdf pour chaque Sheet (à l'exclusion de tout Worksheet) dans ThisWorkbook:

Sub Charts_Export()
Const kPath As String = "D:\@D_Trash\SO Questions\Output\#Name.pdf"    'Update as required
Dim oSht As Object, sPath As String
    With ThisWorkbook
        For Each oSht In .Sheets
            With oSht
                If oSht.Type <> xlWorksheet Then
                    sPath = Replace(kPath, "#Name", .Name)    'Update as required
                    .ExportAsFixedFormat _
                        Type:=xlTypePDF, _
                        Filename:=sPath, _
                        Quality:=xlQualityStandard, _
                        IncludeDocProperties:=True, _
                        IgnorePrintAreas:=False, _
                        OpenAfterPublish:=False
    End If: End With: Next: End With

    End Sub

Une fois les fichiers pdf ouverts, appuyez sur ShiftCtrlY simultanément pour activer le Read Out Loud option en pdf. Puis appuyez ShiftCtrlV simultanément pour lire le AlternativeText.

enter image description here

Le code précédent, qui utilise le même morceau publié par l'OP, exportait les graphiques sous forme de fichiers pdf, y compris le Alternative text dans chaque.

Cela semble indiquer que le problème pourrait être dû à la méthode utilisée pour ajouter le AlternativeText au Chart. Je n'ai pas pu trouver une méthode pour ajouter le AlternativeText à un Chart une fois qu'il a été déplacé en tant que Sheet, donc le AlternativeText doit être ajouté avant déplacer le Chart vers un Sheet, lorsque le Chart est toujours un objet (Shape) dans une feuille de calcul.

Utilisez cette méthode pour ajouter le AlternativeText à chaque Chart avant de le déplacer vers une feuille`.

Private Sub Charts_Add_AlternativeText()
Const kAltTxt As String = "This is a test of the Alt Text in graph [#Name]"    'Update as required
Dim ws As Worksheet
Dim co As ChartObject

    Set ws = ThisWorkbook.Worksheets("DATA")    'Update as required
    For Each co In ws.ChartObjects
        co.ShapeRange.AlternativeText = Replace(kAltTxt, "#Name", co.Name)    'Update as required
    Next

    End Sub

Ou utilisez cette méthode pour ajouter le AlternativeText à chaque Chart feuille.

Private Sub Charts_Add_AlternativeText()
Const kWsName As String = "!Temp"
Const kAltTxt As String = "This is a test of the Alt Text in graph [#Name]"     'Update as required
Dim wb As Workbook, ws As Worksheet
Dim oSht As Object, sp As Shape
Dim sChName As String, bIdx As Byte

    With Application
        .EnableEvents = False
        .DisplayAlerts = False
        .ScreenUpdating = False
        .Application.Calculation = xlCalculationManual
    End With

    Set wb = ThisWorkbook
    With wb

        Rem Add Temp Worksheet
        On Error Resume Next
        .Worksheets(kWsName).Delete
        On Error GoTo 0
        Set ws = .Worksheets.Add(After:=.Sheets(.Sheets.Count))
        ws.Name = kWsName

        Rem Work with Chart Sheets
        For Each oSht In .Sheets
            With oSht
                If oSht.Type <> xlWorksheet Then

                    Rem Move Chart to Temp Worksheet
                    bIdx = .Index
                    sChName = .Name
                    .Location Where:=xlLocationAsObject, Name:=kWsName

                    Set sp = ws.Shapes(1)
                    With sp

                        Rem Add AlternativeText to Shape (Chart)
                        .AlternativeText = Replace(kAltTxt, "#Name", sChName)    'Update as required

                        Rem Move Chart to Chart Sheet
                        .Chart.Location Where:=xlLocationAsNewSheet, Name:=sChName
                        wb.Sheets(sChName).Move Before:=wb.Sheets(bIdx)

    End With: End If: End With: Next: End With

    With Application
        .EnableEvents = True
        .DisplayAlerts = True
        .ScreenUpdating = True
        .Application.Calculation = xlCalculationAutomatic
    End With

End Sub
11
EEM