Excel — Получение картинок из excel C#


Содержание

Записная книжка программиста-новичка, C#, SQL, PHP и все-все-все

Я ведь это уже делал, но хрен теперь найдешь тот кусок кода, гуглим снова… Где бы найти простое и понятное руководство для начинающего, а не тонкости для мега-гуру?

Рубрики

Свежие записи

Свежие комментарии

  • Calator prin Romania к записи Как переименовать проект/каталог проекта в Visual Studio?
  • iukovl к записи Как изменить максимальный размер загружаемого файла в php
  • sdfdsgeg к записи Работа с файлом конфигурации (configuration) в C# — читаем и сохраняем
  • iukovl к записи Как изменить максимальный размер загружаемого файла в php
  • Надежда к записи Ошибка в коде привела к убыткам в 476 миллионов долларов и банкротству компании

Архивы

Работа с Excel из C# через COM Interop, часть 1, открываем документ и выводим данные

Задача: вывести данные в таблицу Excel с красивым оформлением и открыть ее, чтобы пользователь мог напечатать или сохранить средствами самого Excel. Необходимо поддерживать все версии Office, начиная с 97, то есть вывод в новые xml-форматы Office 2007 и выше невозможен

Самая сложная часть — работа с оформлением, так как во-первых интерфейс Excel крайне неочевиден, запутан и плохо документирован, во-вторых оформление Excel таблицы из кода работает достаточно медленно. В связи с этим в большинстве случаев подойдет вариант с использованием шаблонов .xlt. Так как мы выводим файл для просмотра и печати, без расчета на сложные вычисления, диаграммы и прочие прелести жизни, мы можем привести формат всех ячеек к тексту и забыть про различные типы данных.

Таким образом задача сводится к следующему:

1) Подготовить файлы шаблонов для разных типов выборок (шапка, размер шрифта, перенос по словам, ширина столбцов)
2) Взять данные из программы и вывести их в нужное место шаблона (как правило это прямоугольный массив ячеек соответствующий DataTable)
3) Подключить к проекту dll-библиотеку Excel Microsoft.Office.Interop.Excel в раздел references и проставить параметр копирования библиотеки к скомпилированным файлами CopyLocal в True.
4) Написать класс для работы с Excel и вывести через него данные из таблицы

При такой постановки задачи «Но это же неэстетично! — Зато дешево, надежно и практично» сам класс работы с Excel получается достаточно простым, но превосходно выполняет поставленную задачу

У класса есть одна особенность — он работает с неуправляемым ресурсом — приложением Excel. То есть мы создаем невидимый процесс Excel, заполняем его данными из шаблона и программ и только после этого отображаем на экран. В случае ошибок никакой сборщик мусора не приберет за нами грязь, так что закрытие документа в случае ошибки придется делать в ручную. Собственноручное изменение деструктора тоже работает весьма своеобразно с COM-интерфейсом.

В простейшем случае получим код вида

Само собой ничто не мешает в дальнейшем расширить этот класс методами для работы с оформлением, вроде

Такой метод вряд ли подойдет для больших и сложных корпоративных систем, разрабатываемых высокооплачиваемыми профессионалами, но может спасти программиста-новичка в случае требования начальства «сделать ВЧЕРА вывод отчета в excel в соответствии с требования клиента по оформлению».

Комментарии

Работа с Excel из C# через COM Interop, часть 1, открываем документ и выводим данные — Комментарии (6)

Не надо сгущать краски. Работать с Excel также просто (или сложно), как и с чем-то другим. Разные варианты загрузки данных из Excel с учетом преобразования данных требуют разное операционное время, поэтому нужно выбирать нужный для конкретного случая.

Я, наверно, буду голосом большинства когда спрошу. ГДЕ ССЫЛКА НА ВТОРУЮ ЧАСТЬ ?

Необходимо поддерживать все версии Office, начиная с 97, то есть вывод в новые xml-форматы Office 2007 и выше невозможен
И где же решение данной части задачи?

Официальное трудоустройство, работа через интернет.

Передача данных в книгу Excel с помощью Visual C# 2005 или Visual C# .NET

Версия этой статьи для Microsoft Visual Basic 6,0 приведена в статье 247412.

В этой статье описываются несколько способов переноса данных в Microsoft Excel 2002 из программы Microsoft Visual C# 2005 или Microsoft Visual C# .NET. В этой статье также представлены преимущества и недостатки каждого метода, чтобы вы могли выбрать решение, которое лучше всего подходит для вашей ситуации.


Общие сведения

Метод, наиболее часто используемый для передачи данных в книгу Excel, является автоматизацией. С помощью автоматизации можно вызывать методы и свойства, относящиеся к задачам Excel. Автоматизация предоставляет максимальную гибкость для указания расположения данных в книге, форматирования книги и создания различных параметров во время выполнения.

С помощью автоматизации вы можете использовать различные методы для переноса данных:

  • Перемещение ячейки данных по ячейке.
  • Передача данных в массиве в диапазон ячеек.
  • Перенесите данные из набора записей ADO в диапазон ячеек с помощью метода Копифромрекордсет.
  • Создайте объект QueryTable на листе Excel, который содержит результат запроса в источнике данных ODBC или OLEDB.
  • Перенесите данные в буфер обмена, а затем вставьте содержимое буфера обмена в лист Excel.
    Вы также можете использовать несколько методов, которые не требуют автоматизации для передачи данных в Excel. Если вы используете серверную программу, это может быть хорошим подходом к отходящей обработке данных от клиентов.

Для переноса данных без автоматизации можно использовать следующие подходы:

  • Перенесите данные в текстовый файл с разделителями табуляцией или с разделителями запятыми, который Excel будет впоследствии разбить на ячейки на листе.
  • Перенесите данные на лист с помощью ADO.NET.
  • Передача XML-данных в Excel (версии 2002 и 2003) для предоставления данных, отформатированных и упорядоченных по строкам и столбцам.

В этой статье приводится обсуждение и пример кода для каждого из этих методов. В разделе «Создание полного примера проекта Visual C# 2005 или Visual C# .NET» Далее в этой статье показано, как создать программу Visual C# .NET, которая выполняет каждый из этих методов.

Способ

Использование автоматизации для передачи ячейки данных по ячейкам

С помощью автоматизации можно переносить данные на лист по одной ячейке за раз:

