Вопрос по c#, automation, ms-word, paragraph, subscript – Как добавить подстрочные символы в абзацы с помощью Word Automation?

7

Я работаю над программой на C #, которая использует библиотеку объектов Microsoft Word 14.0 для создания файла .doc, добавления к нему абзацев и сохранения. Существует небольшая форма с кнопкой, которая выполняет описанные действия (см. Код ниже). Эта часть не имеет проблем.

Проблема:

Текущий текст в созданном файле слов будет следующим:

Некоторый текст beff = 3.0

Что мне нужно сделать, это создать абзац, который имеет нижние символы внутри. (В абзаце над буквами "эфф» должен быть подписан):

Окончательный документ будет содержать около 100 строк, как указано выше, с различными символами, которые подписаны.

Я нашел способ подписать весь абзац строкой,

paragraph1.Range.Font.Subscript = 1;

но не нашел способа реализовать его на отдельных символах.

Я также знаю, что в Unicode есть буквы и цифры, которые я мог бы использовать, но, к сожалению, Unicode не имеет полного алфавита в формате индекса, так что это тоже не вариант.

Вопрос: Есть ли способ для меня достичь цели и вставить что-то вроде «эфф « в нижнем индексе внутри абзаца во вновь созданном документе Word?

Образец кода:

private void btnReport_Click(object sender, EventArgs e)
    {

        Word._Application oWord;
        Word._Document oDoc;
        oWord = new Word.Application();
        oDoc = oWord.Documents.Add();


        var paragraph1 = oDoc.Content.Paragraphs.Add();
        paragraph1.Range.Text = "Some text   beff = 3.0";

        SaveFileDialog saveFileDialog1 = new SaveFileDialog();
        saveFileDialog1.Filter = "Word document|*.doc";
        saveFileDialog1.Title = "Save the Word Document";
        if (DialogResult.OK == saveFileDialog1.ShowDialog())
        {
            string docName = saveFileDialog1.FileName;
            if (docName.Length > 0)
            {
                object oDocName = (object)docName;
                oDoc.SaveAs(ref oDocName);
            }
        }
        oWord.Quit();
    }

Ваш Ответ

3   ответа
3

чтобы выполнить эту работу, и даже найти смещение.

Range range = paragraph1.Range;
range.Text = "Some text   beff = 3.0";
if (range.Text.Contains("eff ="))
{
   range.Start = range.Start + range.Text.IndexOf("eff =");
   range.End = range.Start + 3;
   range.Font.Subscript = 1;
}

Надеюсь, поможет.

2

который имитирует нужный вам процесс. Когда закончите, посмотрите на код VBA, который он создает. Этот код даст вам информацию о том, что / как работает с операциями, которые нужно вызвать.

5

добавьте текст с помощью subscipt / superscript и разархивируйте файл .docx, чтобы изучить его ».С содержанием XML вы заметите, что текст, содержащий нижний индекс / верхний индекс, помещается в отдельныйбежать элемент.

Одним из способов достижения этого являетсяOpenXML SDK.Однажды ты'Загрузив и установив SDK, вы можете использовать следующий код:

using System;
using DocumentFormat.OpenXml;
using DocumentFormat.OpenXml.Packaging;
using DocumentFormat.OpenXml.Wordprocessing;

namespace OpenXML
{
    class Program
    {
        static void Main(string[] args)
        {
            using (var doc = WordprocessingDocument.Create("C:\\Subscript.docx", WordprocessingDocumentType.Document))
            {
                MainDocumentPart mainPart = doc.AddMainDocumentPart();

                mainPart.Document = new Document();
                Body body = mainPart.Document.AppendChild(new Body());
                Paragraph p = body.AppendChild(new Paragraph());

                p.AppendChild(AddRun(false, "Some text   b "));
                p.AppendChild(AddRun(true, "eff"));
                p.AppendChild(AddRun(false, "= 3.0"));
            }

            Console.WriteLine("Done...");
            Console.ReadLine();
        }

        public static Run AddRun(bool isSubscript, string text)
        {
            Run run = new Run();
            if (isSubscript)
            {
                var props = new RunProperties();
                var fontSize = new FontSizeComplexScript() { Val = "20" };
                var vAlignment = new VerticalTextAlignment() { Val = VerticalPositionValues.Subscript };

                props.Append(fontSize);
                props.Append(vAlignment);
                run.Append(props);
            }
            run.Append(new Text(text));
            return run;
        }
    }
}

РЕДАКТИРОВАТЬ:

И здесь'Решение Interop:

    using WordNS = Microsoft.Office.Interop.Word;

    WordNS.Document doc = _application.ActiveDocument;
    WordNS.Paragraph p = doc.Paragraphs.Add();
    p.Range.Text = "Some text   beff = 3.0";

    int start = p.Range.Text.IndexOf("eff");
    int end = p.Range.Text.IndexOf("=");

    WordNS.Range range = doc.Range(start, end);
    range.Select();

    WordNS.Selection currentSelection = _application.Selection;
    currentSelection.Font.Subscript = 1;

    doc.SaveAs2("C:\\SubscriptInterop.docx");

Похожие вопросы