Laden...

[gelöst]Excel Zeile kopieren, und in anderes Sheet einfügen

Erstellt von Edzio vor 10 Jahren Letzter Beitrag vor 10 Jahren 5.995 Views
E
Edzio Themenstarter:in
68 Beiträge seit 2013
vor 10 Jahren
[gelöst]Excel Zeile kopieren, und in anderes Sheet einfügen

Hallo zusammen,

ich komm einfach nicht weiter, laut google und anderen Suchmaschinen, kann man in einer Exceldatei
eine Zeile ganz normal kopieren mit .Copy()
und in eine andere Exceldatei mit .Paste Speciel(...) einfügen,
das habe ich versucht, aber es geht nicht.

Führe ich den code bis zur "einfügen Methode" aus, habe ich die kopierte Zeile in der Zwischenablage, und kann die auch ins Excel kopieren.
Das mit dem SpecialPaste() geht aber nicht, da bringt er den Fehler, welchen ich nicht verstehe (siehe Anhang).

Kann mir hier jemand weiterhelfen?

Danke.

Gruß Edzio

hier noch die beiden Funktionen,
in der ersten excel_konstrukteur_abhaken() rufe ich die eine Excelliste auf, kopiere die ausgezählte Zeile und rufe die zweite Funktion excel_kopier_archive() auf, in der ich die andere Excelliste aufrufe und die kopierte Zeile
an das Ende einfügen will.

