private void CopyImageFileToDestination(string destFileName, string fullSpreadsheetPath, XmlElement imgElement = null)
 {
     try
     {
         if (_pathToBookFolder != null && _pathToSpreadsheetFolder != null)
         {
             var dest = Path.Combine(_pathToBookFolder, destFileName);
             if (RobustFile.Exists(fullSpreadsheetPath))
             {
                 RobustFile.Copy(fullSpreadsheetPath, dest, true);
                 if (imgElement != null)
                 {
                     ImageUpdater.UpdateImgMetadataAttributesToMatchImage(_pathToBookFolder, imgElement,
                                                                          new NullProgress());
                 }
             }
             else
             {
                 // Review: I doubt these messages are worth localizing? The sort of people who attempt
                 // spreadsheet import can likely cope with some English?
                 // +1 conversion from zero-based to 1-based counting, further adding header.RowCount
                 // makes it match up with the actual row label in the spreadsheet.
                 Warn(
                     $"Image \"{fullSpreadsheetPath}\" on row {_currentRowIndex + 1 + _sheet.Header.RowCount} was not found.");
             }
         }
     }
     catch (Exception e) when(e is IOException || e is SecurityException ||
                              e is UnauthorizedAccessException)
     {
         Warn(
             $"Bloom had trouble copying the file {fullSpreadsheetPath} to the book folder or retrieving its metadata: " +
             e.Message);
     }
 }