Как вы можете разобрать файл Excel (.xls), хранящийся в varbinary в MS SQL 2005? - PullRequest
3 голосов
/ 17 сентября 2008

проблема

как лучше всего анализировать / получать доступ / извлекать данные "файла Excel", хранящиеся в виде двоичных данных в поле SQL 2005?

(поэтому все данные в конечном итоге могут быть сохранены в других полях других таблиц.)

1010 * фон *

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

мы пытались убедить наших клиентов, что пользователи сделают это ровно один раз, а затем настаивают на экспорте в БД! но клиент не может требовать дБ экспорта своих пользователей.

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

данный

  • стандартный файл excel (".xls") (собственный формат, не разделенный запятой или табуляцией)
  • файл хранится в необработанном виде в varbinary(max) поле SQL 2005
  • Данные файла Excel не обязательно могут быть «одинаковыми» между строками - то есть мы не можем просто предположить, что один столбец имеет одинаковый тип данных (например, могут быть заголовки строк, заголовки столбцов, пустые ячейки, разные » форматы ", ...)

требования

  • код полностью в SQL 2005 (хранимые процедуры, SSIS?)
  • иметь возможность доступа к значениям на любом листе (вкладке)
  • иметь возможность доступа к значениям в любой ячейке (данные формулы или разыменование не требуются)
  • нельзя считать, что значения ячеек "одинаковы" между строками, т. Е. Нельзя просто предполагать, что один столбец имеет одинаковый тип данных (например, могут быть заголовки строк, заголовки столбцов, пустые ячейки, формулы , разные "форматы", ...)

предпочтения

  • нет доступа к файловой системе (нет записи временных файлов .xls)
  • получение значений в определенном формате (например, фактическое значение даты вместо необработанного числа, например 39876)

Ответы [ 5 ]

3 голосов
/ 17 сентября 2008

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

У меня нет для вас проверенного решения, но я могу поделиться, как я бы впервые попробовал подобную проблему.

Моим первым подходом будет установка Excel на компьютере SqlServer и кодирование некоторых сборок для использования файла в ваших строках с использованием Excel API, а затем загрузка их на сервер Sql в качестве процедур сборки.

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

Но мой реальный совет - переосмыслить весь проект. Нет смысла читать табличные данные в двоичных файлах, хранящихся в ячейке строки таблицы в базе данных.

2 голосов
/ 17 сентября 2008

Это похоже на вопрос "Я бы не начал отсюда".

Ответ «установить Excel на сервер и начать кодирование» выглядит как единственный маршрут, но сначала стоит просто изучить альтернативные варианты: он будет болезненным, дорогим и трудоемким.

Я твердо чувствую, что мы смотрим на «требование», которое является ответом на неправильную проблему.

Какая бизнес-проблема создает эту потребность? Что это за руль? Попробуйте Five Whys как возможный способ изучения истории.

1 голос
/ 18 февраля 2009

Ну, вся установка кажется немного искаженной :-), как уже отмечали другие.

Если вы действительно не можете изменить требования и всю настройку: почему бы вам не изучить такие компоненты, как Aspose.Cells или Syncfusion XlsIO , нативные компоненты .NET, которые позволяют вам читать и интерпретировать собственные файлы Excel (XLS). Я довольно хорош в любом из этих двух случаев: вы должны иметь возможность читать двоичный Excel в MemoryStream, а затем передавать его в один из этих компонентов для чтения Excel, и все готово.

Так что с небольшой долей разработки .NET и SQL CLR, я думаю, это должно быть выполнимо - не уверен, что это лучший способ сделать это, но оно должно работать.

1 голос
/ 08 января 2009

Не могли бы вы записать varbinary в пункт назначения необработанных файлов? А затем используйте источник Excel в качестве входных данных для любого шага, следующего за вашими приоритетами.

Я не пробовал, но я бы попробовал.

1 голос
/ 17 сентября 2008

Звучит так, будто вы пытаетесь сохранить всю таблицу базы данных внутри электронной таблицы, а затем внутри поля одной таблицы. Не проще ли сначала сохранить данные в таблице базы данных, а затем, при необходимости, экспортировать их в XLS?

Не открывая экземпляр Excel и не разрешая Excel разрешать ссылки на листы, я не уверен, что это вообще выполнимо.

...