public void excel_konstrukteur_abhaken(object konstrukteur_projektnummer_abhaken)
        {
           

            Microsoft.Office.Interop.Excel.Application excel_konstrukteur_abhaken_xlapp = new Microsoft.Office.Interop.Excel.Application();
            excel_konstrukteur_abhaken_xlapp.Visible = false;
            Workbook excel_konstrukteur_abhaken_wb;
            object missing = System.Reflection.Missing.Value;

            try
            {
                zeile = 5;

                System.Threading.Thread.Sleep(300); //Kurze Wartetimer

                excel_konstrukteur_abhaken_wb = excel_konstrukteur_abhaken_xlapp.Workbooks.Open(
                                            verbindung_zu_definitionen.getPfad(),
                                            ExcelKonstanten.UpdateLinks.DontUpdate,
                                            ExcelKonstanten.ReadWrite,
                                            ExcelKonstanten.Format.Nothing,
                                            "", // Passwort
                                            "", // WriteResPasswort
                                            ExcelKonstanten.IgnoreReadOnlyRecommended,
                                            Microsoft.Office.Interop.Excel.XlPlatform.xlWindows,
                                            "", // Trennzeichen
                                            ExcelKonstanten.Editable,
                                            ExcelKonstanten.Notify,
                                            ExcelKonstanten.Converter.Default,
                                            ExcelKonstanten.DontAddToMru,
                                            ExcelKonstanten.Local,
                                            ExcelKonstanten.CorruptLoad.NormalLoad
                                          );

                // Arbeitsblätter lesen
                Sheets sheets = excel_konstrukteur_abhaken_wb.Worksheets;
                // ein Arbeitsblatt auswählen…
                Worksheet excel_konstrukteur_abhaken_ws = (Worksheet)sheets.get_Item("CM");

                //Projektnummer suchen
                do
                {
                    zeile = zeile + 1;
                    if (excel_konstrukteur_abhaken_ws.Cells[zeile, spalte_excel_Projektnummer].Value.ToString() == "")
                    {
                        break;                                                      
                    }
                } while (excel_konstrukteur_abhaken_ws.Cells[zeile, spalte_excel_Projektnummer].Value.ToString() != konstrukteur_projektnummer_abhaken.ToString());

                //Konstrukteur abhaken im Excel
                excel_konstrukteur_abhaken_xlapp.Cells[zeile, spalte_excel_erledigt] = "x";        
//Zeile kopieren und Archivfunktion aufrufen
                excel_konstrukteur_abhaken_xlapp.Rows[zeile].Copy();
                excel_kopier_archive();

                excel_konstrukteur_abhaken_xlapp.Rows[zeile].Delete();
                Clipboard.Clear();  //Zwischenablage leeren

                excel_konstrukteur_abhaken_wb.Close(true, missing, false);        //Workbook schließen & speichern
                excel_konstrukteur_abhaken_xlapp.Quit();                          //Excel beenden
                System.Threading.Thread.Sleep(300);                       		  //Kurze Wartetimer


            }
            catch (Exception exc)
            {
                DialogResult AbfrageExcel = MessageBox.Show("Fehler beim Schreiben!\n\n" + exc + "\n\n" +
                                                            "(Sollte der Fehler häufiger vorkommen, wenden Sie sich an\n...)", "Löschen fehlgeschlagen!!",
                                                            MessageBoxButtons.OK,
                                                            MessageBoxIcon.Error);
                excel_konstrukteur_abhaken_xlapp.Quit();                         //Excel beenden

            }

            dgvclear();                                    //DGV aktualisieren
            dgv_fuellen();
            MessageBox.Show("Projekt abgehakt!", "Projekt", MessageBoxButtons.OK, MessageBoxIcon.Information);
        }//Ende Excel Konstrukteur abhaken


        //Abgehaktes Projekt in Archive liste_archive.xlsx
        public void excel_kopier_archive()
        {
            Microsoft.Office.Interop.Excel.Application excel_kopier_archive_xlapp = new Microsoft.Office.Interop.Excel.Application();
            excel_kopier_archive_xlapp.Visible = false;
            Workbook excel_kopier_archive_wb;
            object missing = System.Reflection.Missing.Value;

            try
            {
                zeile = 5;

                System.Threading.Thread.Sleep(300); //Kurze Wartetimer

                excel_kopier_archive_wb = excel_kopier_archive_xlapp.Workbooks.Open(
                                            verbindung_zu_definitionen.getPfad_Archive(),
                                            ExcelKonstanten.UpdateLinks.DontUpdate,
                                            ExcelKonstanten.ReadWrite,
                                            ExcelKonstanten.Format.Nothing,
                                            "", // Passwort
                                            "", // WriteResPasswort
                                            ExcelKonstanten.IgnoreReadOnlyRecommended,
                                            Microsoft.Office.Interop.Excel.XlPlatform.xlWindows,
                                            "", // Trennzeichen
                                            ExcelKonstanten.Editable,
                                            ExcelKonstanten.Notify,
                                            ExcelKonstanten.Converter.Default,
                                            ExcelKonstanten.DontAddToMru,
                                            ExcelKonstanten.Local,
                                            ExcelKonstanten.CorruptLoad.NormalLoad
                                          );

                // Arbeitsblätter lesen
                Sheets sheets = excel_kopier_archive_wb.Worksheets;
                // ein Arbeitsblatt auswählen…
                Worksheet excel_kopier_archive_ws = (Worksheet)sheets.get_Item("CM");

                //Leer Zeile suchen
                do
                {
                    zeile = zeile + 1;

                } while (excel_kopier_archive_ws.Cells[zeile, spalte_excel_Projektnummer].Value != null);

                //einfügen der ausgeschnittenen Zeile
               
                excel_kopier_archive_xlapp.Rows[zeile].PasteSpecial(XlPasteType.xlPasteAll, XlPasteSpecialOperation.xlPasteSpecialOperationNone, false, false);

                excel_kopier_archive_wb.Close(true, missing, false);        //Workbook schließen & speichern
                excel_kopier_archive_xlapp.Quit();                          //Excel beenden
                System.Threading.Thread.Sleep(300);                       		  //Kurze Wartetimer


            }
            catch (Exception exc)
            {
                DialogResult AbfrageExcel = MessageBox.Show("Fehler beim einfügen ins Archive!\n\n" + exc + "\n\n" +
                                                            "(Sollte der Fehler häufiger vorkommen, wenden Sie sich an\n...)", "Archivieren fehlgeschlagen!!",
                                                            MessageBoxButtons.OK,
                                                            MessageBoxIcon.Error);
                excel_kopier_archive_xlapp.Quit();                         //Excel beenden

            }
        }
2.207 Beiträge seit 2011
vor 10 Jahren

Das mit dem SpecialPaste() geht aber nicht, da bringt er irgendeinen Fehler.

Hallo Edzio,

du postest uns heir deinen kompletten Quellcode, sagst er bringt "irgendeinen Fehler" und möchstest Hilfe. Gerne helfen wir dir, aber dann bring uns doch bitte mehr Informationen, aussagekräftige Fehlermeldungen und am besten nur den Codeteil, der wirklich Probleme macht.

[Hinweis] Wie poste ich richtig? Punkt 1.1, 4 und 5

Gruss

Coffeebean

1.029 Beiträge seit 2010
vor 10 Jahren

Hi,

Fehlermeldung ist zwar da - aber dein Code liest sich in der Menge miserabel.

