001
04.03.2004, 10:57 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft... (Operator)
|
hi, ich glaub du hast 2 möglichkeiten 1.) Du kannst excel über nen ODBC ansprechen. Ein Beispiel dafür findest du unter den downloads dieses Forum. Ist aber "Datenbanklike", das heisst du kannst immer nur einen kompletten record auf ne zeile ballern und nicht sagen schreibe in zelle xy eine 5 oder sowas. vorteil hierbei ist das das relativ einfach ist.
2) Damit hab ich mal ne weile rumgespielt. das überstieg einfach meinen horizont. Habs nicht wirklich verstanden war mehr ein gebastel und puzzel und ewiges google suchen bis ich das hinbekommen habe was ich wollte. Ich poste dir mal ein bisschen Quellcode damit du nen grundgerüst hast auf dem du aufbauen kannst... aber wie gesagt da kann ich ausnahmsweise mal nur empfehlen sich ein buch dafür zu kaufen anstatt sich ewig damit rumzuschlagen ohne ein plan davon zu haben...
C++: |
//die dinger hier muss du importieren. bei dem beispiel ist das für office 2000 wenn du eine andere version benutzt heissen die bibliotheken entsprechend anders (also bei office 97 oder so glaub ich z.b. mso8.dll usw...) #import <mso9.dll> no_namespace rename("DocumentProperties", "DocumentPropertiesXL") #import "C:\Programme\Gemeinsame Dateien\Microsoft Shared\VBA\VBA6\vbe6ext.olb" no_namespace #import <excel9.olb> rename("DialogBox", "DialogBoxXL") rename("RGB", "RBGXL") rename("DocumentProperties", "DocumentPropertiesXL") no_dual_interfaces
void dump_com_error(_com_error &e) { _tprintf(_T("Oops - hit an error!\n")); _tprintf(_T("\a\tCode = %08lx\n"), e.Error()); _tprintf(_T("\a\tCode meaning = %s\n"), e.ErrorMessage()); _bstr_t bstrSource(e.Source()); _bstr_t bstrDescription(e.Description()); _tprintf(_T("\a\tSource = %s\n"), (LPCTSTR) bstrSource); _tprintf(_T("\a\tDescription = %s\n"), (LPCTSTR) bstrDescription); }
struct StartOle { StartOle() { CoInitialize(NULL); } ~StartOle() { CoUninitialize(); } } _inst_StartOle;
using namespace Excel; _ApplicationPtr pXL; try { if (pXL.GetInterfacePtr() == NULL) pXL.CreateInstance(L"Excel.Application.9"); //check ob es schon laeuft
pXL->Visible = VARIANT_FALSE; // oder VARIANT_TRUE wenn man sehen will was der macht WorkbooksPtr pBooks; _WorkbookPtr pBook; WorksheetsPtr pSheets; _WorksheetPtr pSheet1,pSheet2,pSheet3;
pBooks= pXL->Workbooks; pBook = pBooks->Add((long)Excel::xlWorksheet);
pSheets = pBook->GetWorksheets(); pSheet3=pBook->ActiveSheet; pSheet3->Name= "Blattname3"; }
pXL->Range["Blattname3!B5]->Value= 4711; //usw. was auch immer du noch alles so machen willst...
pBook->SaveCopyAs(dir); pBook->Saved=true; pBook->Close(true); //damit der die aktuelle nicht speichert pXL->Quit();
// CoUninitialize(); } catch(_com_error &e){dump_com_error(e);}
|
so wie gesagt das ganze ist ziemlich heikel und übersteigt bei weiten meinen horizont als das ich dir dazu viel erklären könnte....viel spass beim puzzeln. ach so wenn du mal befehle brauchst am besten in excel als macro aufzeichen und sich dann angucken wie der den spass nennt. Dann kannst du "so du glück hast" das fast 1:1 in c übernehmen... -- ...fleißig wie zwei Weißbrote |