Добрый вечер! Уже не первый день ломаю голову на просторах интернета, но не могу найти решение. Проблема в следующем. Есть файл ворд, который состоит из однотипной информации, его необходимо разбить на разные файлы, (каждый файл должен начинаться со слова отчет и заканчиваться датой) и отформатировать (ширина левого поля, отступ после абзаца, шрифт и т.д.). Нашел vbs, который разделяет документ на составляющие, добавил ширину левого поля, шрифт. Но возникла проблема со сносками документа. Подскажите, пожалуйста, как доработать данный файл, чтобы он также форматировал отступы абзаца и шрифт раздела сносок такими же параметрами как и основной текст. Или может быть это можно сделать как-нибудь иначе, через другой макрос. Заранее спасибо. [moder]Выложите пример файла и код[/moder]
Добрый вечер! Уже не первый день ломаю голову на просторах интернета, но не могу найти решение. Проблема в следующем. Есть файл ворд, который состоит из однотипной информации, его необходимо разбить на разные файлы, (каждый файл должен начинаться со слова отчет и заканчиваться датой) и отформатировать (ширина левого поля, отступ после абзаца, шрифт и т.д.). Нашел vbs, который разделяет документ на составляющие, добавил ширину левого поля, шрифт. Но возникла проблема со сносками документа. Подскажите, пожалуйста, как доработать данный файл, чтобы он также форматировал отступы абзаца и шрифт раздела сносок такими же параметрами как и основной текст. Или может быть это можно сделать как-нибудь иначе, через другой макрос. Заранее спасибо. [moder]Выложите пример файла и код[/moder]Дмит2015
Сообщение отредактировал Manyasha - Пятница, 18.12.2015, 09:34
set a = wscript.arguments if checkArg(a) then wscript.quit 0 a = a(0) path_save = left(a, instrrev(a,"\")) '20 set w = createobject("word.application")
With dnew.Sections .PageSetup.LeftMargin = 56 End With
dnew.saveas path_save & "report_" & name & ".doc" dnew.close false loop end with
set dnew = nothing d.close false set d = nothing w.quit set w = nothing wscript.echo "Готово." wscript.quit 0
' ------------------------------------------ function checkArg(p) if p.count<>1 Then wscript.echo "Неправильное число параметров." & vbLf & "Нужен 1. Есть " & p.count & "." checkArg = 1 end if end function ' ------------------------------------------ function getName(sel) const ILLEGAL = "\/:*?""<>|", R = "#" dim s, k, c s = left(sel.text, instr(1,sel.text,chr(13))-1) s = mid(s, instr(1,s," ")+1) for k = 1 to len(ILLEGAL) c = mid(ILLEGAL,k,1) if ( instr(1, s, c) ) then s = replace(s,c,R) next getName = s end function
[/vba] [moder]Код нужно обрамлять спецтегами. Кнопка #. Поправил на первый раз.
set a = wscript.arguments if checkArg(a) then wscript.quit 0 a = a(0) path_save = left(a, instrrev(a,"\")) '20 set w = createobject("word.application")
With dnew.Sections .PageSetup.LeftMargin = 56 End With
dnew.saveas path_save & "report_" & name & ".doc" dnew.close false loop end with
set dnew = nothing d.close false set d = nothing w.quit set w = nothing wscript.echo "Готово." wscript.quit 0
' ------------------------------------------ function checkArg(p) if p.count<>1 Then wscript.echo "Неправильное число параметров." & vbLf & "Нужен 1. Есть " & p.count & "." checkArg = 1 end if end function ' ------------------------------------------ function getName(sel) const ILLEGAL = "\/:*?""<>|", R = "#" dim s, k, c s = left(sel.text, instr(1,sel.text,chr(13))-1) s = mid(s, instr(1,s," ")+1) for k = 1 to len(ILLEGAL) c = mid(ILLEGAL,k,1) if ( instr(1, s, c) ) then s = replace(s,c,R) next getName = s end function
[/vba] [moder]Код нужно обрамлять спецтегами. Кнопка #. Поправил на первый раз.Дмит2015
Manyasha, добрый вечер! Проблема немного в другом: как отредактировать текст сносок - шрифт, размер, межстрочный интервал и т.д. Заранее спасибо!
Manyasha, добрый вечер! Проблема немного в другом: как отредактировать текст сносок - шрифт, размер, межстрочный интервал и т.д. Заранее спасибо!Дмит2015
Dim w, d, dnew, a Dim name, path_save Dim myStoryRange
Set a = wscript.arguments If checkArg(a) Then wscript.Quit 0 a = a(0) path_save = Left(a, InStrRev(a, "\")) '20 Set w = CreateObject("word.application") Set d = w.documents.Add(a)
Do While .Execute w.Selection.Copy name = getName(w.Selection) Set dnew = w.documents.Add dnew.Content.Paste dnew.Paragraphs.Format.SpaceAfter = 0 dnew.Content.Font.name = "Courier New" For Each myStoryRange In dnew.StoryRanges 'Если нужны одинаковые параметры для всего текста: 'myStoryRange.Font.Name = "Courier New" 'Если для основного текста нужен один шрифт, а для сносок другой: Select Case myStoryRange.StoryType Case 1 myStoryRange.Font.Name = "Courier New" Case 2 With myStoryRange .Font.Name = "Calibri" .Font.Size = 12 .ParagraphFormat.SpaceBefore = 0 .ParagraphFormat.SpaceAfter = 6 .ParagraphFormat.LineSpacing = w.LinesToPoints(1) End With End Select Next With dnew.Sections .PageSetup.LeftMargin = 56 End With dnew.SaveAs path_save & "report_" & name & ".doc" dnew.Close False Loop End With
Set dnew = Nothing d.Close False Set d = Nothing w.Quit Set w = Nothing wscript.echo "Готово." wscript.Quit 0 ' ------------------------------------------ Function checkArg(p) If p.Count <> 1 Then wscript.echo "Неправильное число параметров." & vbLf & "Нужен 1. Есть " & p.Count & "." checkArg = 1 End If End Function ' ------------------------------------------ Function getName(sel) Const ILLEGAL = "\/:*?""<>|", R = "#" Dim s, k, c s = Left(sel.Text, InStr(1, sel.Text, Chr(13)) - 1) s = Mid(s, InStr(1, s, " ") + 1) For k = 1 To Len(ILLEGAL) c = Mid(ILLEGAL, k, 1) If (InStr(1, s, c)) Then s = Replace(s, c, R) Next getName = s End Function
Dim w, d, dnew, a Dim name, path_save Dim myStoryRange
Set a = wscript.arguments If checkArg(a) Then wscript.Quit 0 a = a(0) path_save = Left(a, InStrRev(a, "\")) '20 Set w = CreateObject("word.application") Set d = w.documents.Add(a)
Do While .Execute w.Selection.Copy name = getName(w.Selection) Set dnew = w.documents.Add dnew.Content.Paste dnew.Paragraphs.Format.SpaceAfter = 0 dnew.Content.Font.name = "Courier New" For Each myStoryRange In dnew.StoryRanges 'Если нужны одинаковые параметры для всего текста: 'myStoryRange.Font.Name = "Courier New" 'Если для основного текста нужен один шрифт, а для сносок другой: Select Case myStoryRange.StoryType Case 1 myStoryRange.Font.Name = "Courier New" Case 2 With myStoryRange .Font.Name = "Calibri" .Font.Size = 12 .ParagraphFormat.SpaceBefore = 0 .ParagraphFormat.SpaceAfter = 6 .ParagraphFormat.LineSpacing = w.LinesToPoints(1) End With End Select Next With dnew.Sections .PageSetup.LeftMargin = 56 End With dnew.SaveAs path_save & "report_" & name & ".doc" dnew.Close False Loop End With
Set dnew = Nothing d.Close False Set d = Nothing w.Quit Set w = Nothing wscript.echo "Готово." wscript.Quit 0 ' ------------------------------------------ Function checkArg(p) If p.Count <> 1 Then wscript.echo "Неправильное число параметров." & vbLf & "Нужен 1. Есть " & p.Count & "." checkArg = 1 End If End Function ' ------------------------------------------ Function getName(sel) Const ILLEGAL = "\/:*?""<>|", R = "#" Dim s, k, c s = Left(sel.Text, InStr(1, sel.Text, Chr(13)) - 1) s = Mid(s, InStr(1, s, " ") + 1) For k = 1 To Len(ILLEGAL) c = Mid(ILLEGAL, k, 1) If (InStr(1, s, c)) Then s = Replace(s, c, R) Next getName = s End Function