2010-02-12 4 views
1

Я знаю, что есть много вопросов о том, как писать данные из набора данных или datatable to excel, но все они, кажется, берут новую чистую книгу excel. У меня есть специальный файл excel, содержащий несколько листов с большим количеством форматирования, формул и диаграммы. Мне просто нужно заложить данные над соответствующими частями некоторых листов и позволить превосходству справиться с остальными.Dataset/Datatable к файлу шаблона Excel .net

Так что мне нужен способ вставить данные в существующий файл excel в определенном диапазоне (который может варьироваться в зависимости от количества строк) на определенных листах. В настоящее время я использую COM-взаимодействие, чтобы написать все, что является кошмаром производительности и его нужно изменить. Итак, что было бы лучшим способом добиться этого?

Дополнительная информация: У нас есть простое приложение mvc, которое позволяет пользователю отправлять запрос на данные. Он запускает это консольное приложение в качестве отдельного процесса для получения данных и создания файла excel. Итак, сначала мы получаем данные, которые занимают 10-15 секунд, тогда мы записываем данные, чтобы преуспеть. Это фактическая запись значений в ячейку, которая, кажется, принимает все время. Являются ли формулы в файле excel влияющими на запись, я не знаю, но этого я и стараюсь избежать.

Обновление: Как выяснилось, формулы были основным помехами в скорости записи. Я установил свойство Calculation класса приложения Excel в XlCalculation.xlCalculationManual и теперь он работает намного быстрее! Это не правильный ответ на мой вопрос, но это то, что сработало.

Благодарим вас за shahkalpesh, кто это указал, и Cj!

Спасибо, Джефф

+0

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

+0

@shahkalpesh: Я не пишу формулы, просто данные, но да, писать, чтобы преуспеть в целом - это то, что медленно. Нет обновления экрана, так как мы отправляем его пользователю как электронное письмо после этого. Я добавил, что, хотя это поможет уточнить. Благодарю. –

+0

@Jeff: Я имею в виду, что иногда существуют сложные формулы и/или диаграммы (ы) в зависимости от нескольких значений, вводимых пользователем. И затем он вычисляет и обновляет пользовательский интерфейс рабочей книги excel, который требует времени. Это может быть проблемой в вашем случае? Чтобы решить некоторые проблемы, напишите код в компоненте или исполняемом файле на основе VB6 и позвольте ему выполнить работу с excel. – shahkalpesh

ответ

1

я испытал то же самое. COM Interop может быть больно ... Я не знаю всей вашей ситуации, но вы можете просто экспортировать datatable в XML. (Datatable.WriteXML) Затем используйте VBA для всасывания данных и анализа. Было бы чище использовать все .NET, но VBA быстро, вероятно, будет довольно быстрым.

Кроме того, клянусь, там была хорошая бесплатная библиотека, которая упростит работу в Excel для .NET. Я не знаю, какой тип производительности есть ... Еще один вариант - VSTO (VSTO Development Home), который в зависимости от того, что вы хотите сделать, также может быть хорошо подходит. Удачи!

Update: Здесь вы идете, это то, что я искал: File Helper

0

позволит вам вставить DataTable в существующую книгу, подправить формулы и форматирование надлежащим образом - не прибегая к COM Interop.

См. Таблицу DataTable в Excel с форматами и формулами образец на this page для примера ASP.NET с источником C# и VB.

Вы можете увидеть более живые образцы ASP.NET here и загрузить бесплатную пробную версию here, если вы хотите попробовать сами.

Отказ от ответственности: У меня есть SpreadsheetGear ООО

0

В VBA с помощью ADO вы будете использовать;

sh.Range("A2").CopyFromRecordset rs, 65536 

, который намного быстрее, чем через набор записей. Есть ли аналогичный метод VSTO?

Смежные вопросы