Страницы: 1
RSS
Экспорт из Excel в Word
 
Добрый день всем.
Прошу помощи. Никогда не экспортировал из Excel в Word.
В моем примере, часть пробного кода - работает под офис 2010, в 2013 не работает.
Знаю, что там много ошибок, но я впервые это делаю.
Заранее спасибо за помощь!

Поэтапно должно быть:
Текст из Текстбокс1 - первая строка в word
Пустая строка
Текст из Текстбокс2 - третья строка
Пустая строка
Текст из Текстбокс3 - идет ниже
Пустая строка
Текст из Текстбокс4 - идет ниже
Пустая строка
Далее, таблица из 2 строк и 2 столбцов (лев верхняя ячейка - "Заказчик", пр. верх. ячейка - "Исполнитель", лев. нижн ячейка - текст из Текстбокс5, пр. нижняя ячейка - текст из Текстбокс6)
Под таблицей пустая строка
Далее
под лев частью таблицы заказчик, под пр. частью таблицы - Исполнитель
Иногда только промахнувшись, понимаешь как ты попал.
 
Эмир, привет!

Попробуй поменять
Код
With WordObj.Selection.PageSetup
        .LineNumbering.Active = False
на
Код
  Set objSelection = objWord.Selection

В другой теме вот этот код работает корректно - таблица из excel в word.
Код
Dim objWord
   Dim objDoc 
   Dim objSelection
 
   Set objWord = CreateObject("Word.Application") 
   Set objDoc = objWord.Documents.Add 
   objWord.Visible = True 
   Set objSelection = objWord.Selection 
 Set tblNew = objDoc.Tables.Add(objWord.Selection.Range, 3, 5)
 
 With tblNew
 For intX = 1 To 3
 For intY = 1 To 5
 .Cell(intX, intY).Range.InsertAfter "Cell: R" & intX & ", C" & intY
 Next intY
 Next intX
 .Columns.AutoFit
 End With
 
   objSelection.TypeText ("Saving this file after this text")
    objDoc.SaveAs ("D:\MyFirstSave")

p/s если ты планируешь заполнять готовый шаблон, то возможно более правильное решение не формировать файл word каждый раз а использовать готовый шсблон в  котором
будут метки типа %fio% %docnum% и т.п. - просто делать replace этих меток на нужные значения
Изменено: pharmaprofi - 29.07.2015 10:41:33
 
Спасибо попробую
Иногда только промахнувшись, понимаешь как ты попал.
 
Когда после таблицы вставляется текст в Word таблица сдвигается, а текст сбоку. Нужно, чтобы текст был под таблицей.
Как с этим бороться? Ума не приложу.

Хочу разобраться с экспортом, шаблон тоже не умею заполнять - нужно изучать эту тему, а информации пока очень мало.
Иногда только промахнувшись, понимаешь как ты попал.
 
Цитата
pharmaprofi написал: objSelection.TypeText
А перед objSelection.TypeParagraf
(за правильнонаписание не ручаюсь)
 
Код
Dim objWord
   Dim objDoc
  
   Dim objSelection
   Dim tblNew
   Dim intX
   Dim intY
  
   Set objWord = CreateObject("Word.Application")
  
   Set objDoc = objWord.Documents.Add
  
   objWord.Visible = True
  
   Set objSelection = objWord.Selection
  
 Set tblNew = objDoc.Tables.Add(objWord.Selection.Range, 3, 5)
  
 With tblNew
 For intX = 1 To 3
 For intY = 1 To 5
 .Cell(intX, intY).Range.InsertAfter "Cell: R" & intX & ", C" & intY
 Next intY
 Next intX
 .Columns.AutoFit
 End With
  objSelection.TypeParagraph
   objSelection.TypeText ("привет")
  
   objDoc.SaveAs ("C:\MyFirstSave")
Написание верное, но это не помогает. Текст потом добавляется вроде в первую ячейку таблицы
Изменено: Эмир - 24.07.2015 22:52:20
Иногда только промахнувшись, понимаешь как ты попал.
 
текст из xl в word ("значения" можно ячейками задать, но у вас др ситуация) - небольшая адаптация из вашего 1-го поста...
(НО из ваших TextBoxes уже берите сами - они у вас похоже по форме вообще никак не прописаны в коде - не берётся, да и с оформлением я не знакома)
Код
Private Sub CommandButton8_Click()
    Dim oWord As Object
    Dim strFileName As String
    Dim i As Long, j As Long
