"… и в каждой шутке есть доля шутки"
Не так давно я опубликовал маленькую заметку о небольшой программе, которую я разработал для приятеля. К моему удивлению, она получила неплохие отзывы и «пришлась ко двору» некоторым «хабровчанам».
Я подумал и решил поделиться ссылками на другие свои «крохотульки», маленькие разработки, опубликованные open source. Number #2 будет небольшая программа-шутка, превращающая картинку в формате jpeg в Excel spreadsheet;)
Идея данной программы-шутки родилась в процессе «пивной вечеринки» с друзьями-программистами. Речь зашла о нестандартных форматах хранения изображений; после обсуждения идеи хранения изображения (или любого «бинарника») в двоичном формате в виде распечатанного на лазерном или струйном принтере листе бумаги, с последующим сканированием и распознаванием, мне пришла в голову мысль об использовании фонового цвета ячеек таблицы Excel.
Сказано — сделано, реализация заняла чуть больше времени, нежели «гугление» работы с MS Excel. Программка не оптимизированна, работает достаточно медленно (потому, что рисует pixel by pixel), обрабатывает только jpeg формат. Я уверен, что умельцы — знатоки работы с MS Excel, смогут ускорить ее в разы (но, прежде чем заняться этим, подумайте — нужно ли? Ведь смысла и пользы от данной программки практически ноль!).
Саму программку, и ее простейший исходный код, вы можете скачать с Codeplex-а. Таблицу Excel, содержащую фотографию милой девушки (спасибо, гугл!) в заголовке, можно скачать вот тут (вирусов нет!).
Быть может, исходный код данной программки поможет кому-то в освоении взаимодействия с MS Excel из C#, ну, или просто даст вам небольшой повод улыбнуться, и вспомнить, что в нашей интереснейшей профессии всегда остается время для «нашенского», специфического юмора и шуток:)
Комментарии (10)
22 января 2017 в 10:25 (комментарий был изменён)
0↑
↓
Interop вроде же устаревший моветон? Open XML наше все. И работает быстрее на несколько порядков.22 января 2017 в 10:30
0↑
↓
Уважаемый leremin, если Вам не лень — то «пример в студию» (благо open source). Сам с удовольствием поучусь — вдруг где-нибудь, да пригодится…22 января 2017 в 10:43
0↑
↓
Честно, лень. Но вечером может напишу тоже самое на OpenXML и выложу. Там идея в том, что в Interop вы фактически эмулируете действия пользователя, которые обрабатываются Excel, а в случае OpenXML — вы просто создаете XML документ, т.е. хоть в 100 потоков на кластере это можно делать. Отсюда и скорость, нет накладных расходов на обработку событий в Excel.А по существу вопроса, в комплекте OpenXML SDK есть программа, которая по xlsx файлу может получить исходник на C#, который создаст этот документ. Да, там код адски перегружен, но учился я так.
22 января 2017 в 10:53
0↑
↓
Когда-то, давным давно, у меня была задача достаточно оперативно передавать в Excel довольно большие объемы достаточно часто (2.5 Msp ADC PCI board), и я с ней справился. Правда, тогда был задействован C++ (или C-шный) «bridge», native API Excel-а. Работало достаточно «живенько», считало средствами Excel FFT в real time практически, и было очень востребовано «непродвинутыми» учеными (которым чем проще, тем лучше).В этой крохотной программке я столкнулся с тем, что иначе, чем «попиксельно» (cell by cell) не получается, подробностей, к сожалению, не помню.
Поскольку я в этой области на «искперта» ну никак не претендую, буду рад увидеть мастер-класс от вас, чисто ради интереса.
22 января 2017 в 11:29
0↑
↓
Вечером, возможно, не до этого. Но надо понимать, что Interop и OpenXML — это две большие разницы. В первом случае вы работаете с Word/Excel/PowerPoint, а во-втором — с xml иерархией. Например, для автоподбора ширины столбцов в таблице — нужно нажать одну кнопку в Word, соответственно — один метод в Interop. А в OpenXML вы должны будете этот метод сами реализовать, т.е. посчитать оптимальную ширину и задать всем столбцам.Я тоже не эксперт, но и Interop можно сильно ускорить, нужно минимизировать количество вызовов методов. Например, сгенирировать текстовый файл средствами C# и импортировать его в книгу средствами Excel вместо того, чтобы заполнять ячейки в цикле Но в данном случае это не то.
22 января 2017 в 11:40
0↑
↓
Ну, попробуйте, спортивного интереса ради, ведь за язык вас никто не тянул ;) Я прекрасно понимаю, как устроен OpenXML, да и любой, не имеющий представления, может переименовать , xlsx файл в .zip, открыть через архиватор/Far и посмотреть, что внутри архива.
22 января 2017 в 10:29
0↑
↓
Про пользу это вы зря.) Возможно кому нибудь нужно будет руками экспортировать данные в xsl (x) в изображениями22 января 2017 в 11:18 (комментарий был изменён)
0↑
↓
Что любопытно: проверил линк из статьи на демонстрационный xlsx, который открывается через online-овый Excel — очень любопытно Microsoft отрисовывает ;) Даже на моем Lumia 950 получается гораздо быстрее. Вот так, получился неплохой тестовый case для MS;)Очень интересно наблюдать, в какой последовательности отрисовываются/рендерятся ячейки таблицы! Если при работе моей программки все понятно, то в случае MS я оказался в затруднении, честное слово…
22 января 2017 в 11:56
0↑
↓
Wow, что еще любопытнее, так это то, что Chrome отрисовывает все (хотя и по странной логике программистов MS, и довольно медленно), Firefox гордо пытается, но в конце практически «сдыхает», а IE и Edge тупо рендерят какую-то фигню с «мусором», после чего тупо «отваливаются» ;)22 января 2017 в 12:22
0↑
↓
У меня FF нормально отрисовал