1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen

Exceldatei erstellen als Querformat

Dieses Thema im Forum ".NET Datenverwaltung" wurde erstellt von domeemod, 26. Juni 2015.

  1. domeemod

    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:

    Code (Java):
    1.   private void b_excelausgabe_Click(object sender, EventArgs e)
    2.         {
    3.             // Variablen deklarieren
    4.             Excel.Application myExcelApplication;
    5.             Excel.Workbook myExcelWorkbook;
    6.             Excel.Worksheet myExcelWorkSheet = null;
    7.             myExcelApplication = null;
    8.            
    9.             try
    10.             {
    11.                 // First Contact: Excel Prozess initialisieren
    12.                 myExcelApplication = new Excel.Application();
    13.                
    14.                 myExcelApplication.Visible = true;
    15.                 myExcelApplication.ScreenUpdating = true;  
    16.                
    17.                
    18.                 // Excel Datei anlegen: Workbook
    19.                 var myCount = myExcelApplication.Workbooks.Count;              
    20.                 myExcelWorkbook = (Excel.Workbook)(myExcelApplication.Workbooks.Add(System.Reflection.Missing.Value));            
    21.                 myExcelWorkSheet = (Excel.Worksheet)myExcelWorkbook.ActiveSheet;
    22.  
    23.                 ((Excel.Worksheet)myExcelWorkbook.ActiveSheet).PageSetup.Orientation = Excel.XlPageOrientation.xlLandscape;
    24.                 ((Excel.Worksheet)myExcelWorkbook.ActiveSheet).PageSetup.PaperSize = Excel.XlPaperSize.xlPaperA4;
    25.                
    26.                
    27.                
    28.                 myExcelWorkSheet.Cells[2 , 1] = "Zeitraum / period";
    29.                 myExcelWorkSheet.get_Range("a2", "c2").Merge(true);
    30.                 myExcelWorkSheet.Cells[2 , 6] = "von\nbis";
    31.                 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();
    32.                 myExcelWorkSheet.Cells[2 , 9] = "Vorname, Name" + "\n" + mitarbeitername;
    33.  
    34.                 myExcelWorkSheet.Cells[3 , 1] = "Auftragsdaten " + "\n" + "/contract data";
    35.                 if (tb_filter_unternehmen.SelectedItem != null)
    36.                 {                  
    37.                     myExcelWorkSheet.Cells[3 , 7] = "Auftraggeber / client" +"\n" + ((Unternehmen)tb_filter_unternehmen.SelectedItem).get_Bezeichnung();
    38.                     myExcelWorkSheet.get_Range("a3", "c3").Merge(true);
    39.                 }
    40.                 else
    41.                 {
    42.                     myExcelWorkSheet.Cells[3 , 7] = "Auftraggeber / client" +"\n" + "N/A";
    43.                     myExcelWorkSheet.get_Range("a3", "c3").Merge(true);
    44.                 }
    45.  
    46.                 if (tb_filter_projekt.SelectedItem != null)
    47.                 {
    48.                     myExcelWorkSheet.Cells[3 , 9] = "Projekt, ID" +"\n" + ((Projekt)tb_filter_projekt.SelectedItem).get_Bezeichnung() + ", " + ((Projekt)tb_filter_projekt.SelectedItem).get_ID();
    49.                 }
    50.                 else
    51.                 {
    52.                     myExcelWorkSheet.Cells[3 , 9] = "Projekt, ID" +"\n" + "N/A";
    53.                 }
    54.  
    55.                 myExcelWorkSheet.Cells[4, 1] = "Datum";
    56.                 myExcelWorkSheet.Cells[4, 2] = "Beginn" +"\n" + "/Start";
    57.                 myExcelWorkSheet.Cells[4, 3] = "Kunde" +"\n" + "/Start";
    58.                 myExcelWorkSheet.Cells[4, 4] = "Kunde" +"\n" + "/End"; ;
    59.                 myExcelWorkSheet.Cells[4, 5] = "Ende" +"\n" + "/End"; ;
    60.                 myExcelWorkSheet.Cells[4, 6] = "Pause" +"\n" + "/break " +"\n" + "/min";
    61.                 myExcelWorkSheet.Cells[4, 7] = "Tätigkeit / activity";
    62.                 myExcelWorkSheet.Cells[4, 8] = "km" +"\n" + "/total"; ;
    63.                 myExcelWorkSheet.Cells[4, 9] = "Unterschrift / Kunde";
    64.                 myExcelWorkSheet.Cells[4, 10] = "Stunden \n /hours";
    65.                 myExcelWorkSheet.Cells[4, 11] = "Hotel";
    66.                 myExcelWorkSheet.Cells[4, 12] = "Verkehrsmittel";              
    67.  
    68.                 // Daten eingeben
    69.                 for (int i = 0; i < dgv_tabelle.Rows.Count; i++)
    70.                 {
    71.                     //[Zeile, Spalte]
    72.                     myExcelWorkSheet.Cells[5 + i, 1] = ((Taetigkeit)dgv_tabelle.Rows[i].Tag).set_get_Datum.ToShortDateString();
    73.                     myExcelWorkSheet.Cells[5 + i, 2] = ((Taetigkeit)dgv_tabelle.Rows[i].Tag).set_get_Startzeit.ToShortTimeString();
    74.                     myExcelWorkSheet.Cells[5 + i, 3] = ((Taetigkeit)dgv_tabelle.Rows[i].Tag).set_get_Startzeit_Kunde.ToShortTimeString();
    75.                     myExcelWorkSheet.Cells[5 + i, 4] = ((Taetigkeit)dgv_tabelle.Rows[i].Tag).set_get_Endzeit_Kunde.ToShortTimeString();
    76.                     myExcelWorkSheet.Cells[5 + i, 5] = ((Taetigkeit)dgv_tabelle.Rows[i].Tag).set_get_Endzeit.ToShortTimeString();
    77.                     myExcelWorkSheet.Cells[5 + i, 6] = ((Taetigkeit)dgv_tabelle.Rows[i].Tag).set_get_Pause;
    78.                     myExcelWorkSheet.Cells[5 + i, 7] = ((Taetigkeit)dgv_tabelle.Rows[i].Tag).set_get_Beschreibung;
    79.                     myExcelWorkSheet.Cells[5 + i, 8] = ((Taetigkeit)dgv_tabelle.Rows[i].Tag).set_get_Kilometer;
    80.                     //9 ist Spalte für Unterschrift
    81.                     TimeSpan arbeitszeit = ((Taetigkeit)dgv_tabelle.Rows[i].Tag).set_get_Endzeit.Subtract(((Taetigkeit)dgv_tabelle.Rows[i].Tag).set_get_Startzeit);
    82.                     myExcelWorkSheet.Cells[5 + i, 10] = arbeitszeit.TotalHours.ToString("0.0");
    83.                     if(((Taetigkeit)dgv_tabelle.Rows[i].Tag).set_get_Hotelnutzung == true)
    84.                     {
    85.                         myExcelWorkSheet.Cells[5 + i, 11] = "X";
    86.                     }                  
    87.                     myExcelWorkSheet.Cells[5 + i, 12] = ((Taetigkeit)dgv_tabelle.Rows[i].Tag).set_get_Verkehrsmittel;
    88.                 }
    89.  
    90.  
    91.                 myExcelWorkSheet.Name = "Leistungsnachweise";
    92.  
    93.                 //Zellen mit Rahmen versehen
    94.                 string cellcoord = "";
    95.                 Excel.Range formatRange;
    96.                 for (int i = 0; i < 13; i++)
    97.                 {
    98.                     for (int a = 0; a < dgv_tabelle.Rows.Count + 4; a++)
    99.                     {
    100.                         cellcoord = numberToAlpha(i, false) + (a + 1).ToString("0");
    101.                         formatRange = myExcelWorkSheet.get_Range(cellcoord, "l9");
    102.                         formatRange.BorderAround(Excel.XlLineStyle.xlContinuous, Excel.XlBorderWeight.xlThin, Excel.XlColorIndex.xlColorIndexAutomatic, Excel.XlColorIndex.xlColorIndexAutomatic);                      
    103.                     }
    104.                 }
    105.  
    106.  
    107.                 //Spaltenbreiten setzen
    108.                 Excel.Range er = myExcelWorkSheet.get_Range("A:A", System.Type.Missing);
    109.                 er.EntireColumn.ColumnWidth = 10;
    110.  
    111.                 er = myExcelWorkSheet.get_Range("B:B", System.Type.Missing);
    112.                 er.EntireColumn.ColumnWidth = 6.1;
    113.  
    114.                 er = myExcelWorkSheet.get_Range("C:C", System.Type.Missing);
    115.                 er.EntireColumn.ColumnWidth = 6;
    116.  
    117.                 er = myExcelWorkSheet.get_Range("D:D", System.Type.Missing);
    118.                 er.EntireColumn.ColumnWidth = 6;
    119.  
    120.                 er = myExcelWorkSheet.get_Range("E:E", System.Type.Missing);
    121.                 er.EntireColumn.ColumnWidth = 6;
    122.  
    123.                 er = myExcelWorkSheet.get_Range("F:F", System.Type.Missing);
    124.                 er.EntireColumn.ColumnWidth = 6;
    125.  
    126.                 er = myExcelWorkSheet.get_Range("G:G", System.Type.Missing);
    127.                 er.EntireColumn.ColumnWidth = 32;
    128.  
    129.                 er = myExcelWorkSheet.get_Range("H:H", System.Type.Missing);
    130.                 er.EntireColumn.ColumnWidth = 4.7;
    131.  
    132.                 er = myExcelWorkSheet.get_Range("I:I", System.Type.Missing);
    133.                 er.EntireColumn.ColumnWidth = 30;
    134.  
    135.                 er = myExcelWorkSheet.get_Range("J:J", System.Type.Missing);
    136.                 er.EntireColumn.ColumnWidth = 7.5;
    137.  
    138.                 er = myExcelWorkSheet.get_Range("K:K", System.Type.Missing);
    139.                 er.EntireColumn.ColumnWidth = 4.7;
    140.  
    141.                 er = myExcelWorkSheet.get_Range("L:L", System.Type.Missing);
    142.                 er.EntireColumn.ColumnWidth = 14;
    143.  
    144.                 // Excel Datei abspeichern
    145.                 // wenn die Datei vorher vorhanden ist, kommt in Excel eine Fehlermeldung.
    146.                 string ablageort = pfad + "\\" + dateiname + ".xlsx";
    147.                 myExcelWorkbook.SaveAs( ablageort, System.Reflection.Missing.Value);
    148.             }
    149.  
    150.             catch (Exception ex)
    151.             {
    152.                 String myErrorString = ex.Message;
    153.  
    154.                 //Ursache dieser Fehlermeldung kann nicht gefunden werden, ist  aber für Erstellung trivial, daher wird diese Meldung ignoriert.
    155.                 if (ex.Message != "Ausnahme von HRESULT: 0x800A03EC")
    156.                 {
    157.                     MessageBox.Show(myErrorString);
    158.                 }
    159.             }          
    160.         }
    Sobald ich (23 + 24):
    Code (Text):
    1. ((Excel.Worksheet)myExcelWorkbook.ActiveSheet).PageSetup.Orientation = Excel.XlPageOrientation.xlLandscape;
    2.                 ((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
     
  2. domeemod

    domeemod Grünschnabel

    Folgendes habe ich herausgefunden:

    Die Fehlermeldung "Die PageSize-Eigenschaft des PageSetup-Objektes kann nicht festgelegt werden"wird nur durch die Zeile:
    Code (Text):
    1. ((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).
     
  3. Hyper Lord

    Hyper Lord Mitglied

    vierlleicht hilft dir das ja:

    Code (C++):
    1. var s = myExcelWorkbook.ActiveSheet;
    2.            
    3.             s.PageSetup.Orientation =  Excel.XlPageOrientation.xlLandscape;
    4.             s.PageSetup.FitToPagesWide = 1;
    5.             s.PageSetup.FitToPagesTall = 1;
    6.             s.pageSetup.Zoom = false;
    bei mir funzt das ...

    und wenn du es als pdf drucken willst, dann kannst du auch
    Code (C++):
    1. XlFixedFormatType prmExportFormat = XlFixedFormatType.xlTypePDF;
    2.   XlFixedFormatQuality prmExportQuality = XlFixedFormatQuality.xlQualityStandard;
    3.   bool prmOpenAfterPublish = false;
    4.   bool prmIncludeDocProps = true;
    5.   bool prmIgnorePrintAreas = true;
    6.   object prmFromPage = Type.Missing;
    7.   object prmToPage = Type.Missing;
    8.  
    9. myExcelWorkbook.ExportAsFixedFormat( prmExportFormat,
    10.                 pPath,
    11.                 prmExportQuality,
    12.                 prmIncludeDocProps, prmIgnorePrintAreas,
    13.                 prmFromPage,
    14.                 prmToPage,
    15.                 prmOpenAfterPublish,
    16.                 Type.Missing );
    benutzen, dann macht er es auf eine Seite Quer als PDF...

    Gruß Hyper
     
  4. Hyper Lord

    Hyper Lord Mitglied

    Versuche mal Papersize abzurufen:
    Code (Text):
    1. var p = myExcelWorkSheet.PageSetup;
    2.             p.PaperSize = Excel.XlPaperSize.xlPaperA4;
    3. 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 (Text):
    1. var s = wb.Sheets[1];
    2.             s.Select( Missing.Value );
    3. ...
    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...
     
  5. Hyper Lord

    Hyper Lord Mitglied

    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!!!
     
Die Seite wird geladen...