Set oWord = CreateObject("Word.Application")
'ZVI_CopyFromExcel !!!!!!!!!!!!!!!!
oWord.Visible = True' Передача команд в Word
With oWord
    .Documents.Add
    With oWord.Selection   '<----- КАК-ТО ЗАПОЛНИТЕ ИЗ ВАШИХ textboxes отсюда
     ' Заголовок сообщения
     .Font.Size = 14
     .Font.Bold = True
     .ParagraphFormat.Alignment = 1
     .TypeText Text:="O T 4 E T"
     ' Дата
     .TypeParagraph
     .TypeParagraph
     .Font.Size = 12
     .ParagraphFormat.Alignment = 0
     .Font.Bold = False
     .TypeText Text:="Дата:" & vbTab & _
     Format(Date, "mmmm d, yyyy")
     ' Получатель сообщения
     .TypeParagraph
     .TypeText Text:="KoMy: менеджеру " & vbTab & "FIO"
     ' Отправитель
     .TypeParagraph
     .TypeText Text:="OT:" & vbTab & Application.UserName
     .TypeParagraph
     .TypeText Text:="result"
    End With            '<----- КАК-ТО ЗАПОЛНИТЕ ИЗ ВАШИХ textboxes до сюда
    
' Имя файла для сохранения отчета
strFileName = InputBox("Введите название файла", "Сохранение файла .docx", "Отчет")    ' Сохранение документа
    If StrPtr(strFileName) = 0 Then
        MsgBox "Сохранение отменено."
        oWord.Quit False
    Else
        If Len(strFileName) > 0 Then
        .ActiveDocument.SaveAs Filename:=ThisWorkbook.Path & "\" & strFileName
        oWord.Quit
        MsgBox "Файл успешно сохранен по пути: " & ThisWorkbook.Path
        ElseIf Len(strFileName) = 0 Then
        MsgBox "Вы не ввели имя файла. Повторите попытку."
        oWord.Quit False
        End If
    End If
End With
Set oWord = Nothing
End Sub
Изменено: JeyCi - 24.07.2015 21:44:18
чтобы не гадать на кофейной гуще, кто вам отвечает и после этого не совершать кучу ошибок - обратитесь к собеседнику на ВЫ - ответ на ваш вопрос получите - а остальное вас не касается (п.п.п. на форумах)
 
Спасибо, за совет, но как ниже всего текста в Word таблицу создать. У меня не выходит, она все время заменяет весь предыдущий текст?
Иногда только промахнувшись, понимаешь как ты попал.
 
Цитата
Эмир написал: как ниже всего текста
у меня по коду .TypeParagraph - это новая строка
как таблицу вставлять не знаю...
Изменено: JeyCi - 24.07.2015 21:40:50
чтобы не гадать на кофейной гуще, кто вам отвечает и после этого не совершать кучу ошибок - обратитесь к собеседнику на ВЫ - ответ на ваш вопрос получите - а остальное вас не касается (п.п.п. на форумах)
 
Или можно без таблицы, мне нужно, чтобы в конце договора были указаны реквизиты Заказчика и исполнителя вот так:

"Заказчик"                                                                                           "Исполнитель"

ИНН: 1234567                                                                                        ИНН: 12345699
КПП: 12345678                                                                                       КПП: 494958666
и т.д.                                                                                                     и т. д.

Я думаю, что лучше всего таблицу вставить в конец документа, но как?
Иногда только промахнувшись, понимаешь как ты попал.
 
Цитата
Эмир написал: Или можно без таблицы
или макрорекодером попробовать в word'e 2 колонки настроить нужным видом - и см как выглядит код... но для меня - это тоже эксперимент - не делала такого - пишу лишь как об альтернативном варианте
чтобы не гадать на кофейной гуще, кто вам отвечает и после этого не совершать кучу ошибок - обратитесь к собеседнику на ВЫ - ответ на ваш вопрос получите - а остальное вас не касается (п.п.п. на форумах)
 
Эмир,  исправьте свой #7 - код следует оформлять соответствующим тегом. 190 сообщений на форуме...
 
А если я буду делать с шаблоном вордовского файла, может кто-то поделится опытом, как правильно помечать шаблон, а потом менять текст в шаблоне?
Иногда только промахнувшись, понимаешь как ты попал.
 
Создание договора в word на основе данных их excel
пост#8 Ваимодействие Excel и Word: открыть Word и сформировать текст по таблице
Изменено: JeyCi - 25.07.2015 07:18:36
чтобы не гадать на кофейной гуще, кто вам отвечает и после этого не совершать кучу ошибок - обратитесь к собеседнику на ВЫ - ответ на ваш вопрос получите - а остальное вас не касается (п.п.п. на форумах)
 
Спасибо большое, JeyCi.
Мне это очень поможет. Буду изучать.
Иногда только промахнувшись, понимаешь как ты попал.
 
Еще раз спасибо JeyCi.
Разобрался, уже дописываю создание отчета.
Не вижу смысла выкладывать файл, т.к. в ваших ссылках есть готовые 100% работающие решения.
Иногда только промахнувшись, понимаешь как ты попал.
 
Столкнулся с новой проблемой, хотя не думаю, что она сложная. Перерыл интернет, пока не нашел решения. Суть -
Я создал отчет в Worde из Excel с помощью шаблона, но при заполнении таблицы в шаблоне (одна из двух в документе), в связи с изменяющимся количеством строк для записи остаются пустые строки. Уменьшить количество строк на старте тоже нельзя - должно быть 21 строка.
Подскажите, кто знает, как их удалить из Excel. Ситуация выглядит как на рисунке. 4-5-6 строки нужно удалить.
12
12
12
пустопусто
пустопусто
пустопусто
Изменено: Эмир - 29.07.2015 04:08:41
Иногда только промахнувшись, понимаешь как ты попал.
 
Это форум по работе с Ексель
Но несколько рекомендаци Я вам дам

Обращать к файлу Ворд для набора текста нужно так  - With oWordDoc.ActiveWindow.Selection (пример)
Код
With oWordDoc.ActiveWindow.Selection
    ''' /// ШАПКА ДОКУМЕНТА
    .InsertAfter "Оголошення" + Chr(10)       'печатаем текст с переходом на новую строку
    .InsertAfter "про проведення закупівлі через систему електронних закупівель" + Chr(10)
    .ParagraphFormat.Alignment = 1 'wdAlignParagraphCenter"=1 'форматируем текст по центру
    .Font.Bold = True
    .Font.Size = 13
    .EndOf Unit:=4                 'wdParagraph = 4'снимаем выделение с текста

    ''' /// Основной Текст документа
    .TypeParagraph ''начинаем новый параграф
    .ParagraphFormat.FirstLineIndent = 30 'отступ по умолчанию (форматирование) CentimetersToPoints(1) = 1* 30 = обход Error 462
    .Font.Bold = False
    .Font.Size = 12
    .ParagraphFormat.Alignment = 3 ''wdAlignParagraphJustify по ширине ' "wdAlignParagraphCenter"=1
    .InsertAfter "1. Замовник:" + Chr(10)
Снятие выделения с текста  -  .EndOf Unit:=4    

Для вставки таблицы после текста необходимо сперва снять выделение а потом вставить таблицу.
После можно дописать текст (пример)
Код
''' Загружаем таблицу с данными
    If IsArray(Arr) Then
      .InsertParagraphAfter
      .EndOf
      .MoveUp Unit:=5, Count:=1 'отступ вверх на одну строку для вставки таблицы)Unit:=wdLine=5
     
        Dim oWordTable
        Set oWordTable = oWordDoc.Tables.Add(oWordDoc.Application.Selection.Range, UBound(Arr(0)), UBound(Arr(1)))
          With oWordTable
            .Range.ParagraphFormat.Alignment = 0  '= wdAlignParagraphLeft
            .Range.Cells.VerticalAlignment = 1    '1=wdCellAlignVerticalCenter  '3=wdCellAlignVerticalBottom     'вертикальное размешениеснизу текст
            '''.Borders(-3).LineStyle = 3 'wdLineStyleDashSmallGap 'стиль линий таблицы
            '''.Borders(-3).LineStyle = 0 'wdLineStyleNone 'стиль линий таблицы невидимый 'wdBorderBottom = -3 (&HFFFFFFFD)
            If .Style <> "Сетка таблицы" Then .Style = "Сетка таблицы" 'видимость сетки таблицы
            'Форматируем столбцы таблицы
            For x = LBound(Arr(1)) To UBound(Arr(1))
              .Columns(x).SetWidth ColumnWidth:=Arr(1)(x), RulerStyle:=0
  '            .Columns(1).SetWidth ColumnWidth:=Application.CentimetersToPoints(5.5), RulerStyle:=0
            Next x
              .Rows.SetLeftIndent LeftIndent:=5.5, RulerStyle:=0 'wdAdjustNone
              .Rows(1).Range.Font.Bold = True
              .Rows(1).Range.ParagraphFormat.Alignment = 1 'wdAlignParagraphCenter
              .Rows(1).Range.Cells.VerticalAlignment = 1 'wdCellAlignVerticalCenter '= wdCellAlignVerticalTop
            'Загружаем информацию в таблицу
            For x = LBound(Arr(0)) To UBound(Arr(0))
                For n = 1 To UBound(Arr(1))
                  With .cell(x, n).Range
  '                  If x = 1 Then .Font.Bold = True Else .Font.Bold = False
                    .Font.Size = 12
                    .Text = Arr(0)(x, n) 'печатаем текст в ячейке с адресом '(номер_строки, номер_столбца)
                  End With
              Next n
            Next x
         End With
     
        .EndKey Unit:=6, Extend:=0 'перевод каретки в конец документа Unit:=wdStory, Extend:=wdMove
        .EndOf
        
        .InsertAfter "Учасник визначає ціну з урахуванням усіх своїх витрат, податків і зборів, " + _
                      "що сплачуються або мають бути сплачені, в тому числі на транспортування до місця поставки, " + _
                      "страхування та таке інше." + vbCrLf
        .EndOf
Важно: Все константы перевести в цифровой код  - (.Borders(-3).LineStyle = 0 )
Причина проста. Судя по кускам кода которые Вам предлогали выполняется позднее связывание с объктом Ворд.
В таком случае если не будет референс на Ворд возникнет ошибка - Ексель плохо понимает константы Ворд.

Далее изучайте самостоятельно.
Удачи в решении проекта
 
Спасибо TSN за новые дополнения и пояснения к моим поискам.
Иногда только промахнувшись, понимаешь как ты попал.
Страницы: 1
Читают тему
Наверх