xlsxwriter создает файлы, которые невозможно прочитать (python) - PullRequest
1 голос
/ 23 апреля 2020

Итак, я создал программу, которая берет изображение и копирует его в документ Excel, окрашивая ячейки документа так же, как пиксели. Вот мой код:

from PIL import Image
import xlsxwriter

image = xlsxwriter.Workbook('Image.xlsx')

image_sheet = image.add_worksheet()

with Image.open("11111.jpg") as px:
    cookie = px.load()
cookie2 = Image.open("11111.jpg")
image_pixels = 0
image_pixels_2 = 0
cookie_height = cookie2.height
cookie_width = cookie2.width
image_sheet.set_column(0, cookie_width, 2.14)

while image_pixels <= cookie_height - 1:
     print(image_pixels)
     while image_pixels_2 <= cookie_width - 1:
          rgb = '#%02x%02x%02x' % cookie[image_pixels_2, image_pixels]
          cell_format = image.add_format()
          cell_format.set_shrink()
          cell_format.set_bg_color(rgb)
          image_sheet.write(image_pixels, image_pixels_2, ' ', cell_format)
          image_pixels_2 += 1

     image_pixels += 1
     if image_pixels_2 >= cookie_width:
          image_pixels_2 = 0

image.close()

Он создает файл, но, когда я открываю файл Excel, он говорит, что он не читается, и удаляет все форматирование. Я не уверен, почему это происходит. Файл иногда доступен для чтения, но иногда это не так.

1 Ответ

1 голос
/ 23 апреля 2020

Excel имеет ограничение в 64 000 уникальных форматов в файле . XlsxWriter удаляет / заменяет дублирующиеся форматы, но возможно, что ваша программа превышает ограничение формата 64 КБ.

Вы можете проверить, изменив свою программу таким образом, чтобы распечатать количество используемых уникальных форматов:

unique = {}
while image_pixels <= cookie_height - 1:
     print(image_pixels)
     while image_pixels_2 <= cookie_width - 1:
          rgb = '#%02x%02x%02x' % cookie[image_pixels_2, image_pixels]
          unique[rgb] = 1
          cell_format = image.add_format()
          cell_format.set_shrink()
          cell_format.set_bg_color(rgb)
          image_sheet.write(image_pixels, image_pixels_2, ' ', cell_format)
          image_pixels_2 += 1

     image_pixels += 1
     if image_pixels_2 >= cookie_width:
          image_pixels_2 = 0

image.close()
print('Unique fomats = ', len(unique))

...