2009-03-18 4 views
4

Ich habe eine große Menge an Daten, die in ein Arbeitsblatt einer vorhandenen Excel-Arbeitsmappe eingefügt werden sollen. Die Excel-Arbeitsmappe enthält andere Arbeitsblätter mit Berechnungen und Pivot-Tabellen. Die Daten können bis zu 60.000 Zeilen und mehr als 30 Spalten enthalten. Diese Lösung muss für Excel 2003 und Excel 2007 funktionieren.Programmgesteuertes Laden der CSV-Datei in das Excel-Arbeitsblatt (Delphi 7)

Verwenden des Excel OLE-Objekts ist viel zu langsam, so dass wir versuchen, die Daten aus einer CSV-Datei zu laden. Wir haben eine Methode zum Laden der Daten entwickelt, indem wir die Daten in die Zwischenablage legen und sie dann in das Arbeitsblatt einfügen. Ich fühle, dass dies ein ziemlich klüger ist. Gibt es eine andere Möglichkeit, eine CSV-Datei programmgesteuert in ein Arbeitsblatt zu laden? Oder vielleicht eine andere Lösung insgesamt?


Update: Wir wurden mit einer anderen Aufgabe zugeschlagen, bevor wir die Antworten vollständig untersuchen konnten. Wir sollten in ein paar Wochen darauf zurückkommen können. Ich werde sicher sein, wieder zu aktualisieren, wenn wir zu dieser Aufgabe zurückkehren.

Vielen Dank für alle Antworten bis heute!

Antwort

0

Sie die csv in Listview laden oder usin OLE DB-Provider auf DBGrid zu laden, exportieren sie dann in xls-Dateiformat TMxExport Komponente von Max Komponenten:

Max Components

+0

Leider scheint dies die Excel-Arbeitsmappe zu überschreiben. Wir werden eine Pivot-Tabelle sowie andere Formeln in einer vorhandenen Datei haben. – mreith

1

Jede Chance, dass Sie die fallen kann Voraussetzung dafür, dass dies mit Office 2003 funktioniert? Ich hätte die Open XML Format SDK empfohlen. Damit können Sie Assemblys für verwalteten Code an Tabellenkalkulationsdokumente binden, die Ereignisse wie Öffnen oder Schließen verarbeiten und unter anderem Zellen im Dokument lesen und schreiben können. Alternativ können Sie XSLX-Dokumente aus einer Anwendung bearbeiten. Ziemlich glatt, eigentlich.

Da dies für Sie nicht funktioniert, wie wäre es mit einem Makro, das die CSV-Datei einliest, wenn die Tabelle geladen wird?

+0

Die Anforderungen gelten für Office 2003 und höher. Dies hätte eine Reihe anderer Probleme gelöst, die wir ebenfalls haben. Das Makro könnte eine Möglichkeit sein; Ich muss sehen, ob wir unter reduzierter Makrosicherheit laufen können. – mreith

0

Haben Sie versucht, die CSV-Datei direkt in das Arbeitsblatt zu verknüpfen.

Zum Daten -> Externe Daten importieren -> Daten importieren den Dateityp ändern zu ‚Textdateien‘

Anschließend können Sie das Arbeitsblatt aktualisieren, wenn die CSV-Update.

ANMERKUNG: Ich habe das nicht mit dem Datenvolumen getan Sie angegeben haben, so YMMV

+0

Dies ist etwas, was wir versuchen werden. Ich denke, dass die CSV mit dem Arbeitsbuch vorhanden sein müsste. Ich bin mir nicht sicher, ob das etwas ist, was wir tun können, aber es lohnt sich, es genauer zu betrachten. – mreith

0

Eigentlich gibt es eine Möglichkeit, die ziemlich schnell, ziemlich alt tech (nowdays), aber ist wahrscheinlich die schnellste.

Es ist ADO oder für frühere Versionen DAO (Anmerkung nicht ADO.NET)

Sie eine CSV-Datei mit ADO und die Jet-Engine lesen können die Daten in ein ADO-Cord zu erhalten, dann eine Excel-Range-Objekt hat CopyFromRecordSet-Methode, die (sehr schnell) aus dem ADO-Recordset (oder DAO-Recordset) kopiert.

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

+0

Das werden wir definitiv prüfen. – mreith

2

XLSReadWrite ist eine Komponente, und schreiben Excel-Dateien von Delphi lesen kann. Es ist schnell und es hat Unterstützung für Excel 2003 und 2007. Sie können neue Excel-Dateien erstellen sowie bestehende öffnen und hinzufügen/ändern.

Sie müssen auch Excel nicht installiert haben, um es verwenden zu können.

Siehe http://www.axolot.com/components/xlsrwii20.htm

+0

Dies ist definitiv etwas, das wir untersuchen werden. Vielen Dank. – mreith

-1

Sie können versuchen, Tab Separated Values ​​verwenden anstelle von CSV -, als Sie diese einfach in Excel einfügen :)

+0

Wir machen jetzt schon etwas sehr ähnliches. Es scheint ein bisschen ein Klotz zu sein, um Text aus der Zwischenablage in Excel einzufügen. Wenn es keine anderen realisierbaren Entscheidungen gibt, können wir dies tun. – mreith

+0

Die Frage fragt nach CSV, also Tab-getrennte Werte ist irrelevant. Es fragt auch nach Code im Code, so dass ein Vorschlag, es aus der Zwischenablage einzufügen, ebenfalls nutzlos ist. Ihre Antwort ist so, als würde man jemandem sagen, der fragt, wie man ein Problem mit seinem PC löst, um stattdessen einen Mac zu kaufen. Es ist nicht sinnvoll oder nützlich bei der Lösung des vorliegenden Problems. –

Verwandte Themen