una tamaño resolucion reducir que power poner para mueva mismo imagenes imagen hoja grafico fijar cuadricula con completa como celda cambiar aumentar ajustar vba excel-vba ms-word word-vba .emf

vba - resolucion - como poner imagenes del mismo tamaño en power point



Reducir el tamaño del archivo para los gráficos pegados desde Excel a Word (3)

He estado creando informes copiando algunos cuadros y datos de un documento de Excel en un documento de Word. Estoy pegando en un control de contenido, así que uso ChartObject.CopyPicture en excel y ContentControl.Range.Paste en word. Esto se hace en un bucle:

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 creación de estos informes con Office 2007 produjo archivos que rondaban los 6 MB, pero al crearlos (con la misma hoja de cálculo y el mismo documento) en Office 2010 se obtiene un archivo que es aproximadamente 10 veces más grande.

Después de descomprimir el docx, encontré que el tamaño adicional proviene de archivos emf que corresponden a gráficos que se pegan usando VBA. Donde van desde 360 ​​a 900 KB antes, son de 5 a 18 MB. Y los gráficos no son visiblemente mejores.

Aún más, parece estar relacionado con el estilo de gráfico. Creé una nueva hoja de cálculo e inserté 7 puntos de datos y un gráfico circular 2D correspondiente. Con el estilo predeterminado, se copió como una emf de 79 KB, y con el estilo 26 se copia como una emf de 10 MB. Cuando estaba usando Office 2007, el gráfico se copiaría como una emf de 700 KB. Este es el código:

Sub CopyAndPaste() ThisWorkbook.Worksheets("Charts").ChartObjects("Chart 1").CopyPicture Appearance:=xlScreen, Format:=xlPicture GetObject(, Class:="Word.Application").ActiveDocument.Range.Paste End Sub

Soy capaz de copiar imágenes con el formato xlBitmap , y aunque es un poco más pequeño, es más grande que la fem generada por Office 2007 y tiene una calidad notablemente inferior. ¿Hay otras opciones para reducir el tamaño del archivo? Idealmente, me gustaría producir un archivo con la misma resolución para los gráficos que hice con Office 2007. ¿Hay alguna forma de que use VBA solamente (sin modificar los gráficos en la hoja de cálculo)? ¿Puedo copiar fácilmente como un objeto sin vincular los documentos?


"Es un código antiguo, señor, pero lo comprueba".

Es una pregunta antigua y tengo una solución aún más antigua (posible): puedes comprimir tus archivos .EMF como .EMZ si los envías. Esto reducirá el tamaño de su archivo manteniendo la calidad de la imagen.

En VB6 usé zlib.dll y el código a continuación. Cambié el nombre de la función a inglés, pero mantuve todos los comentarios en portugués:

Option Explicit '' Declaração das interfaces com a ZLIB Private Declare Function gzopen Lib "zlib.dll" (ByVal file As String, ByVal mode As String) As Long Private Declare Function gzwrite Lib "zlib.dll" (ByVal file As Long, ByRef uncompr As Byte, ByVal uncomprLen As Long) As Long Private Declare Function gzclose Lib "zlib.dll" (ByVal file As Long) As Long Private Declare Function Compress Lib "zlib.dll" Alias "compress" (ByRef dest As Any, ByRef destLen As Any, ByRef src As Any, ByVal srcLen As Long) As Long Private Declare Function Uncompress Lib "zlib.dll" Alias "uncompress" (ByRef dest As Any, ByRef destLen As Any, ByRef src As Any, ByVal srcLen As Long) As Long '' Ler o conteúdo de um arquivo Public Function FileRead(ByVal strNomeArquivo As String) As Byte() Dim intHandle As Integer Dim lngTamanho As Long Dim bytConteudo() As Byte On Error GoTo FileReadError '' Abrir o documento indicado intHandle = FreeFile Open strNomeArquivo For Binary Access Read As intHandle '' Obter o tamanho do arquivo lngTamanho = LOF(intHandle) ReDim bytConteudo(lngTamanho) '' Obter o conteúdo e liberar o arquivo Get intHandle, , bytConteudo() Close intHandle FileRead = bytConteudo On Error GoTo 0 Exit Function FileReadError: objLogger.GravarEvento "modZLib.FileRead: " & Err.Description & " (" & Err.Number & " - " & Err.Source & ")", logTipoEvento.Erro End Function ''Compactar um arquivo com o padrão gzip Public Sub FileCompress(ByVal strArquivoOrigem As String, ByVal strArquivoDestino As String) Dim gzFile As Long Dim bytConteudo() As Byte On Error GoTo FileCompressError '' Ler o conteúdo do arquivo bytConteudo = FileRead(strArquivoOrigem) '' Compactar o conteúdo gzFile = gzopen(strArquivoDestino, "wb") gzwrite gzFile, bytConteudo(0), UBound(bytConteudo) gzclose gzFile On Error GoTo 0 Exit Sub FileCompressError: objLogger.GravarEvento "modZLib.FileCompress:" & Err.Description & " (" & Err.Number & " - " & Err.Source & ")", logTipoEvento.Erro End Sub


Esto posiblemente esté sucediendo porque los archivos .emf se escalan incorrectamente. El uso de PNG puede resolver el problema del tamaño (como se menciona en los comentarios anteriores), pero seguirá siendo un problema porque no serán imágenes vectoriales.

Si usa AddPicture para agregar imágenes a su archivo, entonces la siguiente página muestra una solución en la que puede cambiar la escala y reducir el tamaño del archivo de cualquier valor predeterminado que se esté usando. Por lo que podría resolver su problema.

http://social.msdn.microsoft.com/Forums/en-US/f1c9c753-77fd-4c17-9ca8-02908debca5d/emf-file-added-using-the-addpicture-method-looks-bigger-in-excel-20072010-vs-excel-2003?forum=exceldev


He tratado con algo como esto antes

En lugar de usar

Document.Range.Paste

Intenta usar

Document.Range.PasteSpecial DataType:= wdPasteMetafilePicture

o

Document.Range.PasteSpecial DataType:= wdPasteShape

Esto pegará el gráfico como una imagen o dibujo en lugar de un objeto Excel incrustado

Equivalente a usar "Pegado especial ..." del menú.

Otros tipos de datos están disponibles

http://msdn.microsoft.com/en-us/library/office/aa220339(v=office.11).aspx