So wie sich das auf dem Smartphone liest (kann mich täuschen) - rufst du zu zuerst:
Copy (kopiert die Range ins Clipboard?)
Clipboard.Clear (löscht den Inhalt vom Clipboard)
PasteSpecial (fügt Inhalt des Clipboards? (leer!) ein)

Hat diese Vorgehensweise einen (tieferen) Sinn?

LG

PS:
Im Zweifelsfall: Makrorekorder auskramen, aufzeichnen, machen, nachbauen.

E
Edzio Themenstarter:in
68 Beiträge seit 2013
vor 10 Jahren

Hi Taipi,

nein nach dem kopieren rufe ich meine Funktion
(excel_kopier_archive();) auf, in der ich das andere ExcelSheet aufmache und dort dann den Inhalt reinkopieren will, nach der Funktion lösche ich es erst wieder.
Wenn ich Step by Step in die Funktion reingehe, ist der Inhalt auch im Speicher und ich kann ihn manull irgenwo reinkopieren mit STRG+V, aber mit dem Code kommt diese Fehlermeldung...

Das habe ich auch schon versucht, mit dem Makroaufzeichnen, aber ohne Erfolg.

Gruß

E
Edzio Themenstarter:in
68 Beiträge seit 2013
vor 10 Jahren

Hallo nochmal,

ich habe weiter rumprobiert,
und habe es nun soweit geschafft, dass ich in der ersten Exceldatei meine komplette Zeile markieren kann,
und diese dann komplett in die zweite Exceldatei einfügen kann.

Nun habe ich aber das Problem mit der Meldung:
"Die Daten in der Zwischenablage sind in Größe und Form mit dem markierten Bereich nicht identisch.
Sollen die Daten trotzdem eingefügt werden?"

Kann ich die autmatisch mit ok bestätigen, bzw. wie kann ich Größe und Form mitkopieren und einfügen?

Hier noch die Schnipsel von meiner Kopier/Einfügenfunktion:

       //Konstrukteur Abhaken Funktion
        public void excel_konstrukteur_abhaken(object konstrukteur_projektnummer_abhaken)
        {
           

            //Excel 1 aufrufen Zeile suchen und kopieren.

//--------------------------------------
                Range ran1 = (Range)excel_konstrukteur_abhaken_ws.Rows[zeile];
                ran1.Select();
                ran1.Copy(Type.Missing);

                excel_kopier_archiv();
//--------------------------------------

			//Excel 1 beenden und Zwischenablage leeren

        }//Ende Excel Konstrukteur abhaken

		
		

        //Abgehaktes Projekt in Archive liste_archiv.xlsx
        public void excel_kopier_archiv()
        {
            //Excel 2 aufrufen Zeile suchen und einfügen.
//--------------------------------------
                Range ran = (Range)excel_kopier_archive_ws.Rows[zeile];
                ran.Select();
                excel_kopier_archive_ws.Paste(ran);      //Meldung wegbekommen Rest geht
//--------------------------------------

			//Excel 2 beenden

        }
E
Edzio Themenstarter:in
68 Beiträge seit 2013
vor 10 Jahren

Hallo zusammen,

mittlerweile habe ich eine funktionierende Lösung gefunden:


       //Konstrukteur Abhaken Funktion
        public void excel_konstrukteur_abhaken(object konstrukteur_projektnummer_abhaken)
        {


            //Excel 1 aufrufen Zeile suchen und kopieren.

//--------------------------------------
                Range ran1 = (Range)excel_konstrukteur_abhaken_ws.Rows[zeile];
                ran1.Select();
                ran1.Copy(Missing.Value);

                excel_kopier_archiv();	//Einfügenfunktion aufrufen
//--------------------------------------

            //Excel 1 beenden und Zwischenablage leeren

        }//Ende Excel Konstrukteur abhaken




        //Abgehaktes Projekt in Archive liste_archiv.xlsx
        public void excel_kopier_archiv()
        {
            //Excel 2 aufrufen Zeile suchen und einfügen.
//--------------------------------------
               Range ran = (Range)excel_kopier_archive_ws.Cells[archive_zeile, 1]; 
			   ran.PasteSpecial(XlPasteType.xlPasteValues,
								XlPasteSpecialOperation.xlPasteSpecialOperationNone,
								Missing.Value,
								Missing.Value);
//--------------------------------------

            //Excel 2 beenden

        }

Bei der Einfügenmethode war es wichtig nur die erste Zelle in der gewünschten Zeile zu wählen,
nicht den Bereich.

Gruß Edzio