Откройте один лист (одну вкладку) из огромного файла Excel в веб-браузере, используя c # asp.net / MVC - PullRequest
5 голосов
/ 27 февраля 2010

У меня есть огромные файлы Excel, которые я должен открыть в веб-браузере. Загрузка огромного файла занимает несколько минут. Можно ли одновременно открыть один лист (одну вкладку) из файла Excel, который содержит много листов? Я должен сделать это с помощью C # / asp.net MVC

Ответы [ 6 ]

1 голос
/ 23 марта 2010

Я предполагаю, что у вас есть книга Excel на сервере, и вы просто хотите отправить клиенту один лист. Затем пользователь редактирует лист? Будут ли они загружать его обратно?

Если предположить, что это всего лишь отчет, то почему бы не использовать OpenXML SDK для чтения рабочей книги, извлечения соответствующего листа и отправки его обратно клиенту? Это то, что предлагал @Jim в комментариях. Вы можете получить SDK здесь: Open XML SDK 2.0 для Microsoft Office . Однако я не уверен, что он будет работать со «старым» форматом Excel. Я предполагаю, что вам нужно сохранить рабочую книгу шаблона в новых форматах Office (xslx).

0 голосов
/ 13 октября 2015

Вы не можете «сказать» Excel, даже через Interop, что вам нужен только один лист. Существует множество объяснений, таких как формулы, ссылки и ссылки между ними, что делает задачу невозможной.

Если вы хотите только прочитать данные с листа, возможно, OLEDB Data Provider - лучший вариант для вас. Вот полный пример: Чтение файла Excel с использованием поставщика данных OLEDB

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

0 голосов
/ 02 марта 2010

Судя по вашему вопросу, вам кажется, что вы хотите улучшить время загрузки, используя (открывая) данные из одного рабочего листа вместо всей рабочей книги. Если это так, и вам нужны только данные, то получите доступ к книге с помощью ADO.NET с поставщиком OLEDB. (Вы можете использовать многопоточность для загрузки каждого рабочего листа, чтобы повысить производительность загрузки. Например, загрузка трех больших наборов данных в трех рабочих листах заняла 17 секунд. Загрузка каждого рабочего листа в отдельном потоке загружала одинаковые наборы данных за 5 секунд.)

Исходя из опыта, производительность начинает сильно снижаться с книгами объемом 40 МБ и более. Особенно, если рабочие тетради содержат много формул. Моя самая большая рабочая книга объемом 120 МБ загружается за несколько минут. Используя доступ OLEDB, я могу загружать, получать доступ и обрабатывать одни и те же данные за несколько секунд.

Если вы хотите, чтобы клиент открыл данные в Excel, соберите данные через ADO.NET/OLEDB, получите XML и преобразуйте в XMLSS, используя Xslt. Что легко и много документации и образцов.

Если вы просто хотите представить данные, соберите данные через ADO.NET/OLEDB, получите XML и преобразуйте в HTML, используя Xslt. Что легко и есть много документации и образцов.

Помните, что браузер и компьютер перестают отвечать на запросы с большими наборами данных. Я должен был установить верхний предел ограничения. Если предел был превышен, я уведомлял пользователя об усеченных результатах, в противном случае пользователь думал, что компьютер «заблокирован».

0 голосов
/ 28 февраля 2010

Посмотрите на этот вопрос в StackOverflow:

Создание файла Excel (.XLS и .XLSX) из C #

Я думаю, что вы можете открыть свою книгу на сервере (внутри приложения ASP.NET MVC) и обрабатывать только ту таблицу, которую вы хотите. Затем вы можете отправить такой лист пользователю, используя NPOI.

В следующем посте показано, как это сделать с помощью приложения ASP.NET MVC:

Создание электронных таблиц Excel .XLS и .XLSX в C #

0 голосов
/ 28 февраля 2010

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

0 голосов
/ 27 февраля 2010

Ваш вопрос немного неясен относительно того, где хранится электронная таблица.

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

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

Сказав это, я имел дело с некоторыми крупными электронными таблицами (20 МБ или около того), и у меня действительно не было проблем с обработкой всей электронной таблицы в целом.

Так, где узкое место??Ваша сеть или, возможно, машина, на которой вы работаете?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...