Selektierten Bereich in einem Excel-Arbeitsblatt mit OleAutomation auf Währung festlegen



  • Hallo,

    kann mir jemand helfen wie ich mit Ole das Cell-Format auf Währung setzen kann ? Bis "Select" läuft der Code ohne Fehler, aber das NumberFormat für Währung bekomme ich nicht zum Laufen.

    #include <vcl.h>
    #include <comobj.hpp>
    #pragma hdrstop
    
    #include "Unit1.h"
    //---------------------------------------------------------------------------
    #pragma package(smart_init)
    #pragma resource "*.dfm"
    
    const String sgMonthLong[] = {"N/A",
    							  "Januar","Februar","März","April","Mai","Juni",
    							  "Juli","August","September","Oktober","November","Dezember"};
    
    TForm1 *Form1;
    //---------------------------------------------------------------------------
    
    __fastcall TForm1::TForm1(TComponent* Owner)
    	: TForm(Owner)
    {
     SetBounds( 0, 0, 284, 324 );
     TBorderIcons tempBI = BorderIcons;
     tempBI >> biMaximize >> biMinimize;
     BorderIcons = tempBI;
     BorderStyle = bsSingle;
     Position    = poDesigned;
     FormStyle   = fsNormal;
    }
    //---------------------------------------------------------------------------
    
    void __fastcall TForm1::Button2Click(TObject *Sender)
    {
    	TColor Color1  = (TColor)0xeaf1fd;   // Ausgaben
    	TColor Color11 = (TColor)0xd6e4fc;   // Ausgaben 1
    	TColor Color2  = (TColor)0xecd2c4;   // Monat
    	TColor Color3  = (TColor)0xf8efeb;   // Beträge
    	TColor Color31 = (TColor)0xf2e1d9;   // Beträge 1
    
    	int iZeilenhöhe1  = 10;
    	int iZeilenhöhe2  = 30;     // Überschrift
    	int iZeilenhöhe3  = 10;     // Zellen
    	int iZeilenhöhe4  = 20;     // Überschrift Monate
    
    	int iFontSize1    =  8;     //
    	int iFontSize2    =  8;     // Überschrift Monate
    	int iFontSize3    =  8;     // Zellen
    
    	int iColumnWidth1 = 2.14;
    	int iColumnWidth2 = 15;
    	int iColumnWidth3 = 9;
    	int iColumnWidth4 = 9;
    
    	// Excel starten
    	MyEx = CreateOleObject( "Excel.Application" );
    	// Excel sichtbar machen
    	MyEx.OlePropertySet( "Visible", true );
    
    	// Zugriff auf die Workbooks
    	MyWB = MyEx.OlePropertyGet( "Workbooks" );
    	// Neues Workbook erstellen
    	MyWB.OleFunction("Add");
    
    	// Zugriff auf das erste Worksheet
    	MyWS = MyWB.OlePropertyGet( "Item", 1 );
    	MyWB = MyWS.OlePropertyGet( "Worksheets" );
    
    	// Dem Worksheet einen Namen geben
    	MyWB.OlePropertyGet( "Item", 1 ).OlePropertySet( "Name", "Vorlage" );
    
    	// Zugriff auf das erste Worksheet
    	MyWS = MyWB.OlePropertyGet( "Item", 1 );
    
    	MyWS.OlePropertyGet( "Cells" ).OlePropertyGet("Font").
    		OlePropertySet( "Name", WideString("Calibri") );                        // Font auswählen
    	MyWS.OlePropertyGet( "Cells" ).OlePropertyGet( "Item", 1, 1 ).
    		OlePropertyGet("Font").OlePropertySet( "Size", iFontSize1 );            // Font size
    	MyWS.OlePropertyGet( "Cells" ).OlePropertyGet( "Item", 1, 1 ).
    		OlePropertyGet("Font").OlePropertySet( "Bold" , true );                 // Font Style
    	MyWS.OlePropertyGet( "Cells" ).OlePropertyGet( "Rows", "1:24" ).
    		OlePropertySet("RowHeight", iZeilenhöhe3 );                             // Zeilenhöhe
    	MyWS.OlePropertyGet( "Cells" ).OlePropertyGet( "Rows", "3" ).
    		OlePropertySet("RowHeight", iZeilenhöhe2 );                             // Zeilenhöhe
    	MyWS.OlePropertyGet( "Cells" ).OlePropertyGet( "Rows", "4" ).
    		OlePropertySet("RowHeight", iZeilenhöhe4 );                             // Zeilenhöhe
    	MyWS.OlePropertyGet( "Cells" ).OlePropertyGet( "Rows", "3:4" ).
    		OlePropertySet("VerticalAlignment", -4108);                             // Text vertikal mittig ausrichten
    	MyWS.OlePropertyGet( "Cells" ).OlePropertyGet( "Item", 3, "A" ).
    		OlePropertySet( "Value" , "Kategorie" );
    	MyWS.OlePropertyGet( "Cells" ).OlePropertyGet( "Item", 3, "B" ).
    		OlePropertySet( "Value" , "Ausgaben" );
    
    	int row = 4;
    	int col;
    
    	// Überschrift Monat
    	for ( int i = 1; i <= 12; i++ )
    	   {
    		col = i + 1;
    
    		if ( col%2 != 0 )
    		  {
    		   MyWS.OlePropertyGet( "Cells" ).OlePropertyGet( "Item", row, col ).
    			   OlePropertyGet( "Interior" ).OlePropertySet( "Color", Color2 );
    		  }
    
    		MyWS.OlePropertyGet( "Cells" ).OlePropertyGet( "Item", row, col ).
    			OlePropertyGet( "Font").OlePropertySet( "Color" , clNavy );
    		MyWS.OlePropertyGet( "Cells" ).OlePropertyGet( "Item", row, col ).
    			OlePropertyGet( "Font").OlePropertySet( "Size", iFontSize1 );
    		MyWS.OlePropertyGet( "Cells" ).OlePropertyGet( "Item", row, col ).
    			OlePropertyGet( "Font").OlePropertySet( "Bold" , true );
    
    		MyWS.OlePropertyGet( "Cells" ).OlePropertyGet( "Item", row, col ).
    			OlePropertySet( "Value" , sgMonthLong[i] );
    
    		MyWS.OlePropertyGet( "Cells" ).OlePropertyGet( "Item", row, col ).
    			OlePropertySet( "HorizontalAlignment", -4108 );
    		MyWS.OlePropertyGet( "Cells" ).OlePropertyGet( "Item", row, col ).
    			OlePropertySet( "VerticalAlignment", -4108 );
    	   }
    
    	for ( int col = 3; col <= 13; col += 2 )
    	   {
    		for ( row = 5; row <= 12; row++ )
    		   {
    			MyWS.OlePropertyGet( "Cells" ).OlePropertyGet( "Item", row, col ).
    				OlePropertyGet( "Interior" ).OlePropertySet( "Color", Color3 );
    		   }
    	   }
    
    	MyWS.OlePropertyGet( "Cells" ).OlePropertyGet( "Rows", "5:12" ).
    		OlePropertyGet( "Font").OlePropertySet("Size", iFontSize3 );
    
    	MyWS.OlePropertyGet( "Range", "B5:N12" ).OleFunction( "Select" );
    
    	//MyWS.OlePropertySet( "NumberFormat", "€#,##0.00_);[Red](€#,##0.00)" );
    
    	MyWS.OlePropertySet( "NumberFormat", "-1.234,10 €" );
    
    	//	MyWS.OlePropertyGet("Cells").OlePropertyGet("Item", "B5:N12").OlePropertySet("NumberFormat", "#.###,## €" );
    }
    //---------------------------------------------------------------------------
    
    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
    	Close();
    }
    //---------------------------------------------------------------------------
    
    void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action)
    {
    	if ( !MyEx.IsEmpty() )
    	{
    
    		String sFile = "C:\\Temp\\Test Tabelle.xlsx";
    
            MyEx.OlePropertySet( "DisplayAlerts", false );
    		MyEx.OlePropertyGet( "Workbooks").OlePropertyGet( "Item" , 1 ).
    			OleProcedure( "SaveAs" , sFile );
            MyEx.OleFunction( "Quit" );
    		MyEx = Unassigned;                                                   
    	}
    }
    //---------------------------------------------------------------------------
    ```h
    #ifndef Unit1H
    #define Unit1H
    //---------------------------------------------------------------------------
    #include <System.Classes.hpp>
    #include <Vcl.Controls.hpp>
    #include <Vcl.StdCtrls.hpp>
    #include <Vcl.Forms.hpp>
    //---------------------------------------------------------------------------
    class TForm1 : public TForm
    {
    __published:	// Von der IDE verwaltete Komponenten
    	TButton *Button1;
    	TButton *Button2;
    	void __fastcall Button2Click(TObject *Sender);
    	void __fastcall Button1Click(TObject *Sender);
    	void __fastcall FormClose(TObject *Sender, TCloseAction &Action);
    
    private:	// Benutzer-Deklarationen
    	Variant MyEx;
    	Variant MyWB;
    	Variant MyWS;
    
    public:		// Benutzer-Deklarationen
    	__fastcall TForm1(TComponent* Owner);
    };
    //---------------------------------------------------------------------------
    extern PACKAGE TForm1 *Form1;
    //---------------------------------------------------------------------------
    #endif
    
    


  • Habs hinbekommen, Select ist nicht notwendig und WideString war der Knackpunkt.

    	MyWS.OlePropertyGet( "Range", "B5:N12" ).
    		OlePropertySet( "NumberFormat", WideString("#.###.##0,00 €") );
    
    

Log in to reply