In Excel Datei schreiben
-
Es gibt schon möglichkeiten, dass das nicht erscheint, das Problem ist nur diese Möglickeit gibt es nicht wenn du Excel als DB Objekt benutzt! Dieses führende ' soll soviel bedeuten wie diese Zeile ist keine Zahl. Dazu müsstest du Excel nun auf eine andere Art und Weise automatisieren. Ich meine du hättest dich da mal in irgend eine Art eingelesen, denn ich hab dir zu verschiedenen automatisierungsarten ne Funktion zum fett schreiben. Aber wenn du sowas machen willst darfste nicht vergessen, du musst Excel als Objekt einbinden. Da kommste nicht drum herum. Ich glaube du hast dich in ein schema eingelesen, wozu diese Funktion passen könnte:
// macht übergebenen Bereich (Schriftart) FETT bool CExtendedExcel::Fett(CString VonZelle, CString BisZelle) { //LPCTSTR wird benötigt um Bereich zu holen LPCTSTR von = _T(VonZelle); LPCTSTR bis = _T(BisZelle); try { //Bereich holen xlRange = excel->GetRange(von,bis); //Für gewählten Bereich Schrift fett machen xlRange->Font->Bold = true; //Fett machen return TRUE; } catch(_com_error &ce) {//Fehlerbehandlung m_sLastError = ce.Description(); return FALSE; } }
-
Das mit dem führendem Komma ist kein Problem. Ich belasse es dabei.
Ich muss also Excel als Objekt einbinden? Wie mache ich das?
Edit:
http://www.a-m-i.de/tips/office/officeautomation.php#cppexample_Excel
Hier gibt es ja schon ein paar Funktionen. Ich nehme an das die Funktion Fett ebenfalls auf diesem Prinzip basiert.
Gibt es denn nicht eine Klasse wie die geurlte, die aber mehr Möglichkeiten (Formatierung, etc.) bietet? Das müsste es doch sicher geben...
-
Es gibt mehrere Möglichkeiten z.B. so:
#include "stdafx.h" #include <odbcinst.h> // glaub dieses Include brauchste gar nicht #include <afxdb.h> #import "C:\Programme\Microsoft Office\Office\MSO9.DLL" #import "C:\Programme\Gemeinsame Dateien\Microsoft Shared\VBA\VBA6\VBE6EXT.OLB" #import "C:\Programme\Microsoft Office\Office\EXCEL9.OLB" \
Am besten machste dir ne eigene Klasse wo du das rein machst. Die Header musst dann natürlich auch noch includen.
nach dem du das gemacht hast solltest du noch:rename("DialogBox", "ExcelDialogBox") \ rename("RGB", "ExcelRGB") \ no_dual_interfaces Excel::_ApplicationPtr excel; Excel::_WorkbookPtr workbook; Excel::_WorksheetPtr worksheet; Excel::FontPtr font; Excel::RangePtr xlRange; Excel::_ChartPtr xlChart;
Bei den PTR Objekten natürlich nur die die du auch brauchst. Jetzt solltest du noch dein ATL Objekt.
Du musst dein Objekt aber auch noch initialisieren und wenn du es nciht mehr braucht uninitialisieren
das machst du mitCoInitialize(NULL);
bzw
CoUnInitialize(NULL);
Wenn du das alles hast musste dein File öffnen, das mach ich mal so:
// öffnen der Exceldatei um sie zu bearbeiten bool CExtendedExcel::Open(bool visible, CString FileName) {// bool visible = anzeigen von Excel oder im Hintergrund arbeiten // CString Filename = welches File soll geöffnet werden LPCTSTR tmp = _T(FileName); try { // Initialisiere und überprüfen ob initialisiert HRESULT hr = excel.CreateInstance(L"Excel.Application"); if(FAILED(hr))//Fehler beim initialisieren { char msg[1024] = {0}; sprintf(msg, "E: Fehler beim initialisieren: %d", hr); // throw std::runtime_error(msg); // geht bei mir nicht } if (FileName.IsEmpty()) //Wenn kein FileName dann erstellen wir halt ein File // erstellen des Workbooks workbook = excel->Workbooks->Add(static_cast<long>(Excel::xlWorksheet)); else // Wenn ein File angegeben, dann öffnen workbook = excel->Workbooks->Open(tmp); worksheet = excel->ActiveSheet; // holen des aktiven Blattes if (visible) // soll Excel sichtbar sein? excel->Visible = TRUE; // Excel sichtbar } catch(_com_error &ce) { // Handle the error m_sLastError = ce.Description(); return FALSE; } return TRUE; }
-
wenn du sowas findest wäre das schön, wäre ich auch für einen guten Link dankbar. also zu dem AMI Prinzip geht das Fett drucken ähnlich aber nicht gleich nach dem Prinzip findet man auch einiges auf der MSDN Website
COleVariant covTrue((short)TRUE), covFalse((short)FALSE), covOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR); //Format A3:A8 as bold, vertical alignment = center. range = objSheet.GetRange(COleVariant("A3"), COleVariant("A8")); font = range.GetFont(); font.SetBold(covTrue);
-
Hab mal die Pfade angepasst. (verwende Office 97).
Habe folgende Includes#include <odbcinst.h> // glaub dieses Include brauchste gar nicht #include <afxdb.h> #import "C:\Program Files\Microsoft Office\Office\MSO97.DLL" #import "C:\Program Files\Common Files\Microsoft Shared\VBA\VBA6\VBE6EXT.OLB" // dieser include scheint die probleme hervorzurufen. // was muss hier stehen? (für office 97) #import "C:\Program Files\Microsoft Office\Office\Excel8.olb"
Problem ist, es kompiliert noch nicht. (errors)
Fehlt ein include? Oder wo liegt das Problem?
P.S. ist eine normale MFC-App mit nur den oben erwähnten Includes, sonst nix.
Der Compiler gibt das aus:
debug\mso97.tlh(863) : warning C4146: unary minus operator applied to unsigned type, result still unsigned debug\vbe6ext.tlh(218) : error C2039: '_CommandBarsPtr' : is not a member of 'Office' debug\vbe6ext.tlh(218) : error C2146: syntax error : missing ';' before identifier 'CommandBars' debug\vbe6ext.tlh(218) : error C2501: '_CommandBarsPtr' : missing storage
P.S Es gibt noch eine andere Möglichkeit das einzubinden. "Create class from type lib" (über den ClassWizard). So hat es funktioniert, aber eben nur so.
P.S.2 Die verschiedenen Office versionen (97, 2000,...) haben eine verschiedene Syntax. Stimmt das?
-
die Includes stimmen glaube ich schon so er meckert ja auch nicht an den Includes rum zeig mal ein wenig Source um die CommandBars, denn dascheint was faul zu sein.
-
Hi Hi
ich bin neu bei C++ und bräuchte genau das um was es hier am anfang ging Werte aus einem Std vektor in ein Excel Sheet schreiben
keine formatierung oder extrawünsche
leider gibt mir mein Visual Studio eine fehlermeldung nach der anderen die ich nicht verstehe wenn ich den Code den Polofreak gepostet hat versuche
Wäre super wenn mir jemand helfen könnte
Was braucht man denn für infos um mir zu helfen ? die Fehlermeldung ?
Fehler 1 error C1189: #error : Building MFC application with /MD[d] (CRT dll version) requires MFC shared dll version. Please #define _AFXDLL or do not use /MD[d
-
Google kennst Du aber?
Du hast nicht geschrieben welche VS Version Du hast.
Project Settings
General -> General -> Use MFC in a shared DLL
-
ja aber hat mir nicht geholfen die tante
möglicherweise ist mein google foo auch noch nicht gut genugVS 13 Pro
was bewirkt / bedeutet das was du beschrieben hast ?
Ein Beispielprogramm das in CSV Dateien schreibt wurde mir auch viel helfen
?
-
Es gibt in C++ die CRT (C/C++ Runtime). Diese liegt als statisch linkbare Version vor und als auch dynmisch linkbare DLL Version.
Die MFC (die Du auch verwendest) gibt es auch statisch linkbar oder dynamisch.
Nun gibt es eine einfache Einschränkung:
Wenn MFC dynamisch, dann bitte auch CRT dynamisch.
Wenn MFC statisch, dann bitte auch CRT statisch.Die Einstellungen finden sich unter
General -> Use of MFC
sowie unter
**C/C++ -> Code Gereration -> Runtime Library
**Das Tante Google Dir nicht geholfen hat bezweifle ich schwer.
Wenn ich einfach Deine Fehlermeldung kopiere (als Ganzes) und suche, erhalte ich sofort als zweiten Fund, eine entsprechende Anfrage bei stackoverfow.com. Die behandelt genau das.Wir sooft ist man hier eher eine Meta-Suchmaschine...
-
okay gebe ich recht mein fehler ...
Aber ich haben nichts passendes in google für mein eigentliches problem gefunden , ich möchte inhalt von Std vektor in eine CSV datei schreiben, sollte einfacher als excel sein ...
3 Std vektoren jeder eine Spalte in der csv dateibzw das bekomme ich hin aber das UTF format macht mir probleme
1,5 zeigt Excel dann in 1500 an ??
wie kann ich das denn korigieren ??