Какой самый лучший и быстрый способ записи в файл Excel с использованием C #? - PullRequest
4 голосов
/ 16 мая 2009

Я пытаюсь записать в файл Excel с помощью OLEDB (без автоматизации). У меня есть около 500 строк данных, которые я получаю из какого-то другого приложения, а затем записываю их в файл Excel по очереди, используя запрос INSERT INTO ... Я уверен, что нет никаких задержек при чтении данных из другого приложения. Я проверил это. Общее время записи в файл Excel для 500 строк составляет около 3 минут. Это слишком много. Это определенно из-за операции записи файла.

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

http://support.microsoft.com/kb/306023 Эта ссылка показывает много методов, но не уверен, какой из них использовать.

Ответы [ 12 ]

7 голосов
/ 16 мая 2009

Если вы можете использовать COM в Excel, вы можете запросить напрямую из Excel через COM или создать массив данных и поместить его в диапазон, равный размеру вашего массива. Несмотря на то, что Excel не подходит для небольших COM-вызовов, он работает довольно хорошо с несколькими крупными COM-вызовами:)

DataSet ds = new DataSet();
          da.Fill(ds);
          int width = ds.Tables[0].Columns.Count;
          int height = ds.Tables[0].Rows.Count;
          object[,] retList = new object[height, width];
          for (int i = 0; i < height; i++)
          {
            DataRow r = ds.Tables[0].Rows[i];
            for (int j = 0; j < width; j++)
              retList[i, j] = r.ItemArray[j];
          }
          Excel.Range range = mWs.get_Range(destination, mWs.Cells[destination.Row + height - 1, destination.Column + width - 1]);
          range.set_Value(Missing.Value, retList);
          System.Runtime.InteropServices.Marshal.ReleaseComObject(range);
          range = null;

Это пример получения данных и вставки их в виде массива в Excel за один вызов COM

3 голосов
/ 16 мая 2009

В Excel уже есть все необходимое для чтения / записи данных в формате XML.

Иногда я использовал формат SpreadsheetML , и он работал хорошо для меня. С его помощью вы выписываете документ в формате xml и называете его с расширением .xls. Большая часть функциональности Excel доступна. Справочная документация Microsoft: здесь . Google для учебников на разных языках, таких как Rails , PHP . В книге Excel Hacks об этом тоже говорится.

2 голосов
/ 18 мая 2009

Мы используем SpreadsheetGear .

2 голосов
/ 16 мая 2009

Если это просто данные, импорт файла CSV может работать. Создайте файл в коде и используйте автоматизацию, чтобы Excel импортировал файл.

ОБНОВЛЕНИЕ: После написания этой статьи мне нравится @ предложение MicTech , о котором я не знал.

1 голос
/ 16 мая 2009

Вы ищете одноразовый дамп в Excel или чтобы оставаться на связи и передавать данные в Excel более одного раза?

Если вы хотите отправить данные в Excel более одного раза, вам нужно изучить создание RTD-сервера, я использовал их много раз, и они работают RTD-сервер

Если вы ищете один раз толчок в Excel, вам нужно использовать COM. Использование COM и C #

C # версии 4 имеет несколько приятных улучшений для управляемого COM, и вам больше не понадобятся основные сборки взаимодействия при работе с Excel. C # 4 еще не запущен, но вы можете скачать его бета-версию, если он вам подходит.

1 голос
/ 16 мая 2009

Я рекомендовал FlexCel библиотека, но это не бесплатно: (

Но если вам нужен формат Office Open XML, вы можете использовать http://excelpackage.codeplex.com/

0 голосов
/ 04 ноября 2009

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

0 голосов
/ 19 октября 2009

Мы используем клетки aspose. Это довольно просто в использовании, быстро, без видимых проблем.

http://www.aspose.com/categories/.net-components/aspose.cells-for-.net/default.aspx

0 голосов
/ 16 мая 2009

Эта библиотека бесплатна и довольно быстра для создания файлов xls, она также работает, если у вас не установлен MS Office. http://code.google.com/p/excellibrary/downloads/list

0 голосов
/ 16 мая 2009

Я с большим успехом использую библиотеку Aspose.Cells для записи файлов Excel. Хотя это далеко не дешево.

...