Exceldatei erstellen als Querformat

domeemod

Grünschnabel
Hallo zusammen ich habe ein Methode die mir meine Daten in eine Exceldokument ablegt.
Dies klappt auch.
Das Problem ist, dass das die Seite nur als Hochformat geschrieben ist. Ich hätte gerne aber Landscape bzw. Querformat.

Hier der Code:

Java:
  private void b_excelausgabe_Click(object sender, EventArgs e)
        {
            // Variablen deklarieren
            Excel.Application myExcelApplication;
            Excel.Workbook myExcelWorkbook;
            Excel.Worksheet myExcelWorkSheet = null;
            myExcelApplication = null;
           
            try
            {
                // First Contact: Excel Prozess initialisieren
                myExcelApplication = new Excel.Application();
               
                myExcelApplication.Visible = true;
                myExcelApplication.ScreenUpdating = true;   
               
               
                // Excel Datei anlegen: Workbook
                var myCount = myExcelApplication.Workbooks.Count;               
                myExcelWorkbook = (Excel.Workbook)(myExcelApplication.Workbooks.Add(System.Reflection.Missing.Value));             
                myExcelWorkSheet = (Excel.Worksheet)myExcelWorkbook.ActiveSheet;

                ((Excel.Worksheet)myExcelWorkbook.ActiveSheet).PageSetup.Orientation = Excel.XlPageOrientation.xlLandscape;
                ((Excel.Worksheet)myExcelWorkbook.ActiveSheet).PageSetup.PaperSize = Excel.XlPaperSize.xlPaperA4;
               
               
               
                myExcelWorkSheet.Cells[2 , 1] = "Zeitraum / period";
                myExcelWorkSheet.get_Range("a2", "c2").Merge(true);
                myExcelWorkSheet.Cells[2 , 6] = "von\nbis";
                myExcelWorkSheet.Cells[2 , 7] = ((Taetigkeit)dgv_tabelle.Rows[0].Tag).set_get_Datum.ToShortDateString() + "\n" + ((Taetigkeit)dgv_tabelle.Rows[dgv_tabelle.Rows.Count - 1].Tag).set_get_Datum.ToShortDateString();
                myExcelWorkSheet.Cells[2 , 9] = "Vorname, Name" + "\n" + mitarbeitername;

                myExcelWorkSheet.Cells[3 , 1] = "Auftragsdaten " + "\n" + "/contract data";
                if (tb_filter_unternehmen.SelectedItem != null)
                {                   
                    myExcelWorkSheet.Cells[3 , 7] = "Auftraggeber / client" +"\n" + ((Unternehmen)tb_filter_unternehmen.SelectedItem).get_Bezeichnung();
                    myExcelWorkSheet.get_Range("a3", "c3").Merge(true);
                }
                else
                {
                    myExcelWorkSheet.Cells[3 , 7] = "Auftraggeber / client" +"\n" + "N/A";
                    myExcelWorkSheet.get_Range("a3", "c3").Merge(true);
                }

                if (tb_filter_projekt.SelectedItem != null)
                {
                    myExcelWorkSheet.Cells[3 , 9] = "Projekt, ID" +"\n" + ((Projekt)tb_filter_projekt.SelectedItem).get_Bezeichnung() + ", " + ((Projekt)tb_filter_projekt.SelectedItem).get_ID();
                }
                else
                {
                    myExcelWorkSheet.Cells[3 , 9] = "Projekt, ID" +"\n" + "N/A";
                }

                myExcelWorkSheet.Cells[4, 1] = "Datum";
                myExcelWorkSheet.Cells[4, 2] = "Beginn" +"\n" + "/Start";
                myExcelWorkSheet.Cells[4, 3] = "Kunde" +"\n" + "/Start";
                myExcelWorkSheet.Cells[4, 4] = "Kunde" +"\n" + "/End"; ;
                myExcelWorkSheet.Cells[4, 5] = "Ende" +"\n" + "/End"; ;
                myExcelWorkSheet.Cells[4, 6] = "Pause" +"\n" + "/break " +"\n" + "/min";
                myExcelWorkSheet.Cells[4, 7] = "Tätigkeit / activity";
                myExcelWorkSheet.Cells[4, 8] = "km" +"\n" + "/total"; ;
                myExcelWorkSheet.Cells[4, 9] = "Unterschrift / Kunde";
                myExcelWorkSheet.Cells[4, 10] = "Stunden \n /hours";
                myExcelWorkSheet.Cells[4, 11] = "Hotel";
                myExcelWorkSheet.Cells[4, 12] = "Verkehrsmittel";              

                // Daten eingeben
                for (int i = 0; i < dgv_tabelle.Rows.Count; i++)
                {
                    //[Zeile, Spalte]
                    myExcelWorkSheet.Cells[5 + i, 1] = ((Taetigkeit)dgv_tabelle.Rows[i].Tag).set_get_Datum.ToShortDateString();
                    myExcelWorkSheet.Cells[5 + i, 2] = ((Taetigkeit)dgv_tabelle.Rows[i].Tag).set_get_Startzeit.ToShortTimeString();
                    myExcelWorkSheet.Cells[5 + i, 3] = ((Taetigkeit)dgv_tabelle.Rows[i].Tag).set_get_Startzeit_Kunde.ToShortTimeString();
                    myExcelWorkSheet.Cells[5 + i, 4] = ((Taetigkeit)dgv_tabelle.Rows[i].Tag).set_get_Endzeit_Kunde.ToShortTimeString();
                    myExcelWorkSheet.Cells[5 + i, 5] = ((Taetigkeit)dgv_tabelle.Rows[i].Tag).set_get_Endzeit.ToShortTimeString();
                    myExcelWorkSheet.Cells[5 + i, 6] = ((Taetigkeit)dgv_tabelle.Rows[i].Tag).set_get_Pause;
                    myExcelWorkSheet.Cells[5 + i, 7] = ((Taetigkeit)dgv_tabelle.Rows[i].Tag).set_get_Beschreibung;
                    myExcelWorkSheet.Cells[5 + i, 8] = ((Taetigkeit)dgv_tabelle.Rows[i].Tag).set_get_Kilometer;
                    //9 ist Spalte für Unterschrift
                    TimeSpan arbeitszeit = ((Taetigkeit)dgv_tabelle.Rows[i].Tag).set_get_Endzeit.Subtract(((Taetigkeit)dgv_tabelle.Rows[i].Tag).set_get_Startzeit);
                    myExcelWorkSheet.Cells[5 + i, 10] = arbeitszeit.TotalHours.ToString("0.0");
                    if(((Taetigkeit)dgv_tabelle.Rows[i].Tag).set_get_Hotelnutzung == true)
                    {
                        myExcelWorkSheet.Cells[5 + i, 11] = "X";
                    }                   
                    myExcelWorkSheet.Cells[5 + i, 12] = ((Taetigkeit)dgv_tabelle.Rows[i].Tag).set_get_Verkehrsmittel;
                }


                myExcelWorkSheet.Name = "Leistungsnachweise";

                //Zellen mit Rahmen versehen
                string cellcoord = "";
                Excel.Range formatRange;
                for (int i = 0; i < 13; i++)
                {
                    for (int a = 0; a < dgv_tabelle.Rows.Count + 4; a++)
                    {
                        cellcoord = numberToAlpha(i, false) + (a + 1).ToString("0");
                        formatRange = myExcelWorkSheet.get_Range(cellcoord, "l9");
                        formatRange.BorderAround(Excel.XlLineStyle.xlContinuous, Excel.XlBorderWeight.xlThin, Excel.XlColorIndex.xlColorIndexAutomatic, Excel.XlColorIndex.xlColorIndexAutomatic);                       
                    }
                }


                //Spaltenbreiten setzen
                Excel.Range er = myExcelWorkSheet.get_Range("A:A", System.Type.Missing);
                er.EntireColumn.ColumnWidth = 10;

                er = myExcelWorkSheet.get_Range("B:B", System.Type.Missing);
                er.EntireColumn.ColumnWidth = 6.1;

                er = myExcelWorkSheet.get_Range("C:C", System.Type.Missing);
                er.EntireColumn.ColumnWidth = 6;

                er = myExcelWorkSheet.get_Range("D:D", System.Type.Missing);
                er.EntireColumn.ColumnWidth = 6;

                er = myExcelWorkSheet.get_Range("E:E", System.Type.Missing);
                er.EntireColumn.ColumnWidth = 6;

                er = myExcelWorkSheet.get_Range("F:F", System.Type.Missing);
                er.EntireColumn.ColumnWidth = 6;

                er = myExcelWorkSheet.get_Range("G:G", System.Type.Missing);
                er.EntireColumn.ColumnWidth = 32;

                er = myExcelWorkSheet.get_Range("H:H", System.Type.Missing);
                er.EntireColumn.ColumnWidth = 4.7;

                er = myExcelWorkSheet.get_Range("I:I", System.Type.Missing);
                er.EntireColumn.ColumnWidth = 30;

                er = myExcelWorkSheet.get_Range("J:J", System.Type.Missing);
                er.EntireColumn.ColumnWidth = 7.5;

                er = myExcelWorkSheet.get_Range("K:K", System.Type.Missing);
                er.EntireColumn.ColumnWidth = 4.7;

                er = myExcelWorkSheet.get_Range("L:L", System.Type.Missing);
                er.EntireColumn.ColumnWidth = 14;

                // Excel Datei abspeichern
                // wenn die Datei vorher vorhanden ist, kommt in Excel eine Fehlermeldung.
                string ablageort = pfad + "\\" + dateiname + ".xlsx";
                myExcelWorkbook.SaveAs( ablageort, System.Reflection.Missing.Value);
            }

            catch (Exception ex)
            {
                String myErrorString = ex.Message;

                //Ursache dieser Fehlermeldung kann nicht gefunden werden, ist  aber für Erstellung trivial, daher wird diese Meldung ignoriert.
                if (ex.Message != "Ausnahme von HRESULT: 0x800A03EC")
                {
                    MessageBox.Show(myErrorString);
                }
            }           
        }

