Страницы: 1
RSS
Картинка из Excel сохраняется пустой
 
Есть файл Excel размером под 500Мб с вставленными картинками. Выгружаю макросом картинки в файл и после примерно 2500 картинок файлы начинают сохраняться без изображения. Т.е. размер картинки в пикселях обозначен, а изображения в этих границах нет - залито белым. Если порезать файл на куски и загружать их поочередно (выходя после каждого файла из программы), то все файлы сохраняются как нужно - с изображениями. Что нужно учесть при сохранении картинок из большого файла? Может буфер какой переполняется или что-то подобное?  
По объектам (картинки в файле) прохожусь в цикле и сохраняю их следующим кодом:    
oObj.Select  
oObj.Copy  
 With ActiveSheet.ChartObjects.Add(0, 0, oObj.Width, oObj.Height).Chart  
     .Paste  
     .Export Filename:=fName, FilterName:="JPG"  
 End With  
 
Файл не прилагаю ввиду его огромности:)
 
Файл Excel размером под 500Мб - это уже не комильфо.  
Попробуйте хотя бы удалять картинку после экспорта, чтобы они не накапливались:  
 
'oObj.Select 'не нужно  
oObj.Copy  
With ActiveSheet.ChartObjects.Add(0, 0, oObj.Width, oObj.Height).Chart  
.Paste  
.Export Filename:=fName, FilterName:="JPG"  
.parent.delete  
End With  
 
Не проверял, убегаю!
 
Ваше предложение должно сработать. Но, к сожалению, не нашел способа отказаться от oObj.Select, так как к Selection применяю пропоциональное изменение размера картинки перед сохранением в файл.  
 
oObj.Select  
Selection.ShapeRange.LockAspectRatio = msoTrue  
Selection.ShapeRange.Height = 299#  
 
Пробовал заменить Selection на указание полного пути к объекту на листе SH, но это почему то не работает.  
   ' sh.ChartObjects.ShapeRange.LockAspectRatio = msoTrue  
   ' sh.ChartObjects.ShapeRange.Height = 299#  
 
А при использовании Selection предложенная вами строка parent.delete на это выделение не действует (хотя, если выделение не использовать, то идея работает - копируемый объект удаляется).  
 
Подскажите, как записать код, чтобы применить изменение размера к картинке, которую буду сохранять в файл, и созданную копию потом удалить.
 
> Но, к сожалению, не нашел способа отказаться от oObj.Select, так как к Selection применяю пропоциональное изменение размера картинки перед сохранением в файл  
 
Применяйте прямо к oObj :)  
 
Sub bb()  
Dim oObj As Shape, n&  
For Each oObj In ActiveSheet.Shapes  
   oObj.LockAspectRatio = msoTrue  
   oObj.Height = 299#  
   oObj.Copy  
   With ActiveSheet.ChartObjects.Add(0, 0, oObj.Width, oObj.Height).Chart  
       .Paste  
       .Export Filename:="c:\temp\" & n & ".jpg", FilterName:="JPG"  
       n = n + 1  
       .Parent.Delete  
   End With  
Next  
End Sub
Страницы: 1
Читают тему
Наверх