Передача данных по ячейкам является приемлемым подходом при наличии небольшого количества данных. У вас есть гибкие возможности для размещения данных в любом месте книги, и вы можете форматировать ячейки в зависимости от времени выполнения. Однако не рекомендуется использовать этот подход, если вы используете большое количество данных для передачи в книгу Excel. Каждый объект диапазона, полученный во время выполнения, вызывается запросом к интерфейсу, что означает медленную передачу данных. Кроме того, Microsoft Windows 95, Microsoft Windows 98 и Microsoft Windows Millennium Edition (Me) имеют ограничение до 64 КБ в запросах интерфейса. Если количество запросов интерфейса превышает 64 КБ, сервер автоматизации (Excel) может перестать отвечать на запросы или сообщения об ошибках, указывающие на недостаток памяти.

Опять же, передача данных по ячейке допускается только для небольших объемов данных. Если необходимо перенести большие наборы данных в Excel, рекомендуется использовать один из других подходов, описанных в этой статье, для массовой передачи данных.

Для получения дополнительных сведений, а также для примера автоматизации Excel с помощью Visual C# .NET щелкните номер статьи ниже, чтобы просмотреть статью в базе знаний Майкрософт:

302084 практическое руководство: Автоматизация Microsoft Excel из Microsoft Visual C# .NET

Использование автоматизации для переноса массива данных в диапазон листа

Вы можете перенести массив данных в диапазон из нескольких ячеек за один раз:

Если вы переносите данные с помощью массива, а не ячейки по ячейке, вы можете реализовать огромную производительность с большим количеством данных. Рассмотрите следующие строки из вышеупомянутого кода, которые передают данные в 300 ячейки листа:

Этот код представляет два запроса интерфейса: один для объекта Range, возвращаемого методом Range, и другой для объекта Range, который возвращает метод Resize. В отличие от переноса ячейки данных по ячейке, необходимо запросить интерфейсы 300 для объектов Range. Если это возможно, вы можете воспользоваться преимуществами для массового переноса данных и уменьшения количества запросов к интерфейсу.

Для получения дополнительных сведений о том, как использовать массивы для получения и задания значений в диапазонах с помощью автоматизации Excel, щелкните номер статьи ниже, чтобы просмотреть статью в базе знаний Майкрософт:

302096 практическое руководство: Автоматизация Excel с помощью Visual C# .NET для заполнения или получения данных в диапазоне с помощью массивов

Использование автоматизации для переноса набора записей ADO в диапазон листа

Объектные модели для Excel 2000, Excel 2002 и Excel 2003 предоставляют метод Копифромрекордсет для переноса набора записей ADO в диапазон листа. В приведенном ниже коде показано, как автоматизировать Excel для переноса содержимого таблицы Orders в образце базы данных Northwind с помощью метода Копифромрекордсет:

Копифромрекордсет работает только с объектами Recordset ADO. Вы не можете использовать набор данных, созданный с помощью ADO.NET, с помощью метода Копифромрекордсет. Несколько примеров в следующих разделах демонстрируют порядок переноса данных в Excel с помощью ADO.NET.

Использование автоматизации для создания объекта QueryTable на листе

Объект QueryTable представляет таблицу, созданную на основе данных, возвращаемых из внешнего источника данных. При автоматизации Excel можно создать QueryTable, предоставив строку подключения к OLE DB или источнику данных ODBC, а также строку SQL. Excel создает набор записей и вставляет набор записей на лист в указанном расположении. Объекты QueryTable имеют следующие преимущества по сравнению с методом Копифромрекордсет:

  • Excel обрабатывает создание набора записей и его расположение на листе.
  • Вы можете сохранить запрос с помощью объекта QueryTable и обновить его позже, чтобы получить обновленный набор записей.
  • Когда на лист добавляется новый QueryTable, вы можете указать, что данные, которые уже существуют в ячейках листа, будут сдвинуты для обработки новых данных (Дополнительные сведения см. в свойстве Рефрешстиле).

В приведенном ниже коде показано, как автоматизировать Excel 2000, Excel 2002 или Excel 2003 для создания нового QueryTable на листе Excel с помощью данных из учебной базы данных Northwind:

Использование буфера обмена Windows


Вы можете использовать буфер обмена Windows для переноса данных на лист. Чтобы вставить данные в несколько ячеек на листе, можно скопировать строку, в которой столбцы разделяются символами ТАБУЛЯЦИи, а строки — символами возврата каретки. В приведенном ниже коде показано, как Visual C# .NET может использовать буфер обмена Windows для передачи данных в Excel:

Создание текстового файла с разделителями, который Excel может проанализировать по строкам и столбцам

Excel может открывать файлы с разделителями табуляцией и запятыми и правильно анализировать данные в ячейки. Эту функцию можно использовать, если требуется перенести большое количество данных на лист, используя небольшую, при автоматизации. Это может быть хорошим подходом к клиент-серверной программе, так как текстовый файл может быть создан на стороне сервера. Затем можно открыть текстовый файл на клиенте, используя автоматизацию там, где это необходимо.

Цукерберг рекомендует:  Javascript - Скрипт, котрый я незнаю как доработать

В приведенном ниже коде показано, как создать текстовый файл с разделением табуляцией из данных, считываемых с помощью ADO.NET:

Приведенный выше код не использует автоматизацию. Однако при желании можно использовать автоматизацию для открытия текстового файла и сохранения файла в формате книги Excel, как показано ниже:

Передача данных на лист с помощью ADO.NET

С помощью поставщика OLE DB для Microsoft Jet можно добавлять записи в таблицу из существующей книги Excel. Таблица в Excel — это всего лишь диапазон ячеек; диапазон может иметь определенное имя. Как правило, первая строка диапазона содержит заголовки (или имена полей), а все последующие строки в диапазоне содержат записи.

Приведенный ниже код добавляет две новые записи в таблицу в Book7. xls. В этом случае таблицей является Лист1:

При добавлении записей с помощью ADO.NET, как показано в этом примере, сохраняется форматирование книги. Каждая запись, добавляемая в строку, помещает ее в формат перед строкой.

Для получения дополнительных сведений об использовании ADO.NET щелкните номера статей, приведенные ниже, чтобы просмотреть статьи базы знаний Майкрософт:

306636 практическое руководство: подключение к базе данных и выполнение команды с помощью ADO.NET и Visual C# .NET

314145 практическое руководство по заполнению объекта DataSet из базы данных с помощью Visual C# .NET