Sobald ich (23 + 24):
Code:
((Excel.Worksheet)myExcelWorkbook.ActiveSheet).PageSetup.Orientation = Excel.XlPageOrientation.xlLandscape;
                ((Excel.Worksheet)myExcelWorkbook.ActiveSheet).PageSetup.PaperSize = Excel.XlPaperSize.xlPaperA4;

nutze kommt eine Fehlermeldung:
"Die PageSize-Eigenschaft des PageSetup-Objektes kann nicht festgelegt werden"

Die Zeile 23. bewirkt zudem nichts. die Datei ist immer noch im Hochformat.

Vielleicht kann mir ja jemand helfen.

Gruß
domeemd
 
Folgendes habe ich herausgefunden:

Die Fehlermeldung "Die PageSize-Eigenschaft des PageSetup-Objektes kann nicht festgelegt werden"wird nur durch die Zeile:
Code:
((Excel.Worksheet)myExcelWorkbook.ActiveSheet).PageSetup.PaperSize = Excel.XlPaperSize.xlPaperA4;
geworfen.

Wenn ich das Dokument erstelle ist es im Format 3,5. Also 0,33cm x 10cm.
Auswahl anderer Größen in Excel ist nur bedingt möglich. Nur noch 6, 9, 12, und 18 mm.
Erst wenn man die Datei als PDF drucken will kann man auf A4 umstellen und dann greift auch das Querformat.
(Man geht auf Drucken -> Drucken und wählt als Drucker PDF. Dann kann man bei der Speicherortabfrage den Vorgang abrechen).
 
