How to extract and save images from an Excel worksheet?

You can extract all images from the worksheet using XlsIO. The following code example demonstrates how to retrieve images from a worksheet and save them to a specified directory.

// Define the directory name
string directoryName = "directory_name";
using (ExcelEngine excelEngine = new ExcelEngine())
{
    IApplication application = excelEngine.Excel;
    application.DefaultVersion = ExcelVersion.Xlsx;
    IWorkbook workbook = application.Workbooks.Open("../../Data/InputTemplate.xlsx");
    IWorksheet worksheet = workbook.Worksheets[0];

    // Get the count of pictures in the worksheet
    int count = worksheet.Pictures.Count;
    IPictureShape[] picture = new IPictureShape[count];

    // Loop through all pictures in the worksheet
    for (int i = 0; i < count; i++)
    {
        // Get the picture
        picture[i] = worksheet.Pictures[i];
        Image image = picture[i].Picture;
        string name = picture[i].Name + ".jpg";
        string imagefile = Path.Combine(directoryName, name);

        // Save the image to a file
        FileStream stream = new FileStream(imagefile, FileMode.Create, FileAccess.Write);
        image.Save(stream, image.RawFormat);

        //Dispose stream
        stream.Dispose();
    }
}
' Define the directory name
Dim directoryName As String = "directory_name"
Using excelEngine As New ExcelEngine()
    Dim application As IApplication = excelEngine.Excel
    application.DefaultVersion = ExcelVersion.Xlsx
    Dim workbook As IWorkbook = application.Workbooks.Open("../../Data/InputTemplate.xlsx")
    Dim worksheet As IWorksheet = workbook.Worksheets(0)

    ' Get the count of pictures in the worksheet
    Dim count As Integer = worksheet.Pictures.Count
    Dim picture(count - 1) As IPictureShape

    ' Loop through all pictures in the worksheet
    For i As Integer = 0 To count - 1
        ' Get the picture
        picture(i) = worksheet.Pictures(i)
        Dim image As Image = picture(i).Picture
        Dim name As String = picture(i).Name & ".jpg"
        Dim imageFile As String = Path.Combine(directoryName, name)

        ' Save the image to a file
        Using stream As New FileStream(imageFile, FileMode.Create, FileAccess.Write)
            image.Save(stream, image.RawFormat)
        End Using
    Next
End Using