Pull to refresh

Comments 20

Код без отступов выглядит нечитаемо. Воспользуйтесь тегом <source>!
А почему именно с проприетарными форматами? Если попробовать с OpenDocument или Office Open XML?
С XML документами Microsoft Office (docx, xlsx) Apache POI тоже работает. Касательно форматов OpenOffice (Libre Office и т.п.), так большинство моих знакомых вообще не в курсе что это такое :(
Обязательно попробую на досуге посмотреть как сделать аналогичную вещь с документами odf; уверен что проблем особых быть не должно
посмотрели?
Apache poi AFAIK не поддерживает ods.
Таки не поддерживает.
Вплотную не занимался, нагуглил либу ODFDOM но пока не пробовал ее использовать.
Если начинать копать, то отсюда: incubator.apache.org/odftoolkit/odfdom/Layers.html
Just for fun.

Иногда такие задачи решать просто интересно.
UFO just landed and posted this here
Никакого практического применения этому я придумать, конечно, не могу. Такая цель и не ставилась, просто было интересно именно поиграться. Да и смотреть на удивленный взгляд человека, которому показываешь картину в экселе — то еще удовольствие
Давным давно видел картинку в вебе, которая показывается даже с отключенными картинками и сохранить её было сложно (только PrtScrn). Да, нарисовано было ячейками в один пиксель.
UFO just landed and posted this here
Не факт. Я подобным баловался ещё в универе: никакого CSS, только table, td в один пиксел и bgcolor! :D
Тогда и слов-то таких не было. Это наверно конец того века был.
Немного VSTO и получаем довольно точную копию картинки =)
image

Документ и пачка dll-ок к нему

При желании, можно добавить ресайз и уменьшение глубины цвета — это дело техники.

Ключевой кусок кода:
using (var image = Image.FromFile(Target.Text) as Bitmap)
{
    var range = Range[Cells[2, 2], Cells[image.Height + 2, image.Width + 2]] as Excel.Range;
    range.ColumnWidth = 1.0 / 12; // магия,  для столбцов и колонок используются разные единицы измерения
    range.RowHeight = 1.0;
    for (int rowIndex = 0; rowIndex < image.Height; rowIndex++)
    {
        for (int colIndex = 0; colIndex < image.Width; colIndex++)
        {
            var cell = Range[Cells[rowIndex + 2, colIndex + 2], Cells[rowIndex + 2, colIndex + 2]] as Excel.Range;
            cell.Interior.Color = ColorTranslator.ToOle(image.GetPixel(colIndex, rowIndex));
        }
    }
}


P.S. На больших картинках лучше не эксперементировать — работает сие поделие не слишком быстро.
для столбцов и колонок

конечно же, для столбцов и строк =) спать пора идти
Ячейки размером в пиксель будут смотреться шикарно. Правда ограничение на количество ячеек остается, так что большие (по разрешению) картинки все равно остаются не у дел :(
там и так ячейки в один пиксель =) а по количеству строк и столбцов — боюсь, вероятность того, что пользователь задолбается ждать, значительно выше того, что у Экселя 2010+ закончится индекс столбцов (16384 или XFD) или тем более строк (1048576)
range.RowHeight = 1.0;

Понимаю что в 1, просто неправильно сформулировал предложение. А вот что у 2010+ увеличен индекс столбцов не знал, спасибо.
PS
Видимо, фраза «вставить скриншот в эксель» может быть интерпретирована даже очень буквально :)
Минут 30 по-моему работало. Делал в августе, а исходники где-то потерялись, к сожалению.
Скриншот

Sign up to leave a comment.

Articles