Вы не вошли. Пожалуйста, войдите или зарегистрируйтесь.
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Сообщений [ 14 ]
- Зарегистрирован: 28.09.2012
- Сообщений: 7
Тема: Автоматическая нумерация, и не только
Добрый день, уважаемые форумчане, имеется такой вопрос...
имеется несколько файлов Word, расположенные в одной папке, нужно их всех пронумировать поочередно, как бы один документ продолжение другого, а затем из исходя из содержания всех документов собрать одно содержание...
как это все полегче и поудобней сделать?
работаю с Word из с#, с нумерацией вроде разобрался, но был бы очень раз услышав другие способы реализации,
и как быть с содержанием??
- aap77
- генерал-полковник
- Неактивен
- Зарегистрирован: 12.09.2011
- Сообщений: 925
- Поблагодарили: 243
Re: Автоматическая нумерация, и не только
А по отдельности содержания в документах уже составлены?
- Зарегистрирован: 28.09.2012
- Сообщений: 7
Re: Автоматическая нумерация, и не только
нет, это как бы большой проект, и каждый раздел вынесен в отдельный документ, содержание должно быть в первом файле сразу после титульного листа
пока что написал вот такую функцию на с#, идет поочередное открытие каждого файла в папке и проставляются номера страниц исходя из количества страниц в предыдущем файле
public int insertPage(string viWhere, bool bPageFirst,int startPage,int hlevel)
{
object alignment = Word.WdPageNumberAlignment.wdAlignPageNumberCenter;
object bFirstPage = bPageFirst;
object bF = true;
Word.Range MyRange;
wordApplication.ActiveWindow.ActivePane.View.SeekView = Word.WdSeekView.wdSeekCurrentPageHeader; // заходим в коллонтитул
switch (viWhere)
{
case "right":
alignment = Word.WdPageNumberAlignment.wdAlignPageNumberRight;
break;
case "left":
alignment = Word.WdPageNumberAlignment.wdAlignPageNumberLeft;
break;
}
wordApplication.Selection.HeaderFooter.PageNumbers.NumberStyle = Word.WdPageNumberStyle.wdPageNumberStyleArabic;
wordApplication.Selection.HeaderFooter.PageNumbers.HeadingLevelForChapter = hlevel;
wordApplication.Selection.HeaderFooter.PageNumbers.IncludeChapterNumber = false;
wordApplication.Selection.HeaderFooter.PageNumbers.Add(alignment, bFirstPage);
wordApplication.Selection.HeaderFooter.PageNumbers.RestartNumberingAtSection = true;
wordApplication.Selection.HeaderFooter.PageNumbers.StartingNumber = startPage;
wordApplication.ActiveWindow.ActivePane.View.SeekView = Word.WdSeekView.wdSeekMainDocument; // закрываем коллонтитул
wordApplication.Selection.EndKey();
MyRange = wordDocument.Range();
MyRange.MoveEnd();
MessageBox.Show(Convert.ToString(MyRange.get_Information(Word.WdInformation.wdActiveEndAdjustedPageNumber)));
int rez = (int)MyRange.get_Information(Word.WdInformation.wdActiveEndAdjustedPageNumber);
return rez;
}
- aap77
- генерал-полковник
- Неактивен
- Зарегистрирован: 12.09.2011
- Сообщений: 925
- Поблагодарили: 243
Re: Автоматическая нумерация, и не только
Так общий принцип понятен, Вы проверили этот код и пронумеровали страницы в документах, результат устроил?
- Зарегистрирован: 28.09.2012
- Сообщений: 7
Re: Автоматическая нумерация, и не только
код рабочий, сам писал, только почему то номера страниц сверху,
хотя это наверно зависит от типа колонтитула: верхний, нижний? не подскажете
и еще непонятно расположение куда вставляются эти самые номера, у меня в колонтитулах рамка и там есть спец место для страниц?
насчет содержаний- думаю пробегаться по всем документам и выявлять все предложения со стилем Заголовок1 и записывать их в отдельный документ, с номерами страниц соответствеено, как вы думаете, правильное решение?
- aap77
- генерал-полковник
- Неактивен
- Зарегистрирован: 12.09.2011
- Сообщений: 925
- Поблагодарили: 243
- За сообщение: 1
Re: Автоматическая нумерация, и не только
1. По колонтитулам: В Ворде верхний колонтитул обозначается параметром Headers, а нижний Footers и доступны эти объекты через объект Section(Раздел). Если обращаться к колонтитулам через объект Selection.HeaderFooter как это делаете вы то для активизации верхнего колонтитула надо обязательно прописать код
ActiveWindow.ActivePane.View.SeekView = wdSeekCurrentPageHeader
для нижнего
ActiveWindow.ActivePane.View.SeekView =wdSeekCurrentPageFooter
т.е. этими строками вы обращаетесь к текущему верxниму или нижниму колонтитулу.
Опять же Selection.HeaderFooter может привести к ошибке если наборщик вставлял в документ знаки разрывов разделов. Я напишу Вам свой код нумерации страниц документа на VBA комментариями и вы его сможете адаптировать под синтаксис с# xотя код который я напишу можно будет использовать напрямую сразу в ворде. И еще по какому принципу созданы имена файлов, т.е. по какому принципу вы даете понять коду в какой последовательности должны идти файлы.
2. По составлению общего содержания вообще особых проблем не вижу, если правильно решен 1-й пункт
- Зарегистрирован: 28.09.2012
- Сообщений: 7
Re: Автоматическая нумерация, и не только
Спасибо)
с последовательностью проблем возникнуть не должно, каждый файл имеет в начале своего названия номер. я их буду сортировать на этапе выбора папки, в случае необходимости пользователь сможет поменять местами те или иные документы
при наличии разрывов код ведет себя не так как нужно, почему то выдает не то число страниц в документе
- Зарегистрирован: 28.09.2012
- Сообщений: 7
Re: Автоматическая нумерация, и не только
и еще одна проблема, просмотрел еще раз эти документы, там довольно таки часто встречаются страницы альбомной ориентации, и все они пронумерованы... раньше нумерация всвавлялась при помощи опять таки с помощью разрывов разделов... и как тут поступать??
- aap77
- генерал-полковник
- Неактивен
- Зарегистрирован: 12.09.2011
- Сообщений: 925
- Поблагодарили: 243
Re: Автоматическая нумерация, и не только
Тут вот какая фишка. Настройка нумерации страниц и их отображение в документе 2 разных процесса. ОБЪЯСНЮ, в настройках колонтитула в свойстве PageNumbers мы определяем интелектульную нумерацию страниц и от ориентации страницы она не зависит, чтобы в документе видеть номер страницы надо в него добавить поле Page, и его расположение к настройке порядка нумерации не имеет ни какого отношения.
- aap77
- генерал-полковник
- Неактивен
- Зарегистрирован: 12.09.2011
- Сообщений: 925
- Поблагодарили: 243
Re: Автоматическая нумерация, и не только
Процедура настройки нумерации не сложна. Но есть несколько закавык. Априори для Оглавления мы должны выделить в 1-м документе как минимум 1-ну страницу и нумерацию последующих документов начинать с как минимум с ее учетом. Потом пробежав по всем документам и составив оглавление которое вставим в первый документ, если оно замет более 1-й страницы нам нужно опять пробежать по всем документам и обновить нумерацию страниц и оглавления этих документов а потом уже составить новое уточненное общее оглавление и вставить его в 1-й документ.
- aap77
- генерал-полковник
- Неактивен
- Зарегистрирован: 12.09.2011
- Сообщений: 925
- Поблагодарили: 243
Re: Автоматическая нумерация, и не только
Вот общая функция нумерующая 1 раздел документа по параметру StartNamber и возвращающая Номер последней страницы документа без учета Оглавления если оно вставлено в конец документа.
Public Function PagesCount(Doc As Document, StartNamber As Long) As Long
Dim Section As Section
Dim HeaderFooter As HeaderFooter, TOC As TableOfContents
Set HeaderFooter = Doc.Sections(1).Headers(wdHeaderFooterFirstPage)
With HeaderFooter.PageNumbers
.RestartNumberingAtSection = True
.StartingNumber = StartNamber
End With
Set HeaderFooter = Doc.Sections(1).Headers(wdHeaderFooterPrimary)
With HeaderFooter.PageNumbers
.RestartNumberingAtSection = False
End With
Set HeaderFooter = Doc.Sections(1).Headers(wdHeaderFooterEvenPages)
With HeaderFooter.PageNumbers
.RestartNumberingAtSection = False
End With
If Doc.Sections.Count = 1 Then Exit Function
For i = 2 To Doc.Sections.Count
Set Section = Doc.Sections(i)
Set HeaderFooter = Doc.Sections(i).Headers(wdHeaderFooterFirstPage)
With HeaderFooter.PageNumbers
.RestartNumberingAtSection = False
End With
Set HeaderFooter = Doc.Sections(i).Headers(wdHeaderFooterPrimary)
With HeaderFooter.PageNumbers
.RestartNumberingAtSection = False
End With
Set HeaderFooter = Doc.Sections(i).Headers(wdHeaderFooterEvenPages)
With HeaderFooter.PageNumbers
.RestartNumberingAtSection = False
End With
Next i
Set Section = Doc.Sections(Doc.Sections.Count)
For i = 1 To Doc.TablesOfContents.Count
Set TOC = Doc.TablesOfContents(i)
If TOC.Range.Sections(1).Index = Section.Index Then
PagesCount = Doc.Sections(Doc.Sections.Count - 1).Range.Characters.Last.Information(wdActiveEndAdjustedPageNumber) _
- Section.Range.Characters.Last.Information(wdActiveEndAdjustedPageNumber)
Exit Function
End If
Next i
End Function
Ознакомьтесь пока с кодом, если что-то не понятно пишите, я напишу комментарии
- aap77
- генерал-полковник
- Неактивен
- Зарегистрирован: 12.09.2011
- Сообщений: 925
- Поблагодарили: 243
Re: Автоматическая нумерация, и не только
Общий смысл должен быть понятен, но сейчас кое сто проверю, и внесу некоторые изменения.
- Зарегистрирован: 28.09.2012
- Сообщений: 7
Re: Автоматическая нумерация, и не только
aap77 пишет:Процедура настройки нумерации не сложна. Но есть несколько закавык. Априори для Оглавления мы должны выделить в 1-м документе как минимум 1-ну страницу и нумерацию последующих документов начинать с как минимум с ее учетом. Потом пробежав по всем документам и составив оглавление которое вставим в первый документ, если оно замет более 1-й страницы нам нужно опять пробежать по всем документам и обновить нумерацию страниц и оглавления этих документов а потом уже составить новое уточненное общее оглавление и вставить его в 1-й документ.
Каждый вид проекта имеет определенное количество разделов, также к каждому проекту имеется стандартный образец из которого ясно сколько страниц будет содержать содержание
спасибо большое за помощь), дальнейшие разработки будут продолжаться в понедельник)
- aap77
- генерал-полковник
- Неактивен
- Зарегистрирован: 12.09.2011
- Сообщений: 925
- Поблагодарили: 243
- За сообщение: 1
Re: Автоматическая нумерация, и не только
Вот код уточненый
Public Function PagesCount(Doc As Document, StartNamber As Long) As Long
Dim Section As Section
Dim HeaderFooter As HeaderFooter, TOC As TableOfContents
Set HeaderFooter = Doc.Sections(1).Headers(wdHeaderFooterPrimary)
HeaderFooter.Exists = True
HeaderFooter.LinkToPrevious = True
With HeaderFooter.PageNumbers
.RestartNumberingAtSection = True
.StartingNumber = StartNamber
End With
If Doc.Sections.Count > 1 Then
For i = 2 To Doc.Sections.Count
Set Section = Doc.Sections(i)
Set HeaderFooter = Doc.Sections(i).Headers(wdHeaderFooterFirstPage)
With HeaderFooter.PageNumbers
.RestartNumberingAtSection = False
End With
Set HeaderFooter = Doc.Sections(i).Headers(wdHeaderFooterPrimary)
With HeaderFooter.PageNumbers
.RestartNumberingAtSection = False
End With
Set HeaderFooter = Doc.Sections(i).Headers(wdHeaderFooterEvenPages)
With HeaderFooter.PageNumbers
.RestartNumberingAtSection = False
End With
Next i
End If
Set Section = Doc.Sections(Doc.Sections.Count)
For i = 1 To Doc.TablesOfContents.Count
Set TOC = Doc.TablesOfContents(i)
If TOC.Range.Sections(1).Index = Section.Index Then
PagesCount = Doc.Sections(Doc.Sections.Count - 1).Range.Characters.Last.Information(wdActiveEndAdjustedPageNumber)
Exit Function
End If
Next i
PagesCount = Section.Range.Characters.Last.Information(wdActiveEndAdjustedPageNumber)
End Function
Сообщений [ 14 ]
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Автоматическая нумерация, и не только
Если вы ищете хороший ресурс, на котором можно в доступной форме получить информацию по текстовому редактору Ворд, то вам стоит обратиться на форум сайта Ворд Эксперт. На портале о Microsoft Office Word вы узнаете про: ключ для активации office 2007.
Здесь вы найдете информацию, начиная с азов и заканчивая сложными, тонкими настройками приложения. Самые стандартные вопросы, касающиеся написания макросов, проблем редактирования текста и много другого собраны в специальный подраздел. Наш сайт о Microsoft Office Word даст ответ про: программа для открытия файлов docx скачать на компьютер.
В других подразделах можно обсудить более специфические задачи и настройки, научиться писать макросы и создавать шаблоны для различных операций, отыскать готовое решение своей проблемы или оставить заявку на разработку. Наш сайт о Microsoft Office Word даст ответ про: визитки шаблоны для word.