Zeile / Spalten in Excel schreiben



  • Hallo, wenn ich in Excel die Informationen ablege gehe ich Zelle für Zelle durch. Bei 200 Werten habe ich mittels Stoppwatchklasse eine Zeit von 2,3 sek bestimmt.
    Nun wollte ich fragen ob es irgendwie schneller auf Basis der Com Schnittstelle.Gibt es denn die Möglichkeit ganze Zeilen oder Spalten einzufügen? Oder sogar ganze Bereiche das benötige ich zwar nicht aber vielleicht kommt doch der Fall?

    Das ist mein Code:

    public: bool InsertRowInActiveSheet(int row, int column, List<String^>^ data)
    {
    	ws = (Excel::Worksheet^)excel->ActiveSheet;	//Aktiviertes Sheet laden falls Anwender das Sheet gewechselt hat
    
    	for each(String^ sdata in data)
    	{
    		try
    		{
    			ws->Cells[row,column++] = sdata;//Eine Information in die Zelle schreiben
    		}
    		catch(Exception^)
    		{
    			return false; // Es ist ein Fehler aufgetreten beim schreiben in das Excelsheet
    		}
    	}
    
    	return true;
    
    }
    


  • Du musst dem Excel mitteilen, dass Du ganz viel machen will.... wiess aber nicht mehr wie die Funktion heisst 😉 Villeicht "Visible = false"...

    Irgendwas gibt es da... dann zeigt er es nicht an und macht auch keine Berechnungen, bis Du alles abgeschlossen hast.



  • Danke für die Antwort 🙂 Bei 200 Werten hatte ich vorher 2,3 sek und nun sind es 0,2 😃 Aber ein Problem bei der Sache besteht und zwar blinkt dann Excel kurz auf. Eben weil es ja vorher ausgeblendet wird und dann wieder aktiviert. Wenn ich das Visible auf das Sheet anwende, bringt es leider keinen Performancegewinn mit sich.

    Microsoft::Office::Interop::Excel::Application^ excel;
    ...//irgendwas dazwischen 
    methode()
    {
    excel->Visible = false;
    ...
    excel->Visible = true
    }
    

    Nun die Sheet Variante

    ws->Visible = xlSheetVeryHidden
    


  • Nimm mal

    excel->ScreenUpdating = false;
    

    (gefunden dank "http://www.bing.com" 😉 )

    und

    Application.Calculation = xlCalculationManual
    


  • Danke für den Hinweis, ich werde es morgen mal Ausprobieren habe gerade meinen Lappi nicht am Mann. 👍 Ich werde berichten 🙄



  • Jochen Kalmbach schrieb:

    Nimm mal

    excel->ScreenUpdating = false;
    

    (gefunden dank "http://www.bing.com" 😉 )

    und

    Application.Calculation = xlCalculationManual
    

    Das ist genau die Antwort die ich gesucht habe. Vielen Dank nochmal!


Anmelden zum Antworten