307587 практическое руководство: обновление базы данных из объекта DataSet с помощью Visual C# .NET

Для получения дополнительных сведений об использовании поставщика OLEDB для Jet с источниками данных Excel щелкните номера статей ниже, чтобы просмотреть статьи базы знаний Майкрософт:

278973 пример: в ексцеладо показано, как использовать ADO для чтения и записи данных в книгах Excel

257819 практическое руководство: использование ADO с данными Excel из Visual Basic или VBA

Передача XML-данных (Excel 2002 и Excel 2003)

Excel 2002 и 2003 могут открыть любой XML-файл с правильным форматом. XML-файлы можно открыть непосредственно с помощью команды открыть в меню файл или программным путем с помощью методов Open и OpenXML коллекции книги. Если вы создаете XML-файлы для использования в Excel, вы также можете создать таблицы стилей для форматирования данных.

Создание полного примера проекта Visual C# .NET

Создание новой папки с именем К:\ексцелдата. В этом примере программа будет хранить книги Excel в этой папке.

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

  1. Создайте новую книгу в Excel.
  2. На листе Sheet1 новой книги введите FirstName в ячейке a1 и LastName в ячейке B1.
  3. Выберите a1: B1.
  4. В меню Вставка выберите пункт имя, а затем — команду определить. Введите имя MyTable и нажмите кнопку ОК.
  5. Сохранение книги в виде C:\Exceldata\Book7.xls.
  6. Закройте Excel.

Запустите Microsoft Visual Studio 2005 или Microsoft Visual Studio .NET. В меню Файл выберите пункт Создать и затем пункт Проект. В разделе проекты Visual C# или Visual c# выберите приложение Windows. По умолчанию форма Form1 создана.

Добавьте ссылку на библиотеку объектов Excel и основную сборку взаимодействия ADODB. Для этого выполните следующие действия:

  1. On the Project menu, click Add Reference.
  2. На вкладке Сеть найдите ADODB и нажмите кнопку Выбрать.

Обратите внимание, что в Visual Studio 2005 нет необходимости щелкать кнопку выбрать.
3. На вкладке COM найдите объектная Библиотека Microsoft Excel 10,0 или библиотека объектов Microsoft Excel 11,0, а затем нажмите кнопку Выбрать.

Обратите внимание, что в Visual Studio 2005 нет необходимости щелкать кнопку выбрать.

Примечание Если вы используете Microsoft Excel 2002, а вы еще не сделали это, корпорация Майкрософт рекомендует скачать и установить основные сборки взаимодействия Microsoft Office XP (PIA).

В диалоговом окне Добавление ссылок нажмите кнопку ОК, чтобы принять выбранные параметры.


Добавление элемента управления «поле со списком» и элемента управления «Кнопка» в форму Form1.

Добавьте обработчики событий для события загрузки формы и событий Click элемента управления Button:

  1. В представлении конструктора для Form1.cs дважды щелкните элемент Form1.

Обработчик события Load для формы создан и отображается в Form1.cs.
2. В меню Вид выберите конструктор, чтобы переключиться в режим конструктора.
3. Дважды щелкните элемент Button1.

Обработчик события нажатия кнопки создается и отображается в Form1.cs.

В Form1.cs замените приведенный ниже код.

Обратите внимание, что необходимо изменить код в Visual Studio 2005. По умолчанию Visual C# добавляет одну форму в проект при создании проекта Windows Forms. Форма называется Form1. Два файла, представляющие форму, называются Form1.cs и Form1.designer.cs. Вы пишете код в Form1.cs. Файл Form1.designer.cs — это место, в котором конструктор Windows Forms записывает код, который реализует все действия, выполненные путем перетаскивания элементов управления с панели инструментов.

Для получения дополнительных сведений о конструкторе Windows Forms в Visual C# 2005 посетите следующий веб-сайт Microsoft Developer Network (MSDN):

Создание проекта (Visual C#) Примечание Если вы не устанавливали Office в папку по умолчанию (C:\Program Files\Microsoft Office), измените константу m_strNorthwind в образце кода, чтобы она использовала путь установки для Northwind. mdb.

Добавьте следующие директивы using в директивы using в Form1.cs:

Нажмите клавишу F5 для сборки и запуска примера.

Ссылки

Для получения дополнительных сведений посетите следующий веб-сайт Майкрософт:

Сохранить изображения с листа Excel в файлы

Надстройка позволяет экспортировать все изображения с листа Excel в графические файлы.

Доступен выбор типа создаваемых файлов (поддерживаются форматы JPG, GIF и PNG)

Кроме того, можно указать имя папки, в которую будут помещены созданные файлы
(эта папка будет создана автоматически в том же каталоге, где расположен обрабатываемая книга Excel)

Если нужно сохранять картинки под именами из заданного столбца, либо производить другие действия с картинками (вставку на лист, вставку по ссылкам, поиск картинок в интернете), то воспользуйтесь универсальной надстройкой PastePictures.
Функция выгрузки изображений в файлы там присутствует в меню Изображения — Сохранить картинки с листа

В имени папки можно указать кодовое слово $filename — оно будет заменено на название текущего (обрабатываемого) файла Excel.

Для запуска экспорта картинок в файлы нажмите комбинацию клавиш Ctrl + Shift + P

На форме выберите формат сохраняемых изображений, и название папки для экспорта:

По завершении сохранения изображений макрос выдаст уведомление:

Результат экспорта изображений в созданной папке:

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

Вложение Размер Загрузки Последняя загрузка
Надстройка ExportPictures.xla 37 КБ 64 2 года 32 недели назад
Книга Excel с картинками для тестирования надстройки ExportPictures 361.5 КБ 246 1 год 27 недель назад
  • 61293 просмотра

Комментарии


Здравствуйте, Виталий
Выгрузить полноразмерные картинки легко очень (достаточно файл Excel сохранить как веб-страницу, и появится папка с картинками)
Гораздо сложнее разобраться, какая картинка к какой строке относилась, чтобы присвоить картинкам имена из столбца (в описанном выше способе, картинки получают произвольные имена)

Добрый день Игорь!
Тема уже поднималось по размеру картинки. Разве нельзя выгрузить картинку оригинального размера а не размера вставленного изображения! Просто когда я отправляю через почтовый клиент и данные вставляю в тело письма, получатель получает все фото в оригинальном размере без каких либо зажатий (во вложении).
Заранее Большое спасибо!

Спасибо за отличную программу. В 2020 версии экспортирует первые 23 изображения, остальные идут просто белым фоном. После первого экспорта удаляете уже готовые изображения из документа и повторяете заново))

Ох! Пардон, перечитал комментарии и нашёл ответ на свой вопрос.
Ещё раз спасибо за отличную программку! :)

Добрый день!
Спасибо за прекрасную программку. Возможно, вам нужна на сайте кнопка «Дать денег за просто так» :)
Если по делу, то вопрос такой:
Можно ли без изменения кода в название файлов передать данные из этой же строки, что и картинка. А вообще кроме названия файла что-то можно передать в имя файла?
Спасибо.

Попробуйте универсальную программу для сохранения картинок в файлы
http://excelvba.ru/programmes/PastePictures
Там другой механизм выгрузки, — он должен работать на любой версии.

Пытаюсь экспортировать картинки из документа. Всё работает, вот только вместо картинок в папке просто файлы с белым фоном и всё.Как поступить? У меня офис 2020. До этого на 2010 всё работало, а теперь на новом офисе получается такая ерунда.

Спасибо за программу. Просто и удобно.

vet, такая возможность есть.
Читайте мой предыдущий комментарий.

есть ли возможность присваивать файлам имена заданные в соседней с картинкой ячейке?
спасибо

не пойму почему, но не работает на 2010 excel

Здравствуйте, Александр
В расширенной версии этой надстройки есть возможность задать номер столбца
(и экспорт картинок там реализован качественнее)
http://excelvba.ru/programmes/PastePictures

В меню надстройки есть пункт «Изображения — Сохранить картинки в файлы. »

Спасибо большое! Работает! :)
Я так понял сам код VBA запаролен. Можно как то договориться на посмотреть, «что там внутри».
Работает все как надо. Задача была выгрузить картинку и присвоить ей имя .jpg пришлось изменить прайслист и просто разместить имена артикулов слева. Все получилось. Но было бы удобнее указывать индекс столбца, где надо искать имя, что бы не править сам лист Excel.

Автору большое Спасибо.

Да, выгружаются без белых полос, но все очень маленькие. НЕ смотря на то что я их предварительно увеличила:-( Почему в 2003 Exsel фотки вытаскиваются без изменения свойств в реальном размере, а из моего, только такие как они вставлены в лист? Уже просто не знаю что делать.

Здравствуйте, Елена.
C белой полосой, — да, есть такая проблема.
Дело в том, в 3 разных версиях Excel (2003, 2007, 2010) этот макрос работает по-разному (в одной версии — без полос, в других — есть полосы, причем с разных сторон)
Это недостаток используемого способа экспорта изображений (через вставку в диаграмму, у которой, в Excel 2007-2010, края закруглены, — из-за этого картинку не удается поместить точно в угол диаграммы, и получаются белые полосы)

Используйте для экспорта картинок в файлы эту надстройку:
http://excelvba.ru/programmes/PastePictures
Там используется другой, более сложный, алгоритм экспорта, — и картинки выгружаются нормально (без белых полос)

Фото смогла все увеличить до исходного размера, но после использования макроса, почему то внизу фото появляется белая полоса, качество хорошее, но изображение как будто не все.

Добрый день. Работает все отлично, быстро, проблем с переименованием нет. НО есть другая проблема. У каждого фото в эксель файле есть свой определенный размер (когда заходишь в свойства рисунка есть исходные размеры), а при скачивании через макрос они становятся все одинаковымми, маленькими по размеру. Если в свойствах рисунка нажать сброс (размеры станут исходные), то при вытаскивании через макрос размер остается такой какой нужен. Только заходить в каждое фото, это очень тяжко, по другому никак этого не сделать?

Нет, для этого надо другой макрос делать.

Здравствуйте! Может ли данная надстройка помочь в том случае, если я хочу ячейку (пустую или с текстовыми данными)сделать изображением?

Эта надстройка уже не поддерживается, — в программе для вставки картинок в Excel есть аналогичная функция сохранения картинок в файлы, только уже корректно работающая во всех версиях Excel.

Вот в ту программу можно будет добавить опцию выбора масштаба.

Подскажите всё таки, если можно, как увеличивать картинки, а то приходится их сначала руками все увеличивать. А вообще было бы не плохо в форму добавить поле, для введения масштаба увеличения (по умолчанию =1). И каждый мог бы увеличить во столько, во сколько ему нужно, в 2 или в 5 или в 3,748 раза.

Очень помогло, большое спасибо автору.

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

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

Здравствуйте, Дмитрий.
Дело в том, что Excel не знает, каких размеров та картинка была изначально, и не может оценить её качество.
Потому я даже не знаю, как картинки выгрузить увеличенными, — увеличить-то их перед выгрузкой несложно (и то не всегда, — если картинка огромная, — то это проблематично), — вот только как определить, во сколько раз её увеличивать.
Некоторые картинки надо увеличить в 2 раза, некоторые — в 5 раз, а есть и такие картинки, в которых при увеличении в несколько раз заметно потеряют в качестве.
К тому же, заранее неизвестно, было ли применено к этим картинкам (или некоторым из них) сжатие.
Потому получить заведомо корректный результат проблематично.

PS: Сейчас картинки выгружаются в том размере, в каком они отображаются в Excel.

Столкнулся с тем, что выгружаемые файлы меньше по размеру и хуже по качеству, чем картинки к экселе. Например, если картинка хорошего качества ужата по размеру в экселе, но при этом ее можно всегда развернуть, то она такая маленькая (в ужатом виде) и выгружается. Можно это как-то побороть? Заранее спасибо!


Загружено 0 файлов.
Эта надстройка не загружает никаких файлов, а, наоборот, экспортирует картинки с листа в файлы.
Не видя ваш файл с картинками, помочь вряд ли получится.

Добрый вечер. Пишит после запуска программа не отвечает и выдает что загружено 0 файлов. Вы не могли бы, пожалуйста помочь? Заранее спасибо

Если при нажатии комбинации клавиш, макрос не запускается, — на то могут быть 2 причины:
1) файл надстройки не запущен
2) не включены макросы в Excel

Как запустить? По комбинации Ctrl + Shift + P открывается окно Формат ячеек.

Очень своевременно помогло сохранить большое количество картинок из файла.
Спасибо!

