Программно загрузить файл CSV в Excel Worksheet (Delphi 7) - PullRequest
4 голосов
/ 18 марта 2009

У меня есть большой объем данных для вставки в лист существующей книги Excel. В рабочей книге Excel будут другие рабочие таблицы, содержащие расчеты и сводные таблицы. Данные могут иметь до 60000 строк и более 30 столбцов. Это решение должно работать как для Excel 2003, так и для Excel 2007.

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

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

Ответы [ 6 ]

2 голосов
/ 18 марта 2009

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

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

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

1 голос
/ 18 марта 2009

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

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

0 голосов
/ 19 марта 2009

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

0 голосов
/ 18 марта 2009

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

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

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

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

0 голосов
/ 18 марта 2009

Вы пытались связать CSV-файл непосредственно с рабочим листом.

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

После этого можно обновить лист при обновлении csv.

ПРИМЕЧАНИЕ. Я не сделал этого с указанным вами объемом данных, поэтому YMMV

0 голосов
/ 18 марта 2009

вы можете загрузить csv в listview или использовать OLEDB-провайдера для загрузки его в DBGrid, а затем экспортировать его в формат файла xls, используя компонент TMxExport из Max Components:

Макс. Компоненты

...