Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Последние темы форума

Показать новые сообщения »

Почтовая рассылка

Подписчиков: 11650
Последний выпуск: 19.06.2015

Как программно вставить изображение в Excel?

Автор: Flame
Источник: faqdot.net

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

При помощи раннего связывания, т.е. используя обертки вокруг "внутренностей" Excel. Для этого нам необходимо подключить те же библиотеки, что и для чтения данных из Excel файлов.

using Excel = Microsoft.Office.Interop.Excel;
using Office = Microsoft.Office.Core;
. . .
rg = m_workSheet.get_Range("A" + 1, "A" + 1);
float il, it, iw, ih;

// для приведения размеров изображения к размерам используемым в Shape
float zExcelPixel = 0.746835443f;
Image im = Image.FromFile(filePic);
// rg переменная хранящая ссылку на range относительно
// левого верхнего угла которого надо вставить изображение
// координата левого верхнего угола куда вставлять - находяться из range
il = (float)(double)rg.Left;// размеры поступают в double упакованый в object
it = (float)(double)rg.Top;

// размеры изображения для Shape нужно преобразовывать
iw = zExcelPixel * im.Width;// получаем из ширины исходного изображения
ih = zExcelPixel * im.Height;

// Увеличиваем высоту ячейки 
if (im.Height < 409)
rg.RowHeight = zExcelPixel * im.Height;
else
rg.RowHeight = 409;
                                                        
m_workSheet.Shapes.AddPicture(filePic, Office.MsoTriState.msoFalse, Office.MsoTriState.msoTrue, il, it, iw, ih);
. . .

С помощью позднего связывания

...
// rg переменная хранящая ссылку на range относительно левого верхнего угла которого надо вставить изображение
rg.Activate();//rg.Select();
object ob=worksSheet.GetType().InvokeMember("Pictures", BindingFlags.GetProperty, null, worksSheet, null);
ob.GetType().InvokeMember("Insert", BindingFlags.InvokeMethod, null, ob, new object[]{pathToPicFile});
...

Далее привожу полностью фрагмент кода вставляющий изображение в документ Excel:

void InsertPicToExcel()
{
String filePic = @”d:\test.jpg”;
Excel._Application m_app = null;
 // Книга Excel.
 Excel.Workbook m_workBook = null;
// Страница Excel.
Excel.Worksheet m_workSheet = null;
//Диапазон ячеек
Excel.Range rg = null;

try
  {
      // Создание приложения Excel.
      m_app = new Excel.ApplicationClass();

      // Приложение "невидимо".
      m_app.Visible = false;
      // Приложение управляется пользователем.
      m_app.UserControl = true;

      // Добавление книги Excel.
      // m_workBook = m_app.Workbooks.Add(Excel.XlWBATemplate.xlWBATWorksheet);

      // Открытие файла Excel.
      m_workBook = m_app.Workbooks.Open(@"D:\test.xlsx", Type.Missing, Type.Missing,
               Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing,
               Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);

      // Связь со страницей Excel.
      m_workSheet = m_app.ActiveSheet as Excel.Worksheet;

  #region Вставка картинок

      rg = m_workSheet.get_Range("A" + 1, "A" + 1);

      float il, it, iw, ih;
      float zExcelPixel = 0.746835443f;// для приведения размеров изображения к размерам используемым в Shape

      Image im = Image.FromFile(filePic);
      // rg переменная хранящая ссылку на range относительно левого верхнего угла которого надо вставить изображение
      // координата левого верхнего угола куда вставлять - находяться из range
      il = (float)(double)rg.Left;// размеры поступают в double упакованый в object
      it = (float)(double)rg.Top;

      // размеры изображения для Shape нужно преобразовывать
      iw = zExcelPixel * im.Width;// получаем из ширины исходного изображения
      ih = zExcelPixel * im.Height;

    // Увеличиваем высоту ячейки 
     if (im.Height < 409)
         rg.RowHeight = zExcelPixel * im.Height;
     else
         rg.RowHeight = 409;
                
     m_workSheet.Shapes.AddPicture(filePic, Office.MsoTriState.msoFalse, Office.MsoTriState.msoTrue, il, it, iw, ih);

     #endregion
}
  finally
  {
    // Сохраняем файл с вставленным изображением    
      m_workBook.SaveCopyAs(@"d:\testPic.xlsx");

      // Закрытие книги.
      m_workBook.Close(false, "", null);
      // Закрытие приложения Excel.
      m_app.Quit();
      m_workBook = null;
      m_workSheet = null;
      m_app = null;
      GC.Collect();    
  }
}

По материалам GotDotNet.ru

Оставить комментарий

Комментарий:
можно использовать BB-коды
Максимальная длина комментария - 4000 символов.
 
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог