Можно ли загрузить файл Excel в память?

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

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

Моя идея состоит в том, чтобы предоставить предприятиям возможность загружать файл excel, а мое приложение ASP.Net извлекает информацию из столбцов и заполняет классы, а затем с помощью Entity Framework 4 magic я сохраню эту информацию одним махом.

Есть ли какие-то подводные камни, о которых я должен знать при этом? Это возможно? Это очень утомительный процесс на моем сервере (не испортит ли он мой веб-сайт)?

РЕДАКТИРОВАТЬ: Пока что мне кажется, что для анализа файлов XML мне нужно установить Office. Я не уверен, что Winhost.com это предлагает.

Другим решением было использование CSV-файла для получения информации. Насколько легко секретарь создаст файл CSV, помните, что, вероятно, именно она будет создавать файл в первую очередь. Легко ли это создать человеку с ограниченными возможностями компьютера?

Я полагаю, что синтаксический анализ CSV будет тривиальным, но я хочу сосредоточиться на опыте пользователей и не давать людям ругаться на моем веб-сайте за то, что они заставляют их чему-то учиться.

РЕДАКТИРОВАТЬ 2: Совершенно забыл упомянуть, что конечно я предоставлю им шаблон для использования, было бы совершенно глупо предполагать, что они будут следовать макету таблицы. . Так что не принимайте во внимание эту проблему. Я также знаю, что мне придется проверять каждый столбец, чтобы они не писали «lolgei» в поле «Цена» или что-то в этом роде.


person Sergio Tapia    schedule 25.06.2010    source источник


Ответы (8)


Несколько быстрых мыслей ....

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

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

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

Надеюсь это поможет..

Наслаждаться!

person Doug    schedule 25.06.2010

Я сделал нечто подобное. Дуг прав, автоматизация делопроизводства может быть немного сложной задачей, и в этом нет необходимости. Как насчет простых csv-файлов? Их легко загрузить, они поддаются синтаксическому анализу и могут быть легко проверены.

Секретаря, вероятно, можно было бы обучить создавать Excel-Sheet в правильном формате. Сохранить этот лист как CSV-файл - простая задача (Файл-> Сохранить как-> CSV).

person Tobias    schedule 25.06.2010
comment
Хотя все, что вы сказали, правда, я должен сделать процесс создания указанного списка продуктов как можно более простым для предприятий. Помните, что этот файл, вероятно, будет создавать секретарь. Знает ли она, что такое CSV? - person Sergio Tapia; 25.06.2010

FWIW, в прошлом я был очень впечатлен SpreadsheetGear. Это не сильно поможет с проверкой, которую вам нужно будет сделать, но вы можете найти это более простой способ работы с данными.

person D. Lambert    schedule 30.07.2010

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

person David    schedule 25.06.2010
comment
Я не думал о том, чтобы компания обновляла информацию о продукте, загружая полный список продуктов. Я учту это, но пока я разрешаю только отдельные страницы редактирования для каждого продукта, который они предлагают. - person Sergio Tapia; 25.06.2010

Могу я представить косую мысль? Как насчет создания надстройки для таблицы Excel, которую вы можете распространять среди своих клиентов? Он может обрабатывать всю необходимую аутентификацию и т. Д., А также одним нажатием кнопки отправлять информацию на ваш сервер ASP.NET (или, еще лучше, службу WCF, которую вы затем можете опубликовать и подписать). Конечно, на этом этапе вам не придется беспокоиться о переводе формата Excel в формат для чтения .NET - все это можно отформатировать по вашему желанию из внешнего интерфейса надстройки, будь то сериализованные объекты XML, csv, что бы ни.

Всего лишь мои 0,02 доллара ...

person code4life    schedule 25.06.2010
comment
Спасибо за вклад, но у меня НУЛЕВОЙ опыт программирования в Excel. Я просто знаю, как создать рамку для таблицы, и все. Я не хочу вкладываться в новую технологию из-за чего-то столь тривиального (в целом). - person Sergio Tapia; 25.06.2010

Первое, о чем следует беспокоиться, - это разнообразие презентаций, которые собираются предложить ваши пользователи. Вам, вероятно, следует дать им шаблон, но даже в этом случае пользователи очень творчески портят вещи.

НЕ используйте автоматизацию для чтения файла Excel. Он не поддерживается и однажды перестанет работать. Попросите пользователей загрузить файлы xlsx и использовать OpenXML SDK для извлечения данных.

person bmm6o    schedule 25.06.2010

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

person andyortlieb    schedule 25.06.2010

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

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

Помогите мне найти утечку в этом коде импорта Excel

Вместо этого я пошел с синтаксическим анализом csv.

person ScottE    schedule 25.06.2010
comment
Понятия не имею, о чем вы говорите. Вы говорите о том, чтобы делать то же самое, что и я. В чем смысл этого ответа? - person Sergio Tapia; 25.06.2010
comment
Прочтите ваш вопрос - вы не указали, что содержимое файла Excel сначала заполняет базу данных. извлекать информацию из столбцов и заполнять классы - person ScottE; 25.06.2010