vierlleicht hilft dir das ja:

C++:
var s = myExcelWorkbook.ActiveSheet;
           
            s.PageSetup.Orientation =  Excel.XlPageOrientation.xlLandscape;
            s.PageSetup.FitToPagesWide = 1;
            s.PageSetup.FitToPagesTall = 1;
            s.pageSetup.Zoom = false;

bei mir funzt das ...

und wenn du es als pdf drucken willst, dann kannst du auch
C++:
XlFixedFormatType prmExportFormat = XlFixedFormatType.xlTypePDF;
  XlFixedFormatQuality prmExportQuality = XlFixedFormatQuality.xlQualityStandard;
  bool prmOpenAfterPublish = false;
  bool prmIncludeDocProps = true;
  bool prmIgnorePrintAreas = true;
  object prmFromPage = Type.Missing;
  object prmToPage = Type.Missing;

myExcelWorkbook.ExportAsFixedFormat( prmExportFormat,
                pPath,
                prmExportQuality,
                prmIncludeDocProps, prmIgnorePrintAreas,
                prmFromPage,
                prmToPage,
                prmOpenAfterPublish,
                Type.Missing );

benutzen, dann macht er es auf eine Seite Quer als PDF...

Gruß Hyper
 
Versuche mal Papersize abzurufen:
Code:
var p = myExcelWorkSheet.PageSetup;
            p.PaperSize = Excel.XlPaperSize.xlPaperA4;
var u = p.PaperSize;
um zu sehen ob es funktioniert, der Wert sollte 9 sein!
Setze es mal vor dem save as, wenn du alles erledigt hast, also ranges und cells befüllt hast!!!
und benutze die myExcelWorkSheet, die hast du ja schon initialisiert...

bei mir hat es letzendlich mit
Code:
var s = wb.Sheets[1];
            s.Select( Missing.Value );
...
funktioniert, habe es vor dem saveas platziert und wenn man es in excel öffnet ist es im querformat auf A4, allerdings habe ich kein Paperformat benutzt, steht bei mir standart auf a4...
 
Noch ne kleine Anmerkung, wenn du .xlsx format benutzt, dann würde ich dir openXml empfehlen, ist 10 mal schneller als interop und du kannst auch bequem die printsettings setzen...
brauchst auch kein excel dafür, läuft also office unabhängig...
Ich habe vor ein paar tagen umgesattelt, da ich viele excel dateien aufeinmal erstelle, bin über http://spreadsheetlight.com/ gestolpert, ist super einfach und schnell!!!
 
Zurück