2016-04-29 18 views
0

Ich habe diesen Code, um von der Datenrasteransicht zum Wortdokument zu exportieren, aber ich muss zu einer vorhandenen Wortakte exportieren, die nicht eine andere schafft? , weil ich ein Word-Dokument mit einem schönen Kopf mit zwei Bildern habe ich auf sie nicht ein anderesdatagridview zu Wort mit C# in vorhandener Wortdatei

using Word = Microsoft.Office.Interop.Word; 

    public void Export_Data_To_Word(DataGridView DGV, string filename) 
    { 
    if (DGV.Rows.Count != 0) 
    { 
     int RowCount = DGV.Rows.Count; 
     int ColumnCount = DGV.Columns.Count; 
     Object[,] DataArray = new object[RowCount + 1, ColumnCount + 1]; 

     //add rows 
     int r = 0; 
     for (int c = 0; c <= ColumnCount - 1; c++) 
     { 
      for (r = 0; r <= RowCount - 1; r++) 
      { 
       DataArray[r, c] = DGV.Rows[r].Cells[c].Value; 
      } //end row loop 
     } //end column loop 

     Word.Document oDoc = new Word.Document(); 
     oDoc.Application.Visible = true; 

     //page orintation 
     oDoc.PageSetup.Orientation = Word.WdOrientation.wdOrientLandscape; 


     dynamic oRange = oDoc.Content.Application.Selection.Range; 
     string oTemp = ""; 
     for (r = 0; r <= RowCount - 1; r++) 
     { 
      for (int c = 0; c <= ColumnCount - 1; c++) 
      { 
       oTemp = oTemp + DataArray[r, c] + "\t"; 

      } 
     } 

     //table format 
     oRange.Text = oTemp; 

     object Separator = Word.WdTableFieldSeparator.wdSeparateByTabs; 
     object ApplyBorders = true; 
     object AutoFit = true; 
     object AutoFitBehavior = Word.WdAutoFitBehavior.wdAutoFitContent; 

     oRange.ConvertToTable(ref Separator, ref RowCount, ref ColumnCount, 
           Type.Missing, Type.Missing, ref ApplyBorders, 
           Type.Missing, Type.Missing, Type.Missing, 
           Type.Missing, Type.Missing, Type.Missing, 
           Type.Missing, ref AutoFit, ref AutoFitBehavior, Type.Missing); 

     oRange.Select(); 

     oDoc.Application.Selection.Tables[1].Select(); 
     oDoc.Application.Selection.Tables[1].Rows.AllowBreakAcrossPages = 0; 
     oDoc.Application.Selection.Tables[1].Rows.Alignment = 0; 
     oDoc.Application.Selection.Tables[1].Rows[1].Select(); 
     oDoc.Application.Selection.InsertRowsAbove(1); 
     oDoc.Application.Selection.Tables[1].Rows[1].Select(); 

     //header row style 
     oDoc.Application.Selection.Tables[1].Rows[1].Range.Bold = 1; 
     oDoc.Application.Selection.Tables[1].Rows[1].Range.Font.Name = "Tahoma"; 
     oDoc.Application.Selection.Tables[1].Rows[1].Range.Font.Size = 14; 

     //add header row manually 
     for (int c = 0; c <= ColumnCount - 1; c++) 
     { 
      oDoc.Application.Selection.Tables[1].Cell(1, c + 1).Range.Text = DGV.Columns[c].HeaderText; 
     } 

     //table style 
     oDoc.Application.Selection.Tables[1].set_Style("Grid Table 4 - Accent 5"); 
     oDoc.Application.Selection.Tables[1].Rows[1].Select(); 
     oDoc.Application.Selection.Cells.VerticalAlignment = Word.WdCellVerticalAlignment.wdCellAlignVerticalCenter; 

     //header text 
     foreach (Word.Section section in oDoc.Application.ActiveDocument.Sections) 
     { 
      Word.Range headerRange = section.Headers[Word.WdHeaderFooterIndex.wdHeaderFooterPrimary].Range; 
      headerRange.Fields.Add(headerRange, Word.WdFieldType.wdFieldPage); 
      headerRange.Text = "your header text"; 
      headerRange.Font.Size = 16; 
      headerRange.ParagraphFormat.Alignment = Word.WdParagraphAlignment.wdAlignParagraphCenter; 
     } 

     //save the file 
     oDoc.SaveAs2(filename); 

     //NASSIM LOUCHANI 
    } 
    } 




    private void button_Click(object sender, EventArgs e) 
    { 
    SaveFileDialog sfd = new SaveFileDialog(); 

    sfd.Filter = "Word Documents (*.docx)|*.docx"; 

    sfd.FileName = "export.docx"; 

    if (sfd.ShowDialog() == DialogResult.OK) 
    { 

     Export_Data_To_Word(dataGridView1, sfd.FileName); 
    } 
    } 

Antwort

1

Sie nicht tun dies die Schaffung erstellen müssen:

Word.Document oDoc = new Word.Document(); 

Word nicht produzieren ein Fehler, aber das Dokumentobjekt wird nicht korrekt funktionieren. Sie können das Schlüsselwort new in Word nur für Word.Application verwenden. Für alles andere, verwenden Sie die entsprechende Methode. Für ein Dokument wäre dies Documents.Add oder Documents.Open.

Sie müssen auch ein Objekt für die Word.Application deklarieren und instanziieren. Zum Beispiel:

Word.Application wdApp = new Word.Application(); 
wdApp.Visible = true; 

Da Sie ein neues Dokument aus einer bestehenden Anwendung der Add Methode erstellen möchten, den Namen der Datei angibt, die als Vorlage verwendet werden:

object filePathAndName = "file info"; 
Word.Document oDoc = wdApp.Documents.Add(ref filePathAndName); 

Ebenso sollten Sie deklarieren Sie Objekte und instanziieren Sie sie nach Bedarf, anstatt sich auf das Objekt Selection zu verlassen. Zum Beispiel:

Word.Range oRange = oDoc.Content; 
Word.Table tbl = oRange.ConvertToTable(//params here); 

Sehr wichtig ist, dass Sie auch richtig Release jedes Objekt, das Sie verwenden, um die Anwendung beenden und explizite Garbage Collection durchführen (siehe „Loslassen COM-Objekte“ https://msdn.microsoft.com/en-us/library/office/aa679807(v=office.11).aspx);

tbl = null; 
oRange = null; 
oDoc.Close(); 
oDoc = null; 
wdApp.Quit(); 
wdApp = null; 
//GC here