Создание таблиц в MS Word - C#

Узнай цену своей работы

Формулировка задачи:

Здравствуйте! Пишу курсовой проект по теме выпуска методической продукции и столкнулся возможно с глупой, но очень неприятной ситуацией. Нужно написать программу для формирования отчёта в такой таблице: Отчёт должен формироваться в Word-документе, но я, к сожалению, не нашёл в интернете информации по созданию подобных таблиц в Word через язык C#. Пожалуйста, помогите с созданием или поиском информации, может я плохо искал? Буду благодарен любой помощи!

Решение задачи: «Создание таблиц в MS Word»

textual
Листинг программы
  1. public class Report : IDisposable
  2. {
  3.     private const float CENTIMETRES_TO_POINTS = 28.34646f;
  4.     private dynamic _wdDoc;
  5.     private dynamic _wdApp;
  6.     /// <summary>
  7.     /// Создание нового экземпляра отчёта на основе шаблона.
  8.     /// </summary>
  9.     /// <param name="template">Путь к шаблону.</param>
  10.     /// <param name="visible">Показывать ли окно приложения во время работы.</param>
  11.     public Report(string template, bool visible = false)
  12.     {
  13.         NewDoc(template, visible);
  14.     }
  15.  
  16.     private void NewDoc(string template, bool visible)
  17.     {
  18.         OpenApp(visible);
  19.         CreateDoc(template);
  20.     }
  21.  
  22.     private void OpenApp(bool visible)
  23.     {
  24.         var type = Type.GetTypeFromProgID("Word.Application", false);
  25.         if (type == null)
  26.         {
  27.             throw new InvalidOperationException("Не удалось запустить приложение Word. Возожно оно не установлено.");
  28.         }
  29.         _wdApp = Activator.CreateInstance(type);
  30.         _wdApp.Visible = visible;
  31.     }
  32.  
  33.     private void CreateDoc(string template)
  34.     {
  35.         _wdDoc = _wdApp.Documents.Add(Template: template);
  36.     }
  37.     /// <summary>
  38.     /// Добавление категории в документ.
  39.     /// </summary>
  40.     public void AddCategory(Category category)
  41.     {
  42.         var table = AddRow();
  43.  
  44.         var row = (int)table.Rows.Count;
  45.         table.Cell(row, 1).Range.Font.Bold = 1;
  46.         table.Cell(row, 2).Range.Font.Bold = 1;
  47.  
  48.         table.Cell(row, 1).Range.Text = category.Index;
  49.         table.Cell(row, 2).Range.Text = category.Title;
  50.            
  51.         table.Cell(row, 11).Range.Text = category.MaxLoad.GetString();
  52.         table.Cell(row, 12).Range.Text = category.SelfGuided.GetString();
  53.         table.Cell(row, 13).Range.Text = category.StatutoryLoad.Total.GetString();
  54.  
  55.         table.Cell(row, 14).Range.Text = category.StatutoryLoad.LIZWithoutDivision.GetString();
  56.         table.Cell(row, 14).Range.Orientation = 0;//wdTextOrientationHorizontal;
  57.  
  58.         table.Cell(row, 15).Range.Text = category.StatutoryLoad.LIZWithDivision.GetString();
  59.         table.Cell(row, 15).Range.Orientation = 0;//wdTextOrientationHorizontal;
  60.  
  61.         table.Cell(row, 16).Range.Text = category.StatutoryLoad.TermProject.GetString();
  62.         table.Cell(row, 16).Range.Orientation = 0;//wdTextOrientationHorizontal;
  63.  
  64.         AutoSizeRow(table, row);
  65.     }
  66.     /// <summary>
  67.     /// Сохранение документа.
  68.     /// </summary>
  69.     /// <param name="fileName">Полный путь к файлу.</param>
  70.     public void Save(string fileName)
  71.     {
  72.         float appVersion = float.Parse(_wdApp.Version.ToString(), CultureInfo.InvariantCulture);
  73.         if (appVersion < 14)
  74.         {
  75.             _wdDoc.SaveAs(fileName);
  76.         }
  77.         else
  78.         {
  79.             _wdDoc.SaveAs2(fileName);
  80.         }
  81.     }
  82.     /// <summary>
  83.     /// Добавление дисциплины в список.
  84.     /// </summary>
  85.     public void AddDiscipline(Discipline discipline)
  86.     {
  87.         var table = AddRow();
  88.         var row = (int)table.Rows.Count;
  89.         table.Cell(row, 1).Range.Font.Bold = 0;
  90.         table.Cell(row, 2).Range.Font.Bold = 0;
  91.  
  92.         table.Cell(row, 1).Range.Text = discipline.Index;
  93.         table.Cell(row, 2).Range.Text = discipline.Title;
  94.  
  95.         for (var i = 0; i < discipline.MidtermAssessment.Length; i++)
  96.         {
  97.             table.Cell(row, i + 3).Range.Text = discipline.MidtermAssessment[i];
  98.         }
  99.  
  100.         table.Cell(row, 11).Range.Text = discipline.MaxLoad.GetString();
  101.         table.Cell(row, 12).Range.Text = discipline.SelfGuided.GetString();
  102.         table.Cell(row, 13).Range.Text = discipline.StatutoryLoad?.Total.GetString();
  103.  
  104.         table.Cell(row, 14).Range.Text = discipline.StatutoryLoad?.LIZWithoutDivision.GetString();
  105.         table.Cell(row, 14).Range.Orientation = 0;//wdTextOrientationHorizontal;
  106.  
  107.         table.Cell(row, 15).Range.Text = discipline.StatutoryLoad?.LIZWithDivision.GetString();
  108.         table.Cell(row, 15).Range.Orientation = 0;//wdTextOrientationHorizontal;
  109.  
  110.         table.Cell(row, 16).Range.Text = discipline.StatutoryLoad?.TermProject.GetString();
  111.         table.Cell(row, 16).Range.Orientation = 0;//wdTextOrientationHorizontal;
  112.  
  113.         for (var i = 0; i < discipline.WorkloadDistribution.Length; i++)
  114.         {
  115.             table.Cell(row, i + 17).Range.Text = discipline.WorkloadDistribution[i].GetString();
  116.         }
  117.  
  118.         AutoSizeRow(table, row);
  119.     }
  120.     /// <summary>
  121.     /// Добавление нескольких диспциплин.
  122.     /// </summary>
  123.     public void AddDisciplines(IEnumerable<Discipline> disciplines)
  124.     {
  125.         foreach (var discipline in disciplines)
  126.         {
  127.             AddDiscipline(discipline);
  128.         }
  129.     }
  130.     /// <summary>
  131.     /// Добавление строки в таблицу.
  132.     /// </summary>
  133.     /// <returns>Возвращает таблицу с добавленной строкой.</returns>
  134.     private dynamic AddRow()
  135.     {
  136.         var table = _wdDoc.Tables[1];
  137.         table.Rows.Add();
  138.         return table;
  139.     }
  140.     /// <summary>
  141.     /// Подгонка высоты строки.
  142.     /// </summary>
  143.     /// <param name="table">Таблица</param>
  144.     /// <param name="row">Номер строки, начиная с 1.</param>
  145.     /// <param name="height">Минимальная высота</param>
  146.     private static void AutoSizeRow(dynamic table, int row, float height = 0.1f)
  147.     {
  148.         table.Cell(row, 11).Range.Rows.HeightRule = 1;//wdRowHeightAtLeast
  149.         table.Cell(row, 11).Range.Rows.Height = height * CENTIMETRES_TO_POINTS;
  150.     }
  151.  
  152.     private void Close()
  153.     {
  154.         _wdDoc?.Close();
  155.         _wdApp?.Quit(false);
  156.     }
  157.  
  158.     #region Implementation of IDisposable
  159.  
  160.     public void Dispose()
  161.     {
  162.         Close();
  163.     }
  164.  
  165.     #endregion
  166. }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

13   голосов , оценка 3.846 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы