Laden...

Excel öffnen, Speichern und schließen?

Erstellt von oracle79 vor 14 Jahren Letzter Beitrag vor 14 Jahren 14.989 Views
O
oracle79 Themenstarter:in
7 Beiträge seit 2009
vor 14 Jahren
Excel öffnen, Speichern und schließen?

Hallo Zusammen,

ich stehe jetzt schon seid einer laaaangen Zeit vor einem Problem.
Ich habe 2 Buttons, mit dem einen öffne ich ein Excel-Dokument unter C:\test\test.xls, mit dem anderen möchte ich das excel gespeichert und geschlossen wird. ENDE

Ich habe das ganze erst mit Prozessen gemacht allerdings lässt sich beim Abschiesen des Prozesses leider nichts Speichern 😃. Bin ziemlicher Anfänger was C# betrifft und verliere langsam die Lust da ich sowas einfaches einfach nicht hinbekomme. Mir wurde geraten es mit excel = new Microsoft.Office.Interop.Excel.ApplicationClass(); zu machen leider bekomme ich das auch nicht hin 😦. Kann mir bitte jemand helfen wie ich das umsetzen kann incl der einzubindenden Klassen etc.

Hoffe auf eure Hilfe.

Grüße

PS: Bekomme es auch nicht hin den Verweis Excel = Microsoft.Office.Interop.Excel; hinzuzufügen, da ich diesen unter COM nicht finde. Besser gesagt er schreibt mir Interop ist im Namespace Microsoft.Office nicht zu finden. Habe Visal C# 2008 Express! Habe nur die Microsoft Objekt Libery 12 hinzugefügt. (Office 2007)

T
708 Beiträge seit 2008
vor 14 Jahren

Hi oracle79,

dann bleib dabei dich an den Prozess zu hängen. So kannst du das Excel-Sheet schließen. Da es aber verändert wurde, erscheint der "Möchten Sie speichern"-Dialog, den du mit SendKey und der Taste "J" bestätigen kannst.

Sicherlich nicht die schönste und sicherste Variante, aber vielleicht reicht es ja schon.
Ansonsten kommst du nicht darum herum die Excel-Interops einzubinden. Wenn Excel auf der Entwicklungsmaschine installiert ist, sollte man diese auch hinzufügen können.

Versuch das mal unter ".Net" und nicht unter "COM". Dann findest du die Referenz auch 😃

Gruß
TriB

O
oracle79 Themenstarter:in
7 Beiträge seit 2009
vor 14 Jahren

Habe es endlich hinbekommen using Excel = Microsoft.Office.Interop.Excel; einzubinden ohne Fehler, lag daran, dass nicht alle Komponenten von Office installiert waren. Musst unter COM die Microsoft.Excel Libery 12 einbinden.

Mein nächstes Problem ist, hier:

this.Application.Workbooks.Open(@"C:\test\test.xls",missing,missing etc.....
hier kommt der Fehler, keine Definition für Application.

O
oracle79 Themenstarter:in
7 Beiträge seit 2009
vor 14 Jahren

Hab es hinbekommen:

Excel.Application excel = new Excel.ApplicationClass();
excel.Visible = true;

        //Excel-File öffnen  
        object m = System.Reflection.Missing.Value;  
        Excel.Workbook workbook = excel.Workbooks.Open(@"c:\test\test.xls", m, m, m, m, m, m, m, m, m, m, m, m, m, m);  

        // Das erste Arbeitsblatt referenzieren  
        Excel.Worksheet worksheet = (Excel.Worksheet)workbook.Worksheets[1];  

Jetzt fehlt noch speichern und schließen.

A
254 Beiträge seit 2007
vor 14 Jahren

Hi,

mach gerade zufällig auch mit Excel herum. Wie wär's damit :

public void SaveAndExit()
{
            m_workbook.SaveAs(m_ausgabe_datei, 
                                            Excel.XlFileFormat.xlWorkbookNormal, null,
                                            null, null, null, Excel.XlSaveAsAccessMode.xlShared,
                                            null, null, null, null,
                                            null);
            m_excel.Quit();
}
O
oracle79 Themenstarter:in
7 Beiträge seit 2009
vor 14 Jahren

Sieht gut aus hier mal mein Code, bekomme den Fehler

"Für das nicht statische Feld, die Methode oder die Eigenschaft "Microsoft.Office.Interop.Excel._Workbook.SaveAs(object, object, object, object, object, object, Microsoft.Office.Interop.Excel.XlSaveAsAccessMode, object, object, object, object, object)" ist ein Objektverweis erforderlich."

Hier mein Code:

    private void button3_Click(object sender, EventArgs e)  
    {  
        Excel.Application excel = new Excel.ApplicationClass();  
        excel.Visible = true;  

        //Excel-File öffnen  
        object m = System.Reflection.Missing.Value;  
        Excel.Workbook workbook = excel.Workbooks.Open(@"c:\test\test.xls", m, m, m, m, m, m, m, m, m, m, m, m, m, m);  

        // Das erste Arbeitsblatt referenzieren  
        Excel.Worksheet worksheet = (Excel.Worksheet)workbook.Worksheets[1];  

    }  

    private void button4_Click(object sender, EventArgs e)  
    {  

        Excel.Workbook.SaveAs("Aquamatic.xls",  
                            Excel.XlFileFormat.xlWorkbookNormal, null,  
                            null, null, null, Excel.XlSaveAsAccessMode.xlShared,  
                            null, null, null, null,  
                            null);  
     }  

Mit Button 3 möchte ich Excel öffnen und mit Button 4 Excel speichern und schließen!

N
750 Beiträge seit 2004
vor 14 Jahren

bitte die c# - tags verwenden 😉

Excel.Workbook workbook = excel.Workbooks.Open(@"c:\test\test.xls", m, m, m, m, m, m, m, m, m, m, m, m, m, m);

Excel.Workbook.SaveAs("Aquamatic.xls", Excel.XlFileFormat.xlWorkbookNormal, null, null, null, null, Excel.XlSaveAsAccessMode.xlShared, null, null, null, null, null);

die beiden stellen solltest du mal vergleichen.
(und dann hoffentlich den Unterschied erkennen, und damit auch deinen Fehler beheben...)

nils

?( wer suchet, der findet auch! :]

O
oracle79 Themenstarter:in
7 Beiträge seit 2009
vor 14 Jahren

Wenn ich es so schreibe:
Excel.Workbook workbook = excel.Workbooks.SaveAs(@"c:\test\test.xls",
Excel.XlFileFormat.xlWorkbookNormal, null,
null, null, null, Excel.XlSaveAsAccessMode.xlShared,
null, null, null, null,
null);

kommt excel ist im aktuellen Kontext nicht vorhanden, muss ich nicht das hier:

        Excel.Application excel = new Excel.ApplicationClass();  
        excel.Visible = true;  

irgendwo weiter oben einbinden? Sorry bin Anfänger und habe noch nicht sooo viel Ahnung, wäre nett wenn du mir meinen Fehler etwas genauer beschreiben könntest.


Update:

denke diese Richtung müsste richtig sein:

        workbook.SaveAs(@"c:\test\test.xls",  
        Excel.XlFileFormat.xlWorkbookNormal, null,  
        null, null, null, Excel.XlSaveAsAccessMode.xlShared,  
        null, null, null, null,  
        null);  

aber er schreibt mir workbook ist im Kontext nicht verfügbar 😦

O
oracle79 Themenstarter:in
7 Beiträge seit 2009
vor 14 Jahren

Hab es jetzt so gelöst, funktioniert:

        foreach (Excel.Workbook wkb in excel.Application.Workbooks)  
        {  
            wkb.Save();  
        }  
        excel.Quit();
A
254 Beiträge seit 2007
vor 14 Jahren

Hallo,

irgendwie scheint der Objekt bezug der verwendeten Methoden nicht ganz so klar zu sein.

Anbei der Arbeitsstand der Klasse in der ich versuche die Excel-Aufrufe zu kapseln.

public class XlWorkbook
    {
        protected Excel.ApplicationClass m_excel;
        protected Excel.Workbook m_workbook;

        protected string m_vorlage_datei;
        protected string m_ausgabe_datei;

        public XlWorkbook(string _vorlage_datei, string _ausgabe_datei)
        {
            m_excel = new Excel.ApplicationClass();
            m_workbook = m_excel.Workbooks.Add(Type.Missing);

            m_vorlage_datei = _vorlage_datei;
            m_ausgabe_datei = _ausgabe_datei;
        }

        public Excel.Worksheet AddWorksheet(string _name)
        {
            Excel.Worksheet ws = (Excel.Worksheet)m_workbook.Worksheets.Add(Type.Missing, 
                                                                            Type.Missing, 
                                                                            Type.Missing, 
                                                                            Type.Missing);

            ws.Name = _name;

            return ws;

        }
        public void SaveAndExit()
        {
            m_workbook.SaveAs(m_ausgabe_datei, Excel.XlFileFormat.xlWorkbookNormal, null,
                               null, null, null, Excel.XlSaveAsAccessMode.xlShared, null, null, null, null,
                               null);
            m_excel.Quit();
        }
    }