Дмитрий, а какая разница, сохранять картинки из XLSX, или из другого формата файлов Excel (XLS и т.д.)
Для программы (макроса) разницы нет.

Спасибо за программу, если-бы она еще сохраняла оригиналы из xlsx, было-бы совсем отлично.

Здравствуйте, Сергей.
Возможно, в вашем файле картинки вставлены как-то по-особенному,
или вы задали название папки, содержащее недопустимые символы для имени папки.

В файле-примере ведь всё работает.
Можете выслать мне на почту свой файл Excel с картинками — тогда я подскажу, в чем проблема.

После нажатия «экспортировать изображения в файлы»
выдает
«экспортированно 0 из . ( кол-во найденных ) изображений»

Извлечение изображения из документа Microsoft Excel

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

Извлечение картинок

Главным критерием выбора конкретного способа является тот факт, хотите ли вы вытащить одиночное изображение или произвести массовое извлечение. В первом случае можно удовлетвориться банальным копированием, а вот во втором придется применить процедуру конвертации, чтобы не терять время на извлечении каждого рисунка по отдельности.

Способ 1: копирование

Но, прежде всего, давайте все-таки рассмотрим, как произвести извлечение изображения из файла методом копирования.

    Для того чтобы скопировать изображение, прежде всего его нужно выделить. Для этого кликаем по нему один раз левой кнопкой мыши. Затем выполняем щелчок правой кнопкой мыши по выделению, тем самым вызывая контекстное меню. В появившемся списке выбираем пункт «Копировать».

Можно также после выделения изображения перейти во вкладку «Главная». Там на ленте в блоке инструментов «Буфер обмена» щелкаем по пиктограмме «Копировать».

