Установите ширину и высоту изображения при вставке через рабочий лист.insert_image

В документах функция insert_image имеет следующие параметры:

 { 'x_offset': 0, 'y_offset': 0, 'x_scale': 1, 'y_scale': 1, 'url': None, 'tip': None, 'image_data': None, 'positioning': None, } 

Проблема в том, что размер входных изображений, которые мне нужно вставить, может варьироваться, но ячейка, в которой они должны быть, имеет фиксированный размер. Возможно ли каким-либо образом обеспечить ширину и высоту и позволить Excel изменить размер изображения в предоставленные размеры?

Вы можете масштабировать изображение извне или в Excel с помощью XlsxWriter и x_scale и y_scale на основе высот и ширины ячейки (ов) и изображения.

Например:

 import xlsxwriter workbook = xlsxwriter.Workbook('image_scaled.xlsx') worksheet = workbook.add_worksheet() image_width = 140.0 image_height = 182.0 cell_width = 64.0 cell_height = 20.0 x_scale = cell_width/image_width y_scale = cell_height/image_height worksheet.insert_image('B2', 'python.png', {'x_scale': x_scale, 'y_scale': y_scale}) workbook.close() 

Преимущество такого масштабирования заключается в том, что пользователь может вернуть исходное изображение, установив масштабирование на 100% в Excel.

Я не думаю, что он имеет встроенный способ масштабирования, а также поддерживает соотношение сторон. Вам придется рассчитать его самостоятельно.

Если вы хотите изменить размер и отправить файл в целевом разрешении (возможно, уменьшив размер вашего файла), используйте метод изображений с thumbnail() pillow thumbnail() вместе с xlsxwriter image_data :

 import io from PIL import Image def get_resized_image_data(file_path, bound_width_height): # get the image and resize it im = Image.open(file_path) im.thumbnail(bound_width_height, Image.ANTIALIAS) # ANTIALIAS is important if shrinking # stuff the image data into a bytestream that excel can read im_bytes = io.BytesIO() im.save(im_bytes, format='PNG') return im_bytes # use with xlsxwriter image_path = 'asdf.png' bound_width_height = (240, 240) image_data = get_resized_image_data(image_path, bound_width_height) # sanity check: remove these three lines if they cause problems im = Image.open(image_data) im.show() # test if it worked so far - it does for me im.seek(0) # reset the "file" for excel to read it. worksheet.insert_image(cell, image_path, {'image_data': image_data}) 

Если вы хотите сохранить исходное разрешение и позволить excel выполнять внутреннее масштабирование, но также вписываться в рамки, которые вы предоставляете, вы можете рассчитать правильный коэффициент масштабирования, прежде чем давать ему преимущество:

 from PIL import Image def calculate_scale(file_path, bound_size): # check the image size without loading it into memory im = Image.open(file_path) original_width, original_height = im.size # calculate the resize factor, keeping original aspect and staying within boundary bound_width, bound_height = bound_size ratios = (float(bound_width) / original_width, float(bound_height) / original_height) return min(ratios) # use with xlsxwriter image_path = 'asdf.png' bound_width_height = (240, 240) resize_scale = calculate_scale(image_path, bound_width_height) worksheet.insert_image(cell, image_path, {'x_scale': resize_scale, 'y_scale': resize_scale}) 
  • Python: удалить из легенды диаграммы excel, если значение == 0
  • xlsxwriter не применяет формат к строке заголовка dataframe - Python Pandas
  • Объект XlsxWriter сохраняет как HTTP-ответ для создания загрузки в Django
  • Проблема с Xlsxwriter, форматирование вывода данных Pandas DataFrame для Excel
  • Как избежать перезаписи ячейки в excel с помощью python?
  • Как я могу обойти ограничение URL в Excel?
  • Ошибка кодирования - xlsxwriter - Python
  • Переключение между листами
  • Автоматическое расширение строк с помощью xlsxwriter
  • pandas xlsxwriter, заголовок форматирования
  • Отфильтруйте файл Excel и выведите результат в другой Excel
  • Interesting Posts

    Expression.Error Power Query EXCEL

    Найти наиболее распространенный текст на основе значения поиска

    VBA, чтобы вытащить адреса ячеек и суммировать их в ячейке в другой мастер-таблице

    Ссылка на имя строки в VBA

    Описания из файла excel в HTML

    Excel VBA Iterate Array объектов диапазона

    цитаты и скобки в базе данных, приводящие к ошибкам форматирования в SQL / PHPExcel

    C # не читает дату Excel из таблицы

    Excel Copy Paste работает только в защищенном представлении

    Не устанавливайте заголовки использования и принимайте первую строку как обычную строку в исходном файле Excel, у которых нет заголовков

    Получать сумму из другого листа по имени в той же строке

    Основной флажок, который позволяет другим флажком

    Как отключить автоматическое форматирование на сегодняшний день в Excel

    Вычислить среднее значение VBA из динамической таблицы

    экспорт форматов из python pandas dataframe в формат excel

    Давайте будем гением компьютера.