C#

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

Иногда возникает необходимость вставить изображение непосредственно в документ 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();    
  }
}
Теги:
изображение, Excel
Добавлено: 21 Сентября 2013 10:47:04 Добавил: Андрей Ковальчук Нравится 0
Добавить
Комментарии:
Нету комментариев для вывода...