Существует и третий вариант, при котором после выделения нужно нажать на комбинацию клавиш Ctrl+C.
После этого запускаем любой редактор изображений. Можно, например, воспользоваться стандартной программой Paint, которая встроена в Windows. Производим вставку в эту программу любым из тех способов, которые в ней доступен. В большинстве вариантов можно воспользоваться универсальным способом и набрать комбинацию клавиш Ctrl+V. В Paint, кроме этого, можно нажать на кнопку «Вставить», расположенную на ленте в блоке инструментов «Буфер обмена».

  • После этого картинка будет вставлена в редактор изображений и её можно сохранить в виде файла тем способом, который доступен в выбранной программе.
  • Преимущество данного способа заключается в том, что вы сами можете выбрать формат файла, в котором сохранить картинку, из поддерживаемых вариантов выбранного редактора изображений.

    Способ 2: массовое извлечение изображений

    Но, конечно, если изображений больше десятка, а то и несколько сотен, и их всех нужно извлечь, то вышеуказанный способ представляется непрактичным. Для этих целей существует возможность применить конвертацию документа Excel в формат HTML. При этом все изображения автоматически будут сохранены в отдельной папке на жестком диске компьютера.

      Открываем документ Excel, содержащий изображения. Переходим во вкладку «Файл».

    В открывшемся окне щелкаем по пункту «Сохранить как», который находится в левой его части.


    После этого действия запускается окно сохранения документа. Нам следует перейти в ту директорию на жестком диске, в которой желаем, чтобы разместилась папка с картинками. Поле «Имя файла» можно оставить без изменения, так как для наших целей это не важно. А вот в поле «Тип файла» следует выбрать значение «Веб-страница (*.htm; *.html)». После того, как вышеуказанные настройки произведены, щелкаем по кнопке «Сохранить».

    Возможно, при этом появится диалоговое окно, в котором будет сообщаться, что файл может иметь возможности, несовместимые с форматом «Веб-страница», и при конвертации они будут утеряны. Нам следует согласиться, нажав на кнопку «OK», так как единственной целью является извлечение картинок.

    После этого открываем Проводник Windows или любой другой файловый менеджер и переходим в директорию, в которой сохранили документ. В этой директории должна образоваться папка, которая содержит наименование документа. Именно в этой папке и содержатся изображения. Переходим в неё.

  • Как видим, картинки, которые были в документе Excel, представлены в этой папке в виде отдельных файлов. Теперь с ними можно выполнять те же манипуляции, что и с обычными изображениями.
  • Вытащить картинки из файла Excel не так уж сложно, как могло показаться на первый взгляд. Это можно сделать либо путем простого копирования изображения, либо путем сохранения документа, как веб-страницы, встроенными инструментами Эксель.

    Отблагодарите автора, поделитесь статьей в социальных сетях.

    «My way» с MS Excel

    В компании, где я работаю, пользователи работают с данными с помощью MS Excel. Основным хранилищем информации является БД Oracle. Отсюда требуется:

    • Представление отчетов из базы данных в формате Excel
    • Забирать информацию в виде Excel файлов и заливать её в Oracle

    Проблематика:

    Работа с Excel, довольно сильно отличается от работы с обычным текстовым файлом. В его ячейках помимо значений могут храниться сложные формулы и данные, загруженные по ссылкам. Так же в колонке с одним типом данных могут встречаться значения других типов. В случае какой-либо ошибки в ячейке информация на листе продолжает оставаться доступной и только у этой ячейки будет статус Error. Есть и другие вещи, которые делают Excel очень гибким и уникальным продуктом для пользователя и не простым для разработчика.

    Как-то был случай, когда начальник мышкой выделял часть таблицы в Excel и копировал его на другую страницу, задавая мне вопрос – “Неужели так сложно сделать это же, только с копированием в базу? Ты же Профессионал!”. После того разговора я, какое-то время, чувствовал себя хомячком, которому дали каплю никотина, убившую лошадь. Но время шло, и с помощью MSDN и интернета я стал ближе с MS Excel, а ежедневные танцы с бубном вокруг него дали свой результат.

    Существует множество способов чтения (записи) данных из (в) Excel, каждый вправе выбирать тот, который ему наиболее удобен, я же в этой статье решил рассказать вам о своём пути работы с ним:

    Начинал я с Microsoft Excel ODBC Driver, использовал Microsoft Integration Services, писал макросы на VB. Так же использовал шаблоны с уже готовыми макросами и заставлял пользователя работать только с ними. Так же принимались попытки не использовать MS Excel при работе с базой, но они не нашли понимания.

    Попытки уйти от использования MS Excel

    К чему я пришёл:

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

    • Microsoft Reporting Services (только для выгрузки) Ссылка
    • Microsoft Office Interop Excel Ссылка
    • Microsoft Open XML SDK Ссылка
    • EPPlus Ссылка

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

    Microsoft Reporting Services

    Средство удобное, позволяет строить отчёты, используя множество различных источников данных и выгружать их в файлы различных форматов. Поддерживается выгрузка в Excel, интегрировано в MS Sharepoint, обладает неплохим редактором отчетов – MS Report Builder.

    Microsoft Office Interop Excel

    Позволяет работать с файлами *.xls и *.xlsx. В компании, где я работаю, используется для загрузки данных из файлов MS Excel 2003 в базу. Так же данное средство может извлекать данные из файлов с расширением *.xlsx (формат Microsoft Office Open XML).

    Microsoft Open XML SDK

    Применяется для выгрузки в Excel в формате *.xlsx (Microsoft Office Open XML). Для обеспечения быстродействия и поддержки возможности выгружать большие объёмы данных работа с Microsoft Office Open XML ведётся с помощью Simple API for XML (SAX) Ссылка.

    EPPlus


    EPPlus позволяет загружать и выгружать данные в формат *.xlsx. Его преимущество перед Open XML SDK – более дружественное API и меньшая трудоемкость. Он гораздо более удобен в работе нежели Open XML SDK. На данный момент он используется в компании в тех случаях, где не обязательно использовать Simple API for XML (SAX).

    Заключение

    Примеры кода на C# получились очень большими, поэтому я решил Заключение написать перед ними.
    В данной статье я хотел поделиться опытом работы с excel файлами, т.к. на мой взгляд, это не совсем тривиальная задача и довольно распространенная. Изначально я хотел описать в деталях все тонкости работы перечисленных выше инструментов, но в итоге решил, что примеры кода будут более полезны.
    Спасибо всем, кто смог прочитать всё, о чём я писал выше!

    Как сохранить картинки из листа Excel в картинки JPG

    Получили по почте файл-прайс с изображениями товара и эти картинки нужны в отдельной папки, а не на листе? Например для загрузки на сайт. Или для других целей. Подобной команды в Excel нет. Вставить картинки можно, а вот обратно к сожалению никак. Хорошо, если картинок штук 10, а если 100? А если таких книг много? И из всех надо сохранить картинки? Решил поделиться кодами, которые могут сохранять картинки из листа Excel в папку.
    Если не знаете как применять коды Visual Basic for Applications, то настоятельно рекомендую к прочтению эти статьи:
    Что такое макрос и где его искать?
    Что такое модуль? Какие бывают модули?
    Если хотите использовать один из нижеприведенных кодов, то следует создать стандартный модуль, скопировать нужные код и вставить его в этот модуль.

    Сохранение выделенной картинки в файл
    Все, что потребуется это выделить объект/картинку и выполнить нижеприведенный код:

    Sub Save_Sel_Object_As_Picture() Dim sName As String, oObj As Object, wsTmpSh As Worksheet If VarType(Selection) <> vbObject Then MsgBox «Выделенная область не является объектом!», vbCritical, «www.excel-vba.ru» Exit Sub End If Application.ScreenUpdating = False Application.DisplayAlerts = False Set oObj = Selection: oObj.Copy Set wsTmpSh = ThisWorkbook.Sheets.Add sName = ActiveWorkbook.FullName & «_» & ActiveSheet.Name & «_» & oObj.Name With wsTmpSh.ChartObjects.Add(0, 0, oObj.W .Parent.Delete End With wsTmpSh.Delete Application.ScreenUpdating = True Application.DisplayAlerts = True End Sub

    Если необходимо сохранить не только картинки, но и другие объекты, то необходимо в коде в строке: If oObj.Type = 13 Then изменить цифру. В коде комментариями указано, какая цифра какой тип обозначает. Так же можно изменить и расширение итогового файла с «.gif» на «.jpg». Достаточно найти расширение gif в коде(в двух местах) и заменить их на jpg. Если ни один объект не выделен, то ничего не произойдет.

    Сохранение всех картинок из всех выбранных файлов Excel в папку

    Sub Save_Object_As_Picture() Dim avFiles, li As Long, oObj As Object, wsSh As Worksheet, wsTmpSh As Worksheet Dim sImagesPath As String, sBookName As String, sName As String Dim wbAct As Workbook Dim IsForEachWbFolder As Boolean avFiles = Application.GetOpenFilename(«Excel Files(*.xls*),*.xls*», , «Выбрать файлы», , True) If VarType(avFiles) = vbBoolean Then Exit Sub IsForEachWbFolder = (MsgBox(«Сохранять картинки каждой книги в отдельную папку?», vbQuestion + vbYesNo, «www.excel-vba.ru») = vbYes) If Not IsForEachWbFolder Then sImagesPath = Environ(«userprofile») & «\desktop\images\» ‘» If Dir(sImagesPath, 16) = «» Then MkDir sImagesPath End If End If On Error Resume Next Application.ScreenUpdating = False Application.DisplayAlerts = False Set wsTmpSh = ThisWorkbook.Sheets.Add For li = LBound(avFiles) To UBound(avFiles) Set wbAct = Workbooks.Open(avFiles(li), False) ‘создаем папку для сохранения картинок If IsForEachWbFolder Then sImagesPath = wbAct.Path & «\» & wbAct.Name & «_images\» If Dir(sImagesPath, 16) = «» Then MkDir sImagesPath End If End If sBookName = wbAct.Name For Each wsSh In Sheets For Each oObj In wsSh.Shapes If oObj.Type = 13 Then ’13 — картинки ‘1 — автофигуры ‘3 — диаграммы oObj.Copy sName = ActiveWorkbook.Name & «_» & wsSh.Name & «_» & oObj.Name With wsTmpSh.ChartObjects.Add(0, 0, oObj.W End Sub

    Код позволяет выбрать одну или несколько книг Excel и сохраняет все картинки со всех листов выбранных книг. При запуске кода предлагается выбрать файлы Excel, картинки из которых надо сохранить. После этого появится запрос: «Сохранять картинки каждой книги в отдельную папку?»

    • Да — для каждой книги будет создана своя папка images, в которую будут сохранены картинки с именами вида: ИмяКниги_ИмяЛиста_ИмяФигуры
    • Нет — на рабочем столе пользователя будет создана папка images, в которую будут сохранены картинки с именами вида: ИмяКниги_ИмяЛиста_ИмяФигуры

    Если необходимо сохранить не только картинки, но и другие объекты, то необходимо в коде в строке: If oObj.Type = 13 Then изменить цифру. В коде комментариями указано, какая цифра какой тип обозначает. Так же можно изменить и расширение итогового файла с «.jpg» на «.gif». Достаточно найти расширение jpg в коде(в двух местах) и заменить их на gif. В данном коде я намеренно сделал сохранение в формат jpg, чтобы можно было сравнить с предыдущим кодом и увидеть как правильно менять расширение(формат) файла.

    Сохранить выделенный диапазон в картинку
    Данные код сохраняет выделенный на листе диапазон в картинку.

    Sub Range_to_Picture() Dim sName As String, wsTmpSh As Worksheet If TypeName(Selection) <> «Range» Then MsgBox «Выделенная область не является диапазоном!», vbCritical, «www.excel-vba.ru» Exit Sub End If Application.ScreenUpdating = False Application.DisplayAlerts = False With Selection .CopyPicture Set wsTmpSh = ThisWorkbook.Sheets.Add sName = ActiveWorkbook.FullName & «_» & ActiveSheet.Name & «_Range» With wsTmpSh.ChartObjects.Add(0, 0, .W .Parent.Delete End With End With wsTmpSh.Delete Application.ScreenUpdating = True Application.DisplayAlerts = True End Sub

    Просто выделяем диапазон, который необходимо сохранить как картинку и запускаем код. Картинка будет сохранена в папку с активной книгой.

    СОХРАНЯЕМ ВСЕ КАРТИНКИ С ЛИСТА В ПАПКУ С ЗАПИСЬЮ В ЯЧЕЙКИ ИМЕН КАРТИНОК

    Код ниже сохраняет все картинки на активном листе в папку images , которая создается в папке с книгой Excel, картинки из которой сохраняются. Если папки images нет — она будет создана. Картинкам даются имена «img1», «img2», «img3» и т.д. Картинки из ячеек удаляются, а на их место записывается имя картинки. Актуально, наверное, для тех, кто из таких файлов делает потом выгрузки в интернет-магазины и пр.

    Sub Save_Object_As_Picture() Dim li As Long, oObj As Shape, wsSh As Worksheet, wsTmpSh As Worksheet Dim sImagesPath As String, sName As String sImagesPath = ActiveWorkbook.Path & «\images\» ‘» If Dir(sImagesPath, 16) = «» Then MkDir sImagesPath End If On Error Resume Next Application.ScreenUpdating = False Application.DisplayAlerts = False Set wsSh = ActiveSheet Set wsTmpSh = ActiveWorkbook.Sheets.Add For Each oObj In wsSh.Shapes If oObj.Type = 13 Then li = li + 1 oObj.Copy sName = «img» & li With wsTmpSh.ChartObjects.Add(0, 0, oObj.W End Sub

    В коде все так же, как в кодах выше(можно сохранять другие объекты, можно изменить формат сохраняемых картинок). Только при этом в ячейку, в которой была картинка записывается имя, с которым эта картинка была сохранена в папку на компьютере. Сама картинка при этом удаляется. Если удалять не надо, то необходимо просто удалить строку:
    oObj.Delete ‘удаляем картинку с листа
    Если необходимо записать в ячейку не только имя картинки, но и полный путь(включая путь к папке и расширение картинки), то надо вместо строки:
    oObj.TopLeftCell.Value = sName
    записать такую:
    oObj.TopLeftCell.Value = sImagesPath & sName & «.jpg»

    Сохранить картинки с листа с именами картинок из ячеек
    Пожалуй, самый популярный код. Он сохраняет картинки из активного листа с именами, взятыми из ячеек, в которых эти картинки расположены. При этом можно указать, чтобы имена брались из той же строки, но другого столбца:

    Sub Save_Object_As_Picture_NamesFromCells() Dim li As Long, oObj As Shape, wsSh As Worksheet, wsTmpSh As Worksheet Dim sImagesPath As String, sName As String Dim lNamesCol As Long, s As String s = InputBox(«Укажите номер столбца с именами для картинок» & vbNewLine & _ «(0 — столбец в котором сама картинка)», «www.excel-vba.ru», «») If StrPtr(s) = 0 Then Exit Sub lNamesCol = Val(s) sImagesPath = ActiveWorkbook.Path & «\images\» ‘» If Dir(sImagesPath, 16) = «» Then MkDir sImagesPath End If ‘ On Error Resume Next Application.ScreenUpdating = False Application.DisplayAlerts = False Set wsSh = ActiveSheet Set wsTmpSh = ActiveWorkbook.Sheets.Add For Each oObj In wsSh.Shapes If oObj.Type = 13 Then oObj.Copy If lNamesCol = 0 Then sName = oObj.TopLeftCell.Value Else sName = wsSh.Cells(oObj.TopLeftCell.Row, lNamesCol).Value End If ‘если в ячейке были символы, запрещенные ‘для использования в качестве имен для файлов — удаляем sName = CheckName(sName) ‘если sName в результате пусто — даем имя unnamed_ с порядковым номером If sName = «» Then li = li + 1 sName = «unnamed_» & li End If With wsTmpSh.ChartObjects.Add(0, 0, oObj.W [:,\\,/. \*,\ ,\’,\|,»»»»]» s = objRegExp.Replace(sName, «») CheckName = s End Function

    Укажите номер столбца с именами для картинок — указывается порядковый номер столбца на листе, из которого брать имя для сохраняемой картинки. Например, сами картинки в столбце H, а имена для них записаны в столбце B. Надо указать 2. Тогда для картинки в ячейке H3 будет использовано имя, записанное в ячейке В3. Расширение для картинки указывать не надо(например — image1, image2, image_product_sell1 и т.п.).
    Если номер не указывать или указать 0 — то имя для картинок будет взято из тех ячеек, в которых находятся эти картинки.
    Так же проверяется корректность значений в ячейках, т.к. они могут содержать символы, недопустимые в именах файлов(слеши и пр.). В этом случаи эти символы будут удалены. И если после удаления этих символов значение будет пустым — имена картинкам будут даваться с префиксом «unnamed_» и порядковым номером таких картинок.

    Статья помогла? Поделись ссылкой с друзьями!

    Получить изображения из файла Excel, используя OLEDB

    У меня есть лист Excel с двумя столбцами, один номер, а второй столбец с рисунком. я хочу читать эти данные из c # с подключением oledb, я могу легко прочитать число, но картинки не содержатся во втором столбце, поэтому в c # я просто получаю первый столбец.

    Теперь, как я могу прочитать изображения? Я хочу извлечь номера и связанные изображения из этого листа Excel.

    3 ответа

    Боюсь, это невозможно.

    Изображения не живут в ячейках — вы можете поместить их поверх ячейки, и вы можете изменить их размер так, чтобы они выглядели так, как будто они находятся в ячейке, но они никоим образом не занимают эту ячейку.


    Вы можете манипулировать содержимым изображения рабочего листа, используя взаимодействие VBA и COM, но не OLEDB.

    Это старая тема, но я решил, что пока добавлю немного своего кода.

    В этом примере предполагается, что у вас есть приложение Windows, в которое вы поместили Picturebox, под названием «pictureBox1».

    Также предполагается, что вы добавили ссылку на Excel (Microsoft.Office.Interop.Excel).

    Картинки привязаны к вашей книге, а не к самим клеткам, как сказал Джей. Вы МОЖЕТЕ найти, где изображение должно идти довольно легко, используя TopLeftCell и BottomRightCell.

    Теперь вам нужно написать цикл, чтобы получить все изображения документа, но я оставлю это вам.

    Excel — Получение картинок из excel C#

    Приведенная функция получает полный путь к книге Excel с картинкой (имя листа с картинкой должно быть «Лист1») и возвращает объект 1С — Картинка.

    ИмяВременногоФайлаКартинки = КаталогВременныхФайлов() +»tempPict.gif»;

    // для открытия документа
    Док = Новый COMОбъект(«Excel.Application»);
    Док.DisplayAlerts = False;

    // для промежуточного хранения картинки
    Excel = Новый COMОбъект(«Excel.Application»);
    Excel.DisplayAlerts = False; //Закрытие не должно вызывать диалога сохранения

    Попытка
    Док.Workbooks.Open(ФайлXLS);
    Исключение
    Сообщить(«Не удалось открыть файл!»);
    Возврат Неопределено;
    КонецПопытки;

    //Извлечение картинки
    Если Док.Sheets(«Лист1»).Pictures.Count() > 0 Тогда

    //Ссылка на картинку
    Картинка = Док.Sheets(«Лист1»).Pictures(1);

    // промежуточная книга для хранения диаграммы — контейнера картинки
    Excel.Application.Workbooks.Add(1);
    ИмяЛистаXLS = Excel.ActiveSheet.Name;

    //Создание диаграммы, которая будет являться контейнером для картинки
    //Расположение новой диаграммы — как объект на созданном ранее новом листе, являющемся в данный момент активным
    //Размеры диаграммы слегка превышают размер картинки
    ДиаграммаXLS = Excel.ActiveSheet.ChartObjects().Add(0, 0, Картинка.Width * 1.01, Картинка.Height * 1.01);

    //Копирование картинки в буфер
    Картинка.Copy();

    //Заполняем диаграмму картинкой из буфера
    ДиаграммаXLS.Chart.Paste();

    //Сохраняем диаграмму во временном файле
    ДиаграммаXLS.Chart.Export(ИмяВременногоФайлаКартинки);

    //Загружаем картинку из временного файла в объект Картинка
    КартинкаОбъект = Новый Картинка(ИмяВременногоФайлаКартинки);

    //Удаляем временный файл
    Попытка
    УдалитьФайлы(ИмяВременногоФайлаКартинки);
    Исключение
    КонецПопытки;

    //Книгу, использовавшуюся для импорта картинок закрываем
    Попытка
    Excel.Application.Quit();
    Док.Application.Quit();
    Исключение
    КонецПопытки;

    ФайлXLS = «C:Книга2.xlsx»;
    КартинкаОбъект = ИзвлечьКартинкуИзXLS(ФайлXLS);

    Получение изображений из файла Excel с использованием OLEDB

    У меня есть лист Excel с двумя колонками, один ряд, а второй столбец имеет картину. я хочу, чтобы прочитать эти данные из C # с подключением к OLEDB, я могу прочитать номер легко, но фотографии не содержится во втором столбце, поэтому в C # я просто получить первый столбец.

    Теперь, как я могу читать изображения? я хочу, чтобы извлечь номера и связанные с ними изображения из этого первенствовать лист.

    Это старая тема, но я полагал, что я хотел бы добавить некоторые из моего кода до сих пор.

    В этом примере предполагается, что у вас есть приложение для Windows, которые вы разместили на PictureBox под названием «pictureBox1».

    Он также предполагает, что вы добавить ссылку на Excel (Microsoft.Office.Interop.Excel).

    Фотографии привязаны к вашей книге, а не часть клеток, как Джей сам себе упомянул. Вы можете найти, где изображение должно идти довольно легко с помощью TopLeftCell и BottomRightCell.

    Теперь вам нужно написать цикл тянуть все изображения нашего документа, но я оставлю это для вас.

    Вытащить Picture из Excel

    Один из вариантов вытаскивания картинки из экселя — через буфер обмена методом Copy (я уже скидывал недавно код). проблема в том, что такой способ нестабилен. (Иногда все картинки читаются нормально, иногда на какой-то (любой) эксель спотыкается на методе Copy с сообщением «Out of systen resources»и после этого ни одна картинка несчитывается в данной сессии экселя)

    какие еще варианты считывания есть

    эта зараза еще и по разному сохраняет картинки: то есть для некоторых по одной штуке, а для некоторых по 2.

    в общем на данный момент вижу только 1 выход, правда очень кривой:

    1. сначала сохраняем книгу как веб-страницу (и сразу вопрос: как это сделать программно) (Save As . web) да простят меня модераторы за второй вопрос в теме.
    2. открываем получившийся html файл, парсим его на предмет всех имеющихся тегов img и в них src с названием файла. это для того чтобы отфильтровать дублированные экселем картинки.
    3. берем картинку с именем из src с диска

    вот такой наикривейший способ. если кого озарит — велкам.

    пс повторю возникший вопрос: как сохранить программно книгу в виде веб страницы. SaveAs метод нашел. просто расширение html? и поймет?

    Цукерберг рекомендует:  Вакансии dr.cash
    Понравилась статья? Поделиться с друзьями:
    Все языки программирования для начинающих