Frage

Wie zum Lesen / Schreiben von Daten in Excel 2007 in C ++?

War es hilfreich?

Lösung

Excel bietet COM-Schnittstelle, die Sie von Ihrem C ++ verwenden können Anwendung.

Ich habe Erfahrung mit Excel 2003 nur aber ich denke, für Excel 2007 wird es auch funktionieren.

Dies kann beispielsweise durchgeführt werden mit Import oder in der Art und Weise in diesem Artikel beschrieben wird: http://support.microsoft.com/kb/216686

Andere Tipps

Es gibt eine Python-Lösung (COM Versand verwenden) hier: http: //snippets.dzone .com / Beiträge / show / 2036

Es ist nicht C ++, aber die COM-Schnittstelle gleich, egal sein sollte, die Sprache, die Sie verwenden, nicht wahr?

Sie müßten nicht in dem Hafen alles. Nur __init__, set_range, get_value, set_value, save (oder save_as), close und quit. Sie könnten auch von Müll entsorgen müssen (wie Python verfügt über eine automatische gc).

Oder Sie könnten nur Port (und ändern) den folgenden Code (die ich nicht getestet, da ich mehr nicht excel haben - Sie sollten es wahrscheinlich überprüfen, indem Sie das Herunterladen Python und PythonWin):

from win32com.client import Dispatch
app = Dispatch("Excel.Application")
app.Visible = True # spooky - watch the app run on your desktop!
app.Workbooks.Open("C:\\book.xls")

range = app.ActiveWorkbook.Sheets(1).Range("a1") 
print 'The range was:'
print range.Value

range.Value = 42

print 'The value is now 42'  

app.ActiveWorkbook.Save()
app.ActiveWorkbook.SaveAs("C:\\excel2.xls")

app.ActiveWorkbook.Close()
app.Quit()

# any gc to do?

Excel 2007-Dateien sind ZIP-Dateien einfach. Versuchen Sie umbenennen .xlsx in .zip: Sie können Dateien und Ordner extrahieren. Mit einem Texteditor können Sie sehen, dass sie alle XML-Dateien.

So ist die Lösung:

  1. eine gemeinsame Klasse verwenden Ihre xlsx
  2. entpacken
  3. verwenden, um ein XML-Parser Sie Daten greifen
  4. Wenn Sie somethig geändert haben, wieder zip alle

Kein COM-Objekt erforderlich. Je nach Ihrer c ++ Compiler können Sie easyly die erforderlichen Quellen finden.

Es gibt drei wichtigsten Dinge, die Sie tun müssen.

1) Stellen Sie sicher, Voraussetzung Dateien installiert und lokalisierbar.

Blindingly offensichtlich, dass ich weiß, aber stellen Sie sicher, haben Sie eine geeignete Version von Excel installiert ist, so dass Sie die erforderlichen Microsoft-Bibliotheken finden kann (und deren Standorte). nämlich MSO.DLL, VBE6EXT.OLB und EXCEL.EXE

2), um die Microsoft-Bibliotheken einrichten.

In Ihrem C ++ Code, sagen wir, Sie mit einer einfachen Konsolenanwendung starten, sollten Sie die Importbibliotheken in jedem C enthalten ++ Anwendung, die Schnittstellen mit Excel. In meinem Beispiel verwende ich:

#import "C:\\Program Files (x86)\\Common Files\\microsoft shared\\OFFICE11\\MSO.DLL" \
rename( "RGB", "MSORGB" )

using namespace Office;  

#import "C:\\Program Files (x86)\\Common Files\\microsoft shared\\VBA\\VBA6\\VBE6EXT.OLB"  

using namespace VBIDE;  

#import "C:\\Program Files (x86)\\Microsoft Office\\OFFICE11\\EXCEL.EXE" \  
    rename( "DialogBox", "ExcelDialogBox" ) \  
    rename( "RGB", "ExcelRGB" ) \  
    rename( "CopyFile", "ExcelCopyFile" ) \  
    rename( "ReplaceText", "ExcelReplaceText" ) \  
    exclude( "IFont", "IPicture" ) no_dual_interfaces 

3) Verwenden Sie das Excel-Objektmodell in C ++ Code

Zum Beispiel eines Excel-Application-Objekt Zeiger zum Lesen / Schreiben von einer Excel-Arbeitsmappe deklarieren:

Excel::_ApplicationPtr pXL;  
pXL->Workbooks->Open( L"C:\\dump\\book.xls" );

Und für den Zugriff und manipuliert, um das Excel-Arbeitsblatt und die Zellen innerhalb es:

Excel::_WorksheetPtr pWksheet = pXL->ActiveSheet;  
Excel::RangePtr pRange = pWksheet->Cells;  
double value = pRange->Item[1][1];  
pRange->Item[1][1] = 5.4321; 

Und so weiter. Ich habe eine tiefer gehende Diskussion zu diesem folgenden Blog-Posting .

Eine Low-Tech-Art, wie ich auf ein paar Projekte verwendet habe, ist ein einfaches Skript / Makro / zu machen, was auch immer, dass ein externes Programm ausgeführt wird. Schreiben Sie, dass externes Programm in C ++. dass externes Programm bekommt seine Eingabe von lesen und seine Ausgabe in eine CSV-Datei (einfach Comma Separated Value Textdatei) zu schreiben. Excel kann leicht lesen und schreiben CSV-Dateien, so dass dieses Setup Sie alles, was, die Sie brauchen eine tragfähige Lösung herstellt.

Dies kann alles über die IDispatch-Schnittstelle erfolgen. Es kann wirklich blutig kompliziert schnell (Prost Microsoft), aber mindestens einmal haben Sie Ihren Kopf um Excel bekommen Du einfach, auch mit jeder anderen MS Anwendung findet Integration:)

Zum Glück gibt es jemanden über MS-Office , die den Prozess schön und einfach gemacht hat. Sobald ich durch diesen Code lesen würde ich begann meinen Kopf um zu bekommen, was excel tat und außerdem fand ich es wurde wirklich einfach, es zu erweitern andere Dinge zu tun, dass ich wollte. Denken Sie daran, dass Sie Befehle in Excel über die IDispatch-Schnittstelle senden. Diese Mittel müssen Sie darüber nachdenken, wie man etwas Figur machen würde, wie es programmatisch zu tun.

Edit: das Code-Guru Beispiel ist für Excel 2003, aber es sollte ziemlich einfach, es bis 2007 zu verlängern sein:)

Starten Sie hier mit der OpenXml Sdk . Laden Sie das SDK von hier . Das SDK verwendet .NET, so dass Sie C verwenden, müssen möglicherweise ++. NET

Es ist eine sehr lange Zeit, aber ich habe den Jet OLEDB zu bekommen bei Excel-Dateien verwendet. Sie könnten beginnen in dieser Richtung zu suchen.

Ich habe eine 3rd Party Komponente für diese in der Vergangenheit verwendet: OLE XlsFile von SM Software (nicht kostenlos, aber billig). Der Vorteil dieser Komponente über die Microsoft COM-Komponenten ist, dass Sie es verwenden können XLS-Dateien selbst zu schreiben, wenn Excel nicht installiert ist.

Es erlaubt Ihnen auch speadsheets oder Arbeitsmappen mit eingebetteten Formeln zu erstellen und die Formatierung, etwas nicht möglich, wenn Sie CSV-Dateien als Austauschformat verwenden.

Wenn Sie die beste Leistung benötigen, schreibt binäre Excel-Dateien ist der Weg zu gehen und sie zu schreiben ist nicht so schwierig, wie sie zu lesen. Das binäre Dateiformat ist relativ gut durch das OpenOffice.org-Projekt dokumentiert:

http://sc.openoffice.org/excelfileformat.pdf

und Microsoft hat auch die Dokumentation veröffentlicht:

http://download.microsoft.com/download/0/B/E/0BE8BDD7-E5E8-422A-ABFD-4342ED7AD886/Excel97-2007BinaryFileFormat (xls) Specification.xps

wird diese Lösung am besten funktionieren, wenn Sie viele Excel-Dateien zu schreiben, vor allem mit Daten und wenig Formatierung, und wenn Sie nicht möchten, die gleichzeitig die Dateien zu öffnen. Wenn Sie eine einzelne Excel-Datei schreiben danach, es zu öffnen, können Sie wahrscheinlich verwenden die propsed C ++ COM-Schnittstelle wie die anderen Plakate erklärt haben.

die COM-Schnittstelle verwenden wird teuer Out-of-Process-Anrufe erforderlich machen, es sei denn Sie eine Excel-COM-Addin schreiben. Falls Sie einen Addin, dass die Einfuhren Ihre Daten in das aktuelle Excel-Blatt schreiben, werden nach wie vor das Blatt füllt langsamer viel als eine Datei Dumping, sondern für eine einzelne Datei zu einer Zeit, kann dies je nach Benutzerszenario akzeptabel sein. Wenn Sie die COM-Schnittstelle verwenden entscheiden, minimiert die Anzahl der Anrufe in Excel. Verwenden der Methoden, mit denen ein Array von Werten einzufügen, wenn sie existieren, Set-Stil Eigenschaften durch Zeile und Spalte möglich ist und nicht pro Zelle.

Sie können die ODBC verwenden, um das Lesen und Schreiben von Daten aus einer Excel-Datei einfach und ohne Excel. Der Link: Hier

Die Verbindung, wie Daten schreiben odbc mit: Hier

Ich habe eine Reihe von C ++ Klassen, die von Codeproject vor dem Schreiben in XLS-Dateien zur Verfügung.

Es ist wirklich einfach zu bedienen, und kostenlos! Sie können finden sie hier .

Habe mir keine Zeit einzurichten.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top