C# 03.10.2018 admin No comments

Работа с Word при помощи C#

В данной статье поработаем с документами 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();
        }
    }
}



1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (6 оценок, среднее: 5,00 из 5)
Загрузка...