2008-11-12 5 views
3

У меня есть приложение C#, где я хочу реализовать логику для программы, которая откроет документ слова и переместится в определенное место на странице и создаст таблицу и поместит значения в что. Может ли кто-нибудь сказать мне, как это реализовать. Я использую Visual studio 2005Создание динамических таблиц в Word с помощью C# .NET

+1

(ваш комментарий ко мне) Ненавижу говорить вам это, но Word не управляемое приложение. Поэтому для использования самого приложения Word вам придется использовать COM-api ... альтернативой является использование стороннего инструмента для непосредственного написания текстовых файлов (проще с .docx, чем .doc). – 2008-11-12 13:07:27

ответ

3

Посмотрите «Автоматизация слов».

Например, KB316384, который включает в себя:

Образец кода в этой статье показано, как выполнить следующие действия:

  • Вставка абзацы текста и форматирования.
  • Просмотр и изменение различных диапазонов в документе.
  • Вставка таблиц, форматирование таблиц и заполнение таблиц данными.
  • Добавить диаграмму.
+0

Спасибо. Но я ищу решение, использующее .NET Reference вместо ссылки COM. Высказывал много. Но не смог найти. Может ли кто-нибудь? – 2008-11-12 12:34:32

0

Если вы не хотите использовать Word Automation, например. у вас не установлен Word на компьютере, на котором запущена ваша программа, вы должны посмотреть на Aspose.Words.

Единственная проблема в том, что это не бесплатно.

0

Word довольно счастливо откроет файл в формате HTML с расширением .Doc. Вы можете использовать все форматирование, используя внутреннюю таблицу стилей. Очень похожий вопрос пришел сюда:

Export to Word Document in C#

4

Вот код, чтобы скопировать DataGridView к слову таблице:

Референцию Microsoft.Office.Interop.Word C: \ Program Files (x86) \ Microsoft Visual Studio 10.0 \ Tools Visual Studio для Office \ PIA \ Office12 \ Microsoft.Office.Interop.Word.dll

using word = Microsoft.Office.Interop.Word;  
public static void ExportToWord(DataGridView dgv) 
       { 
        SendMessage("Opening Word"); 

        word.ApplicationClass word = null; 



     word.Document doc = null; 
      object oMissing = System.Reflection.Missing.Value; 
      object oEndOfDoc = "\\endofdoc"; /* \endofdoc is a predefined bookmark */ 
      try 
      { 
       word = new word.ApplicationClass(); 
       word.Visible = true; 
       doc = word.Documents.Add(ref oMissing, ref oMissing,ref oMissing, ref oMissing); 
      } 
      catch (Exception ex) 
      { 
       ErrorLog(ex); 
      } 
      finally 
      { 
      } 
      if (word != null && doc != null) 
      { 
       word.Table newTable; 
       word.Range wrdRng = doc.Bookmarks.get_Item(ref oEndOfDoc).Range; 
       newTable = doc.Tables.Add(wrdRng, 1, dgv.Columns.Count-1, ref oMissing, ref oMissing); 
       newTable.Borders.InsideLineStyle = Microsoft.Office.Interop.Word.WdLineStyle.wdLineStyleSingle; 
       newTable.Borders.OutsideLineStyle = Microsoft.Office.Interop.Word.WdLineStyle.wdLineStyleSingle; 
       newTable.AllowAutoFit = true; 

       foreach (DataGridViewCell cell in dgv.Rows[0].Cells) 
       { 
        newTable.Cell(newTable.Rows.Count, cell.ColumnIndex).Range.Text = dgv.Columns[cell.ColumnIndex].Name; 

       } 
       newTable.Rows.Add(); 

       foreach (DataGridViewRow row in dgv.Rows) 
       { 
        foreach (DataGridViewCell cell in row.Cells) 
        { 
         newTable.Cell(newTable.Rows.Count, cell.ColumnIndex).Range.Text = cell.Value.ToString();      
        } 
        newTable.Rows.Add(); 
       }            
      } 

     } 
0

Вы можете попробовать мой метод экспорта данных в Word (* .docx), легко использовать и работать 100% с любым DataGr idView, просто добавьте Microsoft.Office.Interop.Word ссылку и скопируйте следующий код:

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

Спасибо.

Смежные вопросы