108 lines
3.3 KiB
C#
108 lines
3.3 KiB
C#
using Excel = Microsoft.Office.Interop.Excel;
|
|
using System.ComponentModel;
|
|
|
|
|
|
namespace PutincevLibrary
|
|
{
|
|
public partial class ComponentExcelWithImage : Component
|
|
{
|
|
public ComponentExcelWithImage()
|
|
{
|
|
InitializeComponent();
|
|
}
|
|
|
|
public ComponentExcelWithImage(IContainer container) : this()
|
|
{
|
|
container.Add(this);
|
|
}
|
|
|
|
private void CheckInputValues(string filePath, string tableTitle, string[] imagePaths)
|
|
{
|
|
if (string.IsNullOrEmpty(filePath))
|
|
{
|
|
throw new ArgumentNullException(nameof(filePath));
|
|
}
|
|
if (string.IsNullOrEmpty(tableTitle))
|
|
{
|
|
throw new ArgumentNullException(nameof(tableTitle));
|
|
}
|
|
if (imagePaths == null)
|
|
{
|
|
throw new ArgumentNullException(nameof(imagePaths));
|
|
}
|
|
foreach (string imagePath in imagePaths)
|
|
{
|
|
if (string.IsNullOrEmpty(imagePath))
|
|
{
|
|
throw new ArgumentNullException("Image path is null");
|
|
}
|
|
}
|
|
}
|
|
|
|
public void CreateExcelWithImages(string filePath, string tableTitle, string[] imagePaths)
|
|
{
|
|
CheckInputValues(filePath, tableTitle, imagePaths);
|
|
|
|
Excel.Application excelApp = new Excel.Application();
|
|
Excel.Workbook workbook = excelApp.Workbooks.Add();
|
|
Excel.Worksheet worksheet = workbook.Sheets[1];
|
|
|
|
worksheet.Cells[1, 1] = tableTitle;
|
|
|
|
InsertImagesInSingleCell(worksheet, imagePaths, 2, 1);
|
|
|
|
workbook.SaveAs(filePath);
|
|
workbook.Close();
|
|
excelApp.Quit();
|
|
|
|
ReleaseObject(worksheet);
|
|
ReleaseObject(workbook);
|
|
ReleaseObject(excelApp);
|
|
}
|
|
|
|
private void InsertImagesInSingleCell(Excel.Worksheet worksheet, string[] imagePaths, int rowIndex, int columnIndex)
|
|
{
|
|
Excel.Range cell = worksheet.Cells[rowIndex, columnIndex];
|
|
double currentTopOffset = 0;
|
|
|
|
foreach (string imagePath in imagePaths)
|
|
{
|
|
if (File.Exists(imagePath))
|
|
{
|
|
Excel.Pictures pictures = (Excel.Pictures)worksheet.Pictures(System.Reflection.Missing.Value);
|
|
Excel.Picture picture = pictures.Insert(imagePath);
|
|
|
|
picture.Left = cell.Left;
|
|
picture.Top = cell.Top + currentTopOffset;
|
|
|
|
currentTopOffset += picture.Height;
|
|
}
|
|
else
|
|
{
|
|
throw new FileNotFoundException("Image not found at: " + imagePath);
|
|
}
|
|
}
|
|
}
|
|
|
|
private void ReleaseObject(object obj)
|
|
{
|
|
try
|
|
{
|
|
if (obj != null)
|
|
{
|
|
System.Runtime.InteropServices.Marshal.ReleaseComObject(obj);
|
|
obj = null;
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
obj = null;
|
|
Console.WriteLine("Error releasing object: " + ex.ToString());
|
|
}
|
|
finally
|
|
{
|
|
GC.Collect();
|
|
}
|
|
}
|
|
}
|
|
} |