Можно ли вставить изображение в ячейку Excel через COM? - PullRequest
1 голос
/ 06 февраля 2009

Я использовал автоматизацию для вставки значений в ячейку, однако я никогда не видел никакой документации, например, которая демонстрирует вставку чего-либо кроме текста и / или формул.

Кто-нибудь смог вставить изображение из внешнего приложения?

Ответы [ 3 ]

2 голосов
/ 27 марта 2009

Я вижу, что на него уже ответили, но смотрите мой пост здесь .

По сути, вместо использования метода Worksheet.Pictures.Insert (который MSDN рекомендует не использовать напрямую и который возвращает необработанный COM-объект), вместо этого попробуйте метод Worksheet.Shapes.AddPicture.

Dim range As Microsoft.Office.Interop.Excel.Range
Dim pic as Microsoft.Office.Interop.Excel.Shape
Dim filePath as String

range = ...
filePath = ...
pic = range.Worksheet.Shapes.AddPicture(filePath, Microsoft.Office.Core.MsoTriState.msoFalse, Microsoft.Office.Core.MsoTriState.msoCTrue, range.Left, range.Top, 300, 300)

Это не так просто, потому что вы должны указать точное положение и размеры, но в остальном довольно круто!

2 голосов
/ 06 февраля 2009
Dim FileName as string
FileName="c:\text.jpg"
Set NewPic = ActiveSheet.Pictures.Insert(FileName)
NewPic.top=100
NewPic.left=100

Если вы хотите поместить изображение в определенную ячейку, выберите эту ячейку в качестве диапазона и используйте диапазон сверху / слева / с для позиционирования изображения.

Образцы: http://exceltip.com/st/Insert_pictures_using_VBA_in_Microsoft_Excel/486.html

Примечание : в ячейках Excel не может быть изображений. Картинки живут на невидимом слое рисования, который плавает вокруг клеток. Их можно расположить на основе координат ячейки, что позволяет им чувствовать, что они живут "в" ячейках.

1 голос
/ 06 февраля 2009

Конечно, следующий код дает хороший пример использования библиотек Microsoft Interop:

   string excelfilename = @"C:\excelfile.xlsx";
   string picturename = @"C:\image.jpg";

    object missing = Type.Missing;
    Microsoft.Office.Interop.Excel.Application app = new ApplicationClass();
    Workbook book =  app.Workbooks.Add(missing);
    Worksheet sheet = (Worksheet)book.ActiveSheet;
    Pictures pics = (Pictures)sheet.Pictures(missing);
    pics.Insert(picturename, missing);
    book.SaveAs(excelfilename, missing, missing, missing, missing, missing, XlSaveAsAccessMode.xlNoChange,
        missing, missing, missing, missing, missing);
    app.Quit();
    app = null;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...