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.
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 Shift + Ctrl + Y simultanément pour activer le Read Out Loud
option en pdf. Puis appuyez Shift + Ctrl + V simultanément pour lire le AlternativeText
.
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