В данной статье поработаем с документами docx при помощи C# и библиотеки DocX.
Для примеров я буду использовать обычное консольное приложение. Библиотеку DocX вы можете добавить при помощи NuGet.
Навигация для удобства:
Работа с текстом
Работа со ссылками
Работа с изображениями
Работа с таблицами
Работа с диаграммами
Защита документа
Работа с текстом:
Будет рассмотрена работа с текстом и его форматирование.
using System; using System.Drawing; using Xceed.Words.NET; namespace Word { class Program { static void Main(string[] args) { // путь к документу string pathDocument = AppDomain.CurrentDomain.BaseDirectory + "example.docx"; // создаём документ DocX document = DocX.Create(pathDocument); // Вставляем параграф и указываем текст document.InsertParagraph("Тест"); // вставляем параграф и передаём текст document.InsertParagraph("Тест"). // устанавливаем шрифт Font("Calibri"). // устанавливаем размер шрифта FontSize(36). // устанавливаем цвет Color(Color.Navy). // делаем текст жирным Bold(). // устанавливаем интервал между символами Spacing(15). // выравниваем текст по центру Alignment = Alignment.center; // вставляем параграф и добавляем текст Paragraph paragraph = document.InsertParagraph(); // выравниваем параграф по правой стороне paragraph.Alignment = Alignment.right; // добавляем отдельную строку со своим форматированием paragraph.AppendLine("Тест"). // устанавливаем размер шрифта FontSize(20). // добавляем курсив Italic(). // устанавливаем точечное подчёркивание UnderlineStyle(UnderlineStyle.dotted). // устанавливаем цвет подчёркивания UnderlineColor(Color.DarkOrange). // добавляем выделение текста Highlight(Highlight.yellow); // добавляем пустую строку paragraph.AppendLine(); // добавляем ещё одну строку paragraph.AppendLine("Тест"); // сохраняем документ document.Save(); } } }
Результат работы:
Работа со ссылками:
Будет рассмотрена работа со ссылкой и минимальное форматирование её отображения.
using System; using System.Drawing; using Xceed.Words.NET; namespace Word { class Program { static void Main(string[] args) { // путь к документу string pathDocument = AppDomain.CurrentDomain.BaseDirectory + "example.docx"; // создаём документ DocX document = DocX.Create(pathDocument); // создаём ссылку Hyperlink hyperlinkBlog = document.AddHyperlink("progtask.ru", new Uri("https://progtask.ru")); // создаём параграф Paragraph paragraph = document.InsertParagraph(); // центрируем содержимое paragraph.Alignment = Alignment.center; // добавляем текст paragraph.InsertText("Blog - "); // добавляем ссылку paragraph.AppendHyperlink(hyperlinkBlog) // меняем цвет .Color(Color.BlueViolet). // устанавливаем вид подчёркивания UnderlineStyle(UnderlineStyle.singleLine). // устанавливаем размер шрифта FontSize(16); // сохраняем документ document.Save(); } } }
Результат работы:
Работа с изображениями:
Будет рассмотрена вставка изображения в документ.
using System; using Xceed.Words.NET; namespace Word { class Program { static void Main(string[] args) { // путь к документу string pathDocument = AppDomain.CurrentDomain.BaseDirectory + "example.docx"; string pathImage = AppDomain.CurrentDomain.BaseDirectory + "image.jpg"; // создаём документ DocX document = DocX.Create(pathDocument); // загрузка изображения Image image = document.AddImage(pathImage); // создание параграфа Paragraph paragraph = document.InsertParagraph(); // вставка изображения в параграф paragraph.AppendPicture(image.CreatePicture()); // выравнивание параграфа по центру paragraph.Alignment = Alignment.center; // сохраняем документ document.Save(); } } }
Результат работы:
Работа с таблицами:
Будет рассмотрен простой пример таблицы.
using System; using System.Drawing; using Xceed.Words.NET; namespace Word { class Program { static void Main(string[] args) { // путь к документу string pathDocument = AppDomain.CurrentDomain.BaseDirectory + "example.docx"; // создаём документ DocX document = DocX.Create(pathDocument); // создаём таблицу с 3 строками и 2 столбцами Table table = document.AddTable(3, 2); // располагаем таблицу по центру table.Alignment = Alignment.center; // меняем стандартный дизайн таблицы table.Design = TableDesign.TableGrid; // заполнение ячейки текстом table.Rows[0].Cells[0].Paragraphs[0].Append("Тест"); // заполнение ячейки ссылкой Hyperlink hyperlinkBlog = document.AddHyperlink("progtask.ru", new Uri("https://progtask.ru")); table.Rows[0].Cells[1].Paragraphs[0].AppendHyperlink(hyperlinkBlog). UnderlineStyle(UnderlineStyle.singleLine); // объединяем 2 ячейки table.Rows[1].MergeCells(0, 1); // заполняем полученную ячейку table.Rows[1].Cells[0].Paragraphs[0].Append("Тест"). // устанавливаем размер текста FontSize(26). // выравниваем текст по центру ячейки Alignment = Alignment.center; // заполняем ячейку, меняя цвет текста и его размер table.Rows[2].Cells[0].Paragraphs[0].Append("Тест"). Color(Color.Green). FontSize(20); // удаляем ячейку table.DeleteAndShiftCellsLeft(2, 1); // создаём параграф и вставляем таблицу document.InsertParagraph().InsertTableAfterSelf(table); // сохраняем документ document.Save(); } } }
Результат работы:
Работа с диаграммами:
Будут рассмотрены линейная, круговая и столбцовая диаграммы.
using System; using System.Collections.Generic; using Xceed.Words.NET; namespace Word { class Program { static void Main(string[] args) { // путь к документу string pathDocument = AppDomain.CurrentDomain.BaseDirectory + "example.docx"; // создаём документ DocX document = DocX.Create(pathDocument); // добавляем линейную диаграмму document.InsertChart(CreateLineChart()); // добавляем круговую диаграмму document.InsertChart(CreatePieChart()); // добавляем столбцовую диаграмму document.InsertChart(CreateBarChart()); // добавляем столбцовую диаграмму с 3d эффектом document.InsertChart(Create3DBarChart()); // сохраняем документ document.Save(); } private static Chart CreateLineChart() { // создаём линейную диаграмму LineChart lineChart = new LineChart(); // добавляем легенду вниз диаграммы lineChart.AddLegend(ChartLegendPosition.Bottom, false); // создаём набор данных и добавляем на диаграмму lineChart.AddSeries(TestData.GetSeriesFirst()); // добавляем ещё один набор lineChart.AddSeries(TestData.GetSeriesSecond()); return lineChart; } private static Chart CreatePieChart() { // создаём круговую диаграмму PieChart pieChart = new PieChart(); // добавляем легенду слева от диаграммы pieChart.AddLegend(ChartLegendPosition.Left, false); // создаём набор данных и добавляем на диаграмму pieChart.AddSeries(TestData.GetSeriesFirst()); return pieChart; } private static Chart CreateBarChart() { // создаём столбцовую диаграмму BarChart barChart = new BarChart(); // отображаем легенду сверху диаграммы barChart.AddLegend(ChartLegendPosition.Top, false); // создаём набор данных и добавляем в диаграмму barChart.AddSeries(TestData.GetSeriesFirst()); // создаём набор данных и добавляем в диаграмму barChart.AddSeries(TestData.GetSeriesSecond()); return barChart; } private static Chart Create3DBarChart() { // создаём столбцовую диаграмму BarChart barChart = new BarChart(); // отображаем легенду снизу диаграммы barChart.AddLegend(ChartLegendPosition.Bottom, false); // добавление 3D эффекта barChart.View3D = true; // создаём набор данных и добавляем в диаграмму barChart.AddSeries(TestData.GetSeriesFirst()); // создаём набор данных и добавляем в диаграмму barChart.AddSeries(TestData.GetSeriesSecond()); return barChart; } } // класс с тестовыми данными class TestData { public string name { get; set; } public int value { get; set; } private static List<TestData> GetTestDataFirst() { List<TestData> testDataFirst = new List<TestData>(); testDataFirst.Add(new TestData() { name = "1", value = 1 }); testDataFirst.Add(new TestData() { name = "10", value = 10 }); testDataFirst.Add(new TestData() { name = "5", value = 5 }); testDataFirst.Add(new TestData() { name = "8", value = 8 }); testDataFirst.Add(new TestData() { name = "5", value = 5 }); return testDataFirst; } private static List<TestData> GetTestDataSecond() { List<TestData> testDataSecond = new List<TestData>(); testDataSecond.Add(new TestData() { name = "12", value = 12 }); testDataSecond.Add(new TestData() { name = "3", value = 3 }); testDataSecond.Add(new TestData() { name = "8", value = 8 }); testDataSecond.Add(new TestData() { name = "15", value = 15 }); testDataSecond.Add(new TestData() { name = "1", value = 1 }); return testDataSecond; } public static Series GetSeriesFirst() { // создаём набор данных Series seriesFirst = new Series("First"); // заполняем данными seriesFirst.Bind(TestData.GetTestDataFirst(), "name", "value"); return seriesFirst; } public static Series GetSeriesSecond() { // создаём набор данных Series seriesSecond = new Series("Second"); // заполняем данными seriesSecond.Bind(TestData.GetTestDataSecond(), "name", "value"); return seriesSecond; } } }
Результат работы:
Защита документа:
Установим ограничение документу только для чтения. Для снятия его необходимо будет ввести пароль, который мы установим.
using System; using System.Drawing; using Xceed.Words.NET; namespace Word { class Program { static void Main(string[] args) { // путь к документу string pathDocument = AppDomain.CurrentDomain.BaseDirectory + "example.docx"; const string password = "password"; // создаём документ DocX document = DocX.Create(pathDocument); // делаем документ, который будет доступен только для чтения // для снятия защиты нужно будет ввести пароль // если нужно ограничить доступ без пароля, используйте метод AddProtection document.AddPasswordProtection(EditRestrictions.readOnly, password); // сохраняем документ document.Save(); } } }