Создание таблиц в 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 }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д