#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);
У меня есть пара вопросов, если можно.
- Как я могу получить доступ к картинке после ее добавления — например, чтобы нарисовать на ней рамку.
-
Выполнение вышеуказанного для моего приложения означает, что я также должен распространять файл изображения, поэтому я подумал, что я бы поместил его в ресурсы приложения. Как мне добавить изображение из ресурсов в файл 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;