Ho creato report copiando alcuni grafici e dati da un documento Excel in un documento Word. Sto incollando in un controllo dei contenuti, quindi uso ChartObject.CopyPicture
in excel e ContentControl.Range.Paste
nella parola. Questo viene fatto in un ciclo:Ridurre le dimensioni del file per i grafici incollati da Excel in Word
Set ws = ThisWorkbook.Worksheets("Charts")
With ws
For Each cc In wordDocument.ContentControls
If cc.Range.InlineShapes.Count > 0 Then
scaleHeight = cc.Range.InlineShapes(1).scaleHeight
scaleWidth = cc.Range.InlineShapes(1).scaleWidth
cc.Range.InlineShapes(1).Delete
.ChartObjects(cc.Tag).CopyPicture Appearance:=xlScreen, Format:=xlPicture
cc.Range.Paste
cc.Range.InlineShapes(1).scaleHeight = scaleHeight
cc.Range.InlineShapes(1).scaleWidth = scaleWidth
ElseIf ...
Next cc
End With
La creazione di questi report utilizzando Office 2007 i file che erano intorno 6MB prodotto, ma la creazione di loro (utilizzando lo stesso foglio di lavoro e documento) in Office 2010 produce un file che è circa 10 volte più grande.
Dopo aver decompresso il documento, ho scoperto che la dimensione extra deriva dai file emf che corrispondono ai grafici incollati in VBA. Dove vanno da 360 a 900 KB prima, sono 5-18 MB. E la grafica non è visibilmente migliore.
Inoltre, sembra essere correlato allo stile grafico. Ho creato un nuovo foglio di calcolo e inserito 7 punti dati e un grafico a torta 2D corrispondente. Con lo stile predefinito, viene copiato come un emf da 79 KB e con lo stile 26 viene copiato come un emf da 10 MB. Quando utilizzavo Office 2007, il grafico veniva copiato come un emf da 700 KB. Questo è il codice:
Sub CopyAndPaste()
ThisWorkbook.Worksheets("Charts").ChartObjects("Chart 1").CopyPicture Appearance:=xlScreen, Format:=xlPicture
GetObject(, Class:="Word.Application").ActiveDocument.Range.Paste
End Sub
sono in grado di CopyPicture con il formato xlBitmap
, e mentre questo è un po 'più piccolo, è più grande della forza elettromotrice generata da Office 2007 e di qualità notevolmente più povera. Ci sono altre opzioni per ridurre le dimensioni del file? Idealmente, mi piacerebbe produrre un file con la stessa risoluzione per i grafici, come ho fatto con Office 2007. Esiste un modo che usa solo VBA (senza modificare i grafici nel foglio di calcolo)? Qualunque modo posso facilmente copiare come oggetto senza collegare i documenti?
ci sono stati alcuni cambiamenti grafici in Excel 2010: [vedi questo blog] (http : //blogs.office.com/2009/08/25/more-charting-enhancements-in-excel-2010/), anche se nessuno si distingue come una o causa invidiosa. Stai usando 'Copiatura aspetto: = xlPrinter' perché questo dà file più grandi di' xlScreen'? Altrimenti, puoi dare un po 'più di dettaglio sui grafici (che tipo, che tipo di formattazione, quanti punti di dati)? – aucuparia
Come esportare il grafico in un formato più efficiente (qualcosa come 'ActiveChart.Export" C: \ My Charts \ SpecialChart.png "') e quindi importare il file .png in Word? Dovrebbe essere una dimensione del file gestibile. –
Potresti aggiungere il codice attuale che stai utilizzando? Includete collegamenti ai dati quando incollate? – Adach1979