c # добавить картинку в Excel из ресурсов

#c# #excel #resources #interop

#c# #excel #Ресурсы #взаимодействие

Вопрос:

В настоящее время я делаю следующее, чтобы добавить изображение в файл Excel, который я создаю с помощью «interop»

 private Excel.Workbook _xlWorkBook;
_xlWorkSheet.Shapes.AddPicture(appPath   @"ImageFile.png", Microsoft.Office.Core.MsoTriState.msoFalse, Microsoft.Office.Core.MsoTriState.msoCTrue, 5, 5, 60, 60);
  

У меня есть пара вопросов, если можно.

  1. Как я могу получить доступ к картинке после ее добавления — например, чтобы нарисовать на ней рамку.
  2. Выполнение вышеуказанного для моего приложения означает, что я также должен распространять файл изображения, поэтому я подумал, что я бы поместил его в ресурсы приложения. Как мне добавить изображение из ресурсов в файл Excel? Опять же, после добавления, как мне получить к нему доступ, чтобы добавить границу и т.д.?

    _xlрабочий лист.Формы.Добавить картинку (Свойства.Ресурсы.ImageFile); //не работает

Большое спасибо

Ответ №1:

1.) Я полагаю, что вы можете получить доступ к картинке, используя

 // after adding the picture
Picture pic = (Picture) ActiveSheet.Pictures(ActiveSheet.Pictures.Count - 1);
pic.Border.LineStyle = XlLineStyle.xlContinuous;
pic.Border.Weight = XlBorderWeight.xlMedium;
  

Или

 // add the picture using Pictures.Insert
// this should return a Picture cast-able object
Picture pic = (Picture) ActiveSheet.Pictures.Insert(FileName);
// etc...
  

2.) Самым простым способом было бы извлечь файл из ресурсов, записать его во временный файл, добавить его в Excel, а затем удалить временный файл.

Этот код в значительной степени непроверен. Взаимодействие с Excel — это головная боль.

Комментарии:

1. спасибо за ответ, высоко ценится. Что касается # 2 — я не работал с ресурсами таким образом — не могли бы вы показать мне код, необходимый для достижения # 2. Большое спасибо

2. неважно — я изучил это немного подробнее. еще раз спасибо за вышесказанное.

Ответ №2:

Извините или археология.

Что касается второго вопроса о добавлении картинки из источника, возможно, я нашел решение с использованием буфера обмена:

 System.Drawing.Bitmap pic = Properties.Resources.my_ressource;
System.Windows.Forms.Clipboard.SetImage(pic);
Range position = (Range)myWorksheet.Cells[Y, X];
myWorksheet.Paste(position); //copy the clipboard to the given position
  

Комментарии:

1. Спасибо, Николас. Этот код работает, но, к сожалению, он удаляет альфа-канал, если в изображении есть какая-либо прозрачность (в этом случае я тестировал с PNG). У вас есть какая-нибудь идея, как заставить это работать? Заранее спасибо!

2. Прозрачность не будет сохранена в буфере обмена

Ответ №3:

RE: 2. Я сделал это:

 S = Shapes.AddPicture(filename,MsoTriState.msoFalse,MsoTriState.msoTrue,0,0,50,50);
S.Name = "Picture";
S.Placement = XlPlacement.xlMoveAndSize;