Создание таблиц в MS Word - C#
Формулировка задачи:
Здравствуйте!
Пишу курсовой проект по теме выпуска методической продукции и столкнулся возможно с глупой, но очень неприятной ситуацией.
Нужно написать программу для формирования отчёта в такой таблице:
Отчёт должен формироваться в Word-документе, но я, к сожалению, не нашёл в интернете информации по созданию подобных таблиц в Word через язык C#.
Пожалуйста, помогите с созданием или поиском информации, может я плохо искал?
Буду благодарен любой помощи!
Решение задачи: «Создание таблиц в MS Word»
textual
Листинг программы
- public class Report : IDisposable
- {
- private const float CENTIMETRES_TO_POINTS = 28.34646f;
- private dynamic _wdDoc;
- private dynamic _wdApp;
- /// <summary>
- /// Создание нового экземпляра отчёта на основе шаблона.
- /// </summary>
- /// <param name="template">Путь к шаблону.</param>
- /// <param name="visible">Показывать ли окно приложения во время работы.</param>
- public Report(string template, bool visible = false)
- {
- NewDoc(template, visible);
- }
- private void NewDoc(string template, bool visible)
- {
- OpenApp(visible);
- CreateDoc(template);
- }
- private void OpenApp(bool visible)
- {
- var type = Type.GetTypeFromProgID("Word.Application", false);
- if (type == null)
- {
- throw new InvalidOperationException("Не удалось запустить приложение Word. Возожно оно не установлено.");
- }
- _wdApp = Activator.CreateInstance(type);
- _wdApp.Visible = visible;
- }
- private void CreateDoc(string template)
- {
- _wdDoc = _wdApp.Documents.Add(Template: template);
- }
- /// <summary>
- /// Добавление категории в документ.
- /// </summary>
- public void AddCategory(Category category)
- {
- var table = AddRow();
- var row = (int)table.Rows.Count;
- table.Cell(row, 1).Range.Font.Bold = 1;
- table.Cell(row, 2).Range.Font.Bold = 1;
- table.Cell(row, 1).Range.Text = category.Index;
- table.Cell(row, 2).Range.Text = category.Title;
- table.Cell(row, 11).Range.Text = category.MaxLoad.GetString();
- table.Cell(row, 12).Range.Text = category.SelfGuided.GetString();
- table.Cell(row, 13).Range.Text = category.StatutoryLoad.Total.GetString();
- table.Cell(row, 14).Range.Text = category.StatutoryLoad.LIZWithoutDivision.GetString();
- table.Cell(row, 14).Range.Orientation = 0;//wdTextOrientationHorizontal;
- table.Cell(row, 15).Range.Text = category.StatutoryLoad.LIZWithDivision.GetString();
- table.Cell(row, 15).Range.Orientation = 0;//wdTextOrientationHorizontal;
- table.Cell(row, 16).Range.Text = category.StatutoryLoad.TermProject.GetString();
- table.Cell(row, 16).Range.Orientation = 0;//wdTextOrientationHorizontal;
- AutoSizeRow(table, row);
- }
- /// <summary>
- /// Сохранение документа.
- /// </summary>
- /// <param name="fileName">Полный путь к файлу.</param>
- public void Save(string fileName)
- {
- float appVersion = float.Parse(_wdApp.Version.ToString(), CultureInfo.InvariantCulture);
- if (appVersion < 14)
- {
- _wdDoc.SaveAs(fileName);
- }
- else
- {
- _wdDoc.SaveAs2(fileName);
- }
- }
- /// <summary>
- /// Добавление дисциплины в список.
- /// </summary>
- public void AddDiscipline(Discipline discipline)
- {
- var table = AddRow();
- var row = (int)table.Rows.Count;
- table.Cell(row, 1).Range.Font.Bold = 0;
- table.Cell(row, 2).Range.Font.Bold = 0;
- table.Cell(row, 1).Range.Text = discipline.Index;
- table.Cell(row, 2).Range.Text = discipline.Title;
- for (var i = 0; i < discipline.MidtermAssessment.Length; i++)
- {
- table.Cell(row, i + 3).Range.Text = discipline.MidtermAssessment[i];
- }
- table.Cell(row, 11).Range.Text = discipline.MaxLoad.GetString();
- table.Cell(row, 12).Range.Text = discipline.SelfGuided.GetString();
- table.Cell(row, 13).Range.Text = discipline.StatutoryLoad?.Total.GetString();
- table.Cell(row, 14).Range.Text = discipline.StatutoryLoad?.LIZWithoutDivision.GetString();
- table.Cell(row, 14).Range.Orientation = 0;//wdTextOrientationHorizontal;
- table.Cell(row, 15).Range.Text = discipline.StatutoryLoad?.LIZWithDivision.GetString();
- table.Cell(row, 15).Range.Orientation = 0;//wdTextOrientationHorizontal;
- table.Cell(row, 16).Range.Text = discipline.StatutoryLoad?.TermProject.GetString();
- table.Cell(row, 16).Range.Orientation = 0;//wdTextOrientationHorizontal;
- for (var i = 0; i < discipline.WorkloadDistribution.Length; i++)
- {
- table.Cell(row, i + 17).Range.Text = discipline.WorkloadDistribution[i].GetString();
- }
- AutoSizeRow(table, row);
- }
- /// <summary>
- /// Добавление нескольких диспциплин.
- /// </summary>
- public void AddDisciplines(IEnumerable<Discipline> disciplines)
- {
- foreach (var discipline in disciplines)
- {
- AddDiscipline(discipline);
- }
- }
- /// <summary>
- /// Добавление строки в таблицу.
- /// </summary>
- /// <returns>Возвращает таблицу с добавленной строкой.</returns>
- private dynamic AddRow()
- {
- var table = _wdDoc.Tables[1];
- table.Rows.Add();
- return table;
- }
- /// <summary>
- /// Подгонка высоты строки.
- /// </summary>
- /// <param name="table">Таблица</param>
- /// <param name="row">Номер строки, начиная с 1.</param>
- /// <param name="height">Минимальная высота</param>
- private static void AutoSizeRow(dynamic table, int row, float height = 0.1f)
- {
- table.Cell(row, 11).Range.Rows.HeightRule = 1;//wdRowHeightAtLeast
- table.Cell(row, 11).Range.Rows.Height = height * CENTIMETRES_TO_POINTS;
- }
- private void Close()
- {
- _wdDoc?.Close();
- _wdApp?.Quit(false);
- }
- #region Implementation of IDisposable
- public void Dispose()
- {
- Close();
- }
- #endregion
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д