Excel und OLE
-
Hallo,
steuere Excel an und übergebe aus einem StringGrid Daten.
Klappt alles wunderbar; nur bei der Spaltenbreite und Selektierung
der Tabelle bekomme ich Fehlermeldung "...falscher Variablentyp.."
Witzigerweise wird die Funktion aber jeweils in Excel korrekt umgesetzt...!?void __fastcall TForm21::frm21_btnExcelClick(TObject *Sender) {try { // Fehllerroutine Start Integer iRow,iCol,iSumme; AnsiString z1,z2,zFile; // Vars definieren Variant Excel,vSheet,vFont,vCell,vCol,vRange; // Vars definieren if(FileExists(zExcel)==false) { // Pfad falsch ShowMessage("MS Excel Pfadangabe nicht korrekt bzw. Programm nicht gefunden.\rBitte geben Sie den korrekten Pfad an.\r\r=> "+zExcel); // Info geben frm21_btnAuswahlClick(0); // und Auswahl ermöglichen return; // und raus } // ende if(FileExists z1="Statistik "+frm21_cbStatistik->Text; // Bezeichnung Arbeitsmappe zFile=Form1->PrgPfad+"Ablage\\excel_"+z1+".xls"; // Filename erzeugen Excel=CreateOleObject("Excel.Application"); // Excel OLE anmelden Excel.OlePropertySet("Visible",true); // Excel sichtbar machen Excel=Excel.OlePropertyGet("Workbooks"); // Zugriff auf die Workbooks Excel.OleFunction("Add"); // 1. Arbeitsblatt erstellen vSheet=Excel.OlePropertyGet("Item",1); // Zugriff auf das erste Worksheet vSheet=vSheet.OlePropertyGet("Worksheets"); // und vSheet.OlePropertyGet("Item",1).OlePropertySet("Name",z1.c_str()); // Dem Worksheet einen Namen geben vSheet=vSheet.OlePropertyGet("Item",1); // Zugriff auf das erste Worksheet iCol=frm21_grdStatistik->ColCount; // Anzahl Spalten iRow=frm21_grdStatistik->RowCount; // Anzahl Zeilen for (int i1=0;i1<iRow;i1++) { // alle Zeilen for (int i0=0;i0<iCol;i0++) { // alle Spalten z1=frm21_grdStatistik->Cells[i0][i1]; // Text auslesen vCell=vSheet.OlePropertyGet("Cells").OlePropertyGet("Item",i1+2,i0+2); // Zelle ermitteln vCell.OlePropertySet("Value", z1.c_str()); // Zelle beschreiben if(i1==0) { // ÜBERSCHRIFT vFont=vCell.OlePropertyGet("Font"); // Fontzugriff übergeben vFont.OlePropertySet("Name", WideString("Arial")); // Schriftname vFont.OlePropertySet("Size", 10); // Schriftgrösse vFont.OlePropertySet("Bold" ,true); // Fontstil vFont.OlePropertySet("Color",clBlue); // Farbe des Textes } // ende if(i1==0 } // ende for(int i0 } // ende for(int i1 z1="Summen"; z2=IntToStr(frm21_grdChart->Tag); vSheet.OlePropertyGet("Cells").OlePropertyGet("Item",iRow+3,2).OlePropertySet("Value", z1.c_str()); // Summenzeile 1. Spalte vSheet.OlePropertyGet("Cells").OlePropertyGet("Item",iRow+3,3).OlePropertySet("Value", z2.c_str()); // Summenzeile 2. Spalte vSheet.OlePropertyGet("Cells").OlePropertyGet("Item",iRow+3,4).OlePropertySet("Value", "100"); // Summenzeile 3. Spalte vCol=vSheet.OlePropertyGet("Columns","C"); // Spalte C vCol.OlePropertySet("HorizontalAlignment",alRight); // rechtsbündig ausrichten vCol=vSheet.OlePropertyGet("Columns","D"); // Spalte D vCol.OlePropertySet("HorizontalAlignment",alRight); // rechtsbündig ausrichten // Ab hier Abstürze mit Breite ??? vCol=vSheet.OlePropertyGet("Columns","B"); // Spalte B //vCol.OlePropertySet("ColumnWidth",300); //try { vCol.OlePropertySet("AutoFit",true); } catch(...) {} // und Breite auf Optimal // Ab hier Abstürze und Selektierung ??? //vRange=vSheet.OlePropertyGet("Range","B2:D"+IntToStr(iRow+2)); // Tabelle auswählen //try { vRange.OlePropertySet("Select",true); } catch(...) {} // und selektieren Excel=Unassigned; // und auflösen } // try ende catch(...) { // Fehlerroutine Step ShowMessage("Fehler -> TForm21::frm21_btnExcelClick()"); } // Fehler anzeigen }Die Zeilen der Abstürze sind am Emde; habe alles mögliche probiert, komme aber nicht weiter. Wie kann ich aus der Tabelle ein Diagramm erzeugen bzw. ein weiteres Arbeitsblatt erzeugen (da stürzt er mir auch immer ab...)
Danke für jeden Tipp
Grüsse Stefan
-
versuchs mal so:
vCol=vSheet.OlePropertyGet("Columns","B"); vCol.OlePropertySet("ColumnWidth",30); vCol.OleFunction("Autofit"); String test = "B2:D"+IntToStr(iRow+2); vRange=vSheet.OlePropertyGet("Range",test.c_str()); vRange.OleFunction("Select");ein einfacher Test im Excel ergab, dass die Spaltenbreite maximal 255 sein kann
-
Hallo, Linnea
Supertip! Vielen Dank...

Werde mich jetzt an die Diagramme wagen..Grüsse, Stefan
