2016-04-29 13 views
0

データグリッドビューからワードドキュメントにエクスポートするこのコードはありますが、別のワードファイルを作成しない既存のワードファイルにエクスポートする必要がありますか?既存のワードファイル内のC#を使用したデータグリッドビュー

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

Wordが生成されません:私は、私はそれが別の1

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); 
    } 
    } 

答えて

1

を作成しないで作成する必要がある2枚の画像の美しいヘッダーでWord文書を持っているので ないがこれを行うのですかエラーですが、ドキュメントオブジェクトは正しく動作しません。 Wordでnewキーワードを使用する唯一の時間はWord.Applicationです。それ以外の場合は、適切な方法を使用してください。ドキュメントの場合、これはDocuments.AddまたはDocuments.Openになります。

また、Word.Applicationのオブジェクトを宣言してインスタンス化する必要があります。たとえば、次のように

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

テンプレートとして使用するファイルの名前を指定して、既存の使用からAdd方法を新しいドキュメントを作成したいので:

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

、あなたがすべきSelectionオブジェクトに頼るのではなく、オブジェクトを宣言して必要に応じてインスタンス化します。たとえば:

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

非常に重要なのは、あなたも正しくリリースすべてのは、あなたが使用してオブジェクト(https://msdn.microsoft.com/en-us/library/office/aa679807(v=office.11).aspxを「COMオブジェクトの解放」を参照)アプリケーションを終了し、明示的なガベージコレクションを実行することです。

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