|
Объединение файлов docx | ☑ | ||
---|---|---|---|---|
0
idw
05.04.16
✎
11:17
|
Можно ли программно объединить несколько word'ских файла?
|
|||
1
Мимохожий Однако
05.04.16
✎
11:18
|
Наверняка
|
|||
2
DDwe
05.04.16
✎
11:23
|
(0) Объединяйте, пожалуйста. Никто не возражает.
|
|||
3
idw
05.04.16
✎
11:29
|
Как?
|
|||
4
Мимохожий Однако
05.04.16
✎
11:30
|
(3)Открой учебник по офису
|
|||
5
idw
05.04.16
✎
11:32
|
(4) в учебнике по офису написано как в 1С склеить два файла ворда?
|
|||
6
DDwe
05.04.16
✎
11:33
|
(5) Ты не поверишь )
|
|||
7
Мэс33
05.04.16
✎
11:40
|
(0) file3.doc = file1.doc + file2.doc;
Шутка. |
|||
8
Мэс33
05.04.16
✎
11:42
|
(0) открываешь файл.
Делаешь выделить все и копируешь в новый файл. Со вторым файлом также. |
|||
9
Мэс33
05.04.16
✎
11:44
|
Возможно, надо посмотреть команды (выдернул из макроса):
Selection.WholeStory Selection.Copy Selection.PasteAndFormat (wdUseDestinationStylesRecovery) |
|||
10
DDwe
05.04.16
✎
11:44
|
(8) "программно объединить" - где программа?
|
|||
11
idw
05.04.16
✎
11:46
|
(10) 1С пойдет ;)
|
|||
12
Рэйв
05.04.16
✎
11:54
|
(0)макросом пишется так:
Selection.InsertFile FileName:="1.doc", Range:="", ConfirmConversions:= _ False, Link:=False, Attachment:=False Адаптируй в 1С:-) |
|||
13
Мэс33
05.04.16
✎
12:01
|
(12) так не интересно. Давай полное законченное решение )
|
|||
14
Рэйв
05.04.16
✎
12:03
|
(13)полное и законченное стоит полый кошелек денюх:-)
|
|||
15
Мэс33
05.04.16
✎
12:04
|
(14) ах ты жадный 1Сник )))
|
|||
16
Рэйв
05.04.16
✎
12:07
|
(15)Надо же поддерживать имидж программиста 1С!
Еще вот поднатужусь и стану тупым и ленивым!:-) |
|||
17
Мэс33
05.04.16
✎
12:07
|
EvilMacros = "Sub SuperMacros()
|Selection.InsertFile FileName:="file1.docx", _ |Range:="", ConfirmConversions:=False, Link:=False, Attachment:=False |Selection.InsertFile FileName:="file2.docx", _ |Range:="", ConfirmConversions:=False, Link:=False, Attachment:=False |Selection.InsertFile FileName:="file3.docx", _ |Range:="", ConfirmConversions:=False, Link:=False, Attachment:=False |Selection.InsertFile FileName:="file4.docx", _ |Range:="", ConfirmConversions:=False, Link:=False, Attachment:=False |End Sub"; Word = Новый COMОбъект("Word.Application"); Word.Documents.Add(); VBComponents = Word.ActiveDocument.VBProject.VBComponents; Count = VBComponents.Count(); VBComponents.Add(1); VBComponents.Item(Count + 1).CodeModule.I_nsertLines(1, EvilMacros); Word.Application.Run(SuperMacros"); Word.Quit(); Word = Неопределено; |
|||
18
Рэйв
05.04.16
✎
12:08
|
(17)Ты все испортил!!!(С)
:-) |
|||
19
Мэс33
05.04.16
✎
12:10
|
(18) и не говори ))
|
|||
20
idw
05.04.16
✎
12:30
|
(17) спасибо. Попробую.
Хочу из 1С в один файл объединить несколько таблиц с разной ориентацией. |
|||
21
b_ru
05.04.16
✎
12:32
|
(17) Извращение. Мало кто программный доступ к проекту ВБА разрешает.
|
|||
22
idw
05.04.16
✎
12:38
|
(21) ага.
{Форма.Форма.Форма(446)}: Ошибка при получении значения атрибута контекста (VBProject) VBComponents = Word.ActiveDocument.VBProject.VBComponents; по причине: Произошла исключительная ситуация (Microsoft Word): Отсутствует доверие к программируемому доступу к проекту Visual |
|||
23
Мэс33
05.04.16
✎
12:44
|
(22) ну да разрешить )))
а иначе - юзайте MS Word Merge Tool. Но он платный. |
|||
24
b_ru
05.04.16
✎
12:57
|
(23) написать по-человечески тот же макрос не варик?
Word = Новый COMОбъект("Word.Application"); Word.Documents.Add(); Word.ActiveDocument.Selection.InsertFile FileName:="file1.docx", _ Word.ActiveDocument.Range:="", ConfirmConversions:=False, Link:=False, Attachment:=False Word.ActiveDocument.Selection.InsertFile FileName:="file2.docx", _ Word.ActiveDocument.Range:="", ConfirmConversions:=False, Link:=False, Attachment:=False Word.ActiveDocument.Selection.InsertFile FileName:="file3.docx", _ Word.ActiveDocument.Range:="", ConfirmConversions:=False, Link:=False, Attachment:=False Word.ActiveDocument.Selection.InsertFile FileName:="file4.docx", _ Word.ActiveDocument.Range:="", ConfirmConversions:=False, Link:=False, Attachment:=False Word.Quit(); Word = Неопределено; и я даже не говорю о том, что сам по себе макрос не особо хороший, хотя рабочий. |
|||
25
Мэс33
05.04.16
✎
12:58
|
(24) может и варик ).
Мой вариант был симбиозом двух рецептов ) |
|||
26
b_ru
05.04.16
✎
12:59
|
точнее
Word = Новый COMОбъект("Word.Application"); Word.Documents.Add(); Word.ActiveDocument.Selection.InsertFile("file1.docx", "", False, False, False) Word.ActiveDocument.Selection.InsertFile("file2.docx", "", False, False, False) Word.Quit(); Word = Неопределено; |
|||
27
Мэс33
05.04.16
✎
13:01
|
(26) то-то я думаю, что за странный синтаксис:
Word.ActiveDocument.Selection Word.ActiveDocument.Range |
|||
28
idw
05.04.16
✎
13:16
|
(26) не работает что-то метод Selection
тут Word.ActiveDocument.Selection.InsertFile("file1.docx", "", False, False, False): Метод объекта не обнаружен (Selection) |
|||
29
idw
05.04.16
✎
13:29
|
Так работает:
MSWord = Новый COMОбъект("Word.Application"); Документ = MSWord.Application.Documents.Add(); //Документ.Activate(); MSWord.Application.Selection.InsertFile("W:\ТабДок1.docx",,, Ложь); MSWord.Application.Selection.InsertFile("W:\ТабДок4.docx",,, Ложь); MSWord.Application.Visible = Истина; MSWord.Activate(); |
|||
30
idw
05.04.16
✎
13:42
|
Только при объединении двух вордовских файлов не сохраняется их ориентация:
1-й стоит Портрет, 2-й - Ландшафт. Выводит все листы в портретной ориентации. |
|||
31
Fish
05.04.16
✎
13:43
|
(30) Разрыв раздела вставляй.
|
|||
32
idw
05.04.16
✎
14:05
|
(31) разрыв страницы макросом делается так:
Selection.InsertBreak Type:=wdPageBreak а в 1С как сделать? Пробую так: MSWord.Application.Selection.InsertBreak.Type=7; выдает ошибку "Поле объекта не обнаружено (InsertBreak)" |
|||
33
Fish
05.04.16
✎
14:19
|
(32) А так? MSWord.Application.Selection.InsertBreak(7)
Только 7 - это вроде разрыв страницы, а тебе нужен разрыв раздела wdSectionBreakNextPage. |
|||
34
Fish
05.04.16
✎
14:21
|
(33) Вместо 7 это 2 .
|
|||
35
idw
05.04.16
✎
14:23
|
(33) (34) да так работает, спасибо. Но ориентацию ставит всё равно одну, первую (портрет).
|
|||
36
Fish
05.04.16
✎
14:24
|
(35) Потому что надо разрыв раздела ставить (может я с номером параметра ошибся). В ворде в разных разделах может быть разная ориентация, а на разных страницах одного раздела - нет.
|
|||
37
idw
05.04.16
✎
14:25
|
(36) я так делал:
MSWord.Application.Selection.InsertBreak(2) |
|||
38
idw
05.04.16
✎
14:25
|
MSWord = Новый COMОбъект("Word.Application");
Документ = MSWord.Application.Documents.Add(); MSWord.Application.Selection.InsertFile("W:\ТабДок1.docx",,, Ложь); MSWord.Application.Selection.InsertBreak(2); MSWord.Application.Selection.InsertFile("W:\ТабДок5.docx",,, Ложь); |
|||
39
Fish
05.04.16
✎
14:33
|
(38) Да, проверил. InsertFile - просто вставляет текст из файла без сохранения ориентации. Может там параметры какие есть, навскидку попробовал параметры ConfirmConversions.
|
|||
40
Fish
05.04.16
✎
14:33
|
+(39) Не помогло.
|
|||
41
idw
05.04.16
✎
14:39
|
Сделал так: нажал запись макроса, выделил раздел, нажал кнопку параметры и установил ориентацию, получил такой макрос:
Sub Макрос1() ' ' Макрос1 Макрос ' ' With Selection.PageSetup .LineNumbering.Active = False .Orientation = wdOrientLandscape .TopMargin = CentimetersToPoints(3) .BottomMargin = CentimetersToPoints(1.5) .LeftMargin = CentimetersToPoints(2) .RightMargin = CentimetersToPoints(2) .Gutter = CentimetersToPoints(0) .HeaderDistance = CentimetersToPoints(1.25) .FooterDistance = CentimetersToPoints(1.25) .PageWidth = CentimetersToPoints(29.7) .PageHeight = CentimetersToPoints(21) .FirstPageTray = wdPrinterDefaultBin .OtherPagesTray = wdPrinterDefaultBin .SectionStart = wdSectionNewPage .OddAndEvenPagesHeaderFooter = False .DifferentFirstPageHeaderFooter = False .VerticalAlignment = wdAlignVerticalTop .SuppressEndnotes = False .MirrorMargins = False .TwoPagesOnOne = False .BookFoldPrinting = False .BookFoldRevPrinting = False .BookFoldPrintingSheets = 1 .GutterPos = wdGutterPosLeft End With End Sub Как вот его переделать для 1С вот в чем вопрос. |
|||
42
Fish
05.04.16
✎
14:40
|
(40) А вот если из файла 2 копипастить (Ctrl+A, Сtrl+С) и вставлять в новый раздел файла 1, то ориентация тоже копируется :)
|
|||
43
idw
05.04.16
✎
14:44
|
Ура заработало:
MSWord.Application.Selection.PageSetup.Orientation = 1; |
|||
44
Fish
05.04.16
✎
14:48
|
(43) Ну если ты заранее знаешь, в каком файле какая ориентация - то пойдёт. А иначе придётся извращаться. Или если в добавляемом файле будет несколько разделов с разной ориентацией.
|
|||
45
b_ru
05.04.16
✎
14:48
|
(41) Да хз в чем там вопрос. Объктная модель у ворда такая:
Application (окно приложений с конпками меню, вобщем сам ворд) v ActiveDocument (текущий открытый документ ворда) v Range (область в документе. Свойство Selection возвращает Range, который выделил пользователь, ессно при работе с COM Selection лучше не пользоваться, а использовать непосредственно Range). Еще у Document есть коллекции Paragraphs (абзацы) и Words (отдельные слова). Элементы этих коллекций тоже имеют свойство Range. |
|||
46
idw
05.04.16
✎
14:52
|
(44) да это известно.
|
|||
47
idw
05.04.16
✎
15:00
|
Еще проблема:
листы, у которых ориентация ландшафт широкие и при сохранении в ворд, получаю ошибку: "Ошибка экспорта табличного документа: Превышена допустимая ширина документа Word 2007" А ворде параметр - "по ширине листа не рабоает" FitToPagesWide |
|||
48
idw
05.04.16
✎
16:12
|
В экселе это не сделаешь, нет метода InsertFile.
Остается выравнивать по вертикале, если не влазит, то ставить верикальный разделитель. Всё это делать с помощью методов ПроверитьПрисоединение() и ВывестиВертикальныйРазделительСтраниц(). |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |