2009-03-18 7 views
4

У меня есть большой объем данных для вставки в рабочий лист существующей книги Excel. Книга Excel будет содержать другие таблицы, содержащие вычисления и сводные таблицы. Данные могут иметь до 60 000 строк и более 30 столбцов. Это решение должно работать как для Excel 2003, так и для Excel 2007.Программно загружать CSV-файл в рабочий лист Excel (Delphi 7)

Использование OLE-объекта Excel происходит слишком медленно, поэтому мы пытаемся загрузить данные из файла CSV. Мы придумали метод загрузки данных, поместив данные в буфер обмена, а затем вставив их в рабочий лист. Я чувствую, что это довольно много. Есть ли другой способ программно загрузить CSV-файл в рабочий лист? Или, может быть, другое решение?


Обновление: Мы получили еще одну задачу, прежде чем мы сможем полностью расследовать ответы. Мы сможем вернуться к этому через пару недель. Я вернусь к обновлению, когда вернемся к этой задаче.

Спасибо за все ответы на сегодняшний день!

ответ

0

вы можете загрузить CSV в ListView или нно поставщик OLEDB, чтобы загрузить его на DBGrid, а затем экспортировать его в формат XLS файлов с помощью компонента TMxExport от Max компонентов:

Max Components

+0

К сожалению, это, кажется, переписать книгу Excel. У нас будет сводная таблица, а также другие формулы в существующем файле. – mreith

1

Любой шанс, что вы можете уронить требование для этого работать с Office 2003? Я бы рекомендовал Open XML Format SDK. Он позволяет связывать управляемые сборки кода с документами электронных таблиц, которые могут обрабатывать такие события, как «Открыть» или «Закрыть», и, кроме всего прочего, читать и записывать в ячейки документа. Кроме того, вы можете использовать его для управления XSLX-документами из приложения. На самом деле это довольно гладкий.

Поскольку это не сработает для вас, как насчет написания макроса, который тянет файл CSV при загрузке электронной таблицы?

+0

Требования для Office 2003 и выше. Это позволило бы решить ряд других вопросов, которые у нас есть. Макрос может быть возможностью; Я должен посмотреть, можем ли мы работать под уменьшенной степенью защиты от макросов. – mreith

0

Вы пытались связать файл csv непосредственно на листе.

Перейти к данным -> Импорт внешних данных -> Импорт данных изменить тип файла «Text Files»

Вы можете обновить таблицу, когда CSV это обновление.

Примечание: Я не делал это с объемом данных, которые вы указали, так YMMV

+0

Это то, что мы попробуем. Я думаю, что CSV должен присутствовать в книге. Я не уверен, что это то, что мы можем сделать, но это стоит посмотреть. – mreith

0

На самом деле есть способ, который довольно быстро, довольно старый тек (Nowdays), но это, вероятно, самый быстрый.

Это ADO или для более ранних версий DAO (обратите внимание, не ADO.NET)

Вы можете прочитать файл CSV с помощью ADO и турбореактивного двигателя, чтобы получить данные в набор записей ADO, то объект Excel Range имеет CopyFromRecordSet, который скопирует (очень быстро) из набора записей ADO (или DAO).

http://msdn.microsoft.com/en-us/library/aa165427(office.10).aspx

+0

Это то, что мы обязательно проверим. – mreith

2

XLSReadWrite является компонентом, который может читать и писать Excel файлов из Delphi. Это быстро и поддерживает Excel 2003 и 2007. Вы можете создавать новые файлы excel, а также открывать существующие и добавлять/изменять их.

Также вам не нужно иметь установленный Excel, чтобы использовать его.

См http://www.axolot.com/components/xlsrwii20.htm

+0

Это определенно то, что мы рассмотрим. Благодарю. – mreith

-1

Вы можете попробовать использовать значения, разделенные табуляцией вместо CSV - чем просто вставьте в Excel :)

+0

Теперь мы уже делаем что-то очень похожее. Кажется, что это немного, чтобы вставить текст в Excel из буфера обмена. Если нет других жизнеспособных решений, мы можем это сделать. – mreith

+0

Вопрос задает вопрос о CSV, поэтому значения, разделенные вкладкой, не имеют значения. Он также спрашивает об этом в коде, поэтому предложение вставить его из буфера обмена также бесполезно. Ваш ответ подобен тому, как кто-то спрашивает, как решить проблему со своим компьютером, чтобы купить Mac вместо этого. Это не имеет смысла или полезно для решения проблемы. –