Вот моя дилемма.Мне было поручено создать определенный раздел существующего текстового документа на основе пользовательского ввода веб-интерфейса.Серверная часть системы написана на C # с частью, которая редактирует текстовый документ, используя пространство имен Microsoft.Office.Interop.Word
.
В основном, они выбирают из списка доступных инструкций, каждая из которых имеет тип string
, который затем будет использоваться для генерации инструктивной части документа, где каждая отдельная инструкция является еще одним маркером в списке.Эта часть отлично работает.Моя проблема в том, что инструкции могут содержать символ \
, который необходимо заменить на отступ или эквивалент нажатия клавиши TAB во время нахождения в маркере, если документ был открыт в word.Пока я могу заставить его вставлять маркеры в середину списка просто отлично, он продолжает нумеровать их соответствующим образом, как и ожидалось.Кикер в том, что я не могу заставить их отступать по мере необходимости.
Я перепробовал почти все примеры, которые мне удалось найти здесь и на нескольких других сайтах, чтобы заставить это работать, но снет успехаПоследняя итерация приведена в приведенном ниже коде, который делает отступ всего списка настолько большим, насколько это возможно.
var bookmark = "bookMarkName";
var docPath = @"c:\temp\Template.docx";
var app = new Application();
var doc = app.Documents.Open(docPath);
var range = doc.Bookmarks[bookmark].Range;
var listTemplate = range.ListFormat.ListTemplate;
range.ListFormat.ApplyListTemplate(listTemplate);
string[] bulletList = new string[] {
@"Point A",
@"\Point B",
@"\Point C",
@"\\Point D",
@"Point E"
}
var count = bulletList.Length;
for (var i = 0; i < count; i++)
{
var listLevel = 0;
var currentItem = bulletList[i];
var item = currentItem.Replace(@"\", "");
if (i < count - 1)
item = item + "\n";
listLevel += currentItem.ToList().Where(x => x == '\\').Select(x => x).Count();
for (var x = 0; x < listLevel; x++)
{
range.ListFormat.ListIndent();
}
range.InsertAfter(item);
}
doc.SaveAs(@"c:\temp\" + DateTime.Now.Ticks + ".docx");
doc.Close();
Таким образом, вывод моего кода должен быть:
Это первый раз, когда мне действительно приходилось работать с библиотеками Office Interop, поэтому я уверен, что что-то здесь не хватает.Любая помощь будет принята с благодарностью.