Макрос MS Office портирвать для LibreOffice

Автор li11amy, 17 августа 2017, 20:29

0 Пользователи и 1 гость просматривают эту тему.

li11amy

Добрый день! Есть макрос для ворда/экселя, который необходимо заставить работать в либре офисе. Подскажите, это реально? Может быть кто-то из форумчан научит или возьмется помочь?

Или надо написать новый, или как-то иначе решить задачу - может будут идеи?..

Задача - вставка текстов из ворд в эксель, одна ячейка = страница (разделение разрывом страниц) с сохранением форматирования внутри абзацев.

Заранее спасибо за помощь!

kompilainenn

Цитата: li11amy от 17 августа 2017, 18:29Задача - вставка текстов из ворд в эксель
цель сего действия?
Цитата: li11amy от 17 августа 2017, 18:29Есть макрос для ворда/экселя, который необходимо заставить работать в либре офисе
где файл с макросом?
Поддержать разработчиков LibreOffice можно тут, а наш форум вот тут

Yakov

Цитата: li11amy от 17 августа 2017, 18:29Задача - вставка текстов из ворд в эксель
В данном случае - из Writer в  Calc

mikekaganski

Цитата: li11amy от 17 августа 2017, 20:29
с сохранением форматирования внутри абзацев.

Невозможно.
С уважением,
Михаил Каганский

kompilainenn

Поддержать разработчиков LibreOffice можно тут, а наш форум вот тут

mikekaganski

Ну, если речь только о форматировании символов, тогда возможно. А форматирование параграфов (например, выравнивание влево/вправо) не установишь разное для разных параграфов в одной ячейке. См., например, здесь.
С уважением,
Михаил Каганский

economist

Мой мозг отказывается помогать :-) пока не будет раскрыт смысл данной задачи.
Чтобы "то же самое" было на экране, но с другим расширением (не ODT, а ODS???).

Вот обратная задача - имеет и смысл, и решение. Договоры часто должны выглядеть красиво, как книги или Библия.
Обычно считают что-то в таблицах, а текст верстают - в редакторах текста. Есть куча инструментов для вставки фрагментоа одного - в другое. Но целиком вставлять страницу, скажем, чтобы что-то пересчитать - неправильно ни разу.       
Руб. за сто, что Питоньяк
Любит водку и коньяк!
Потому что мне, без оных, -
Не понять его никак...

economist

И да, покажите макрос! Две волшебные строчки вверху модуля с макросами:

Option VBASupport 1
Option Compatible

делают 70% кода из MSO - работоспособным в LibreOffice.
Руб. за сто, что Питоньяк
Любит водку и коньяк!
Потому что мне, без оных, -
Не понять его никак...

li11amy

Цитата: kompilainenn от 17 августа 2017, 18:59цель сего действия?
Работа такая. Авторы сдают тексты в .doc(х), клиент хочет их в виде таблицы .xls(x). Их достаточно много, чтобы в ручную это делать было затруднительно.


Цитата: kompilainenn от 17 августа 2017, 18:59где файл с макросом?
Прошу прощения, не нашла как убрать под кат.

Sub Auto_Import_Excel_2()
'ТРЕБУЕТСЯ ПОДКЛЮЧИТЬ БИБЛИОТЕКУ Microsoft Excel 12.0 (или 14.0) Object Library в Tools=>References
   
    With Application
        .ScreenUpdating = False
        .DisplayAlerts = False
        .StatusBar = False
    End With
   
    Dim obj_Excel As Excel.Application 'Объектные переменные для MS Excel
    Dim obj_Workbook As Excel.Workbook 'Для книги
    Dim obj_Worksheet As Excel.Worksheet 'Для листа
    Dim obj_Range As Word.Range 'Для текста в MS Word
    Dim odj_Doc As Word.Document 'Для документа в MS Word основного
    Dim odj_Doc_time As Word.Document 'Для документа в MS Word временного
    Dim NumPages As Long
   
    Set odj_Doc = ActiveDocument
    'Запустим MS Excel
    Set obj_Excel = New Excel.Application
    Set obj_Workbook = obj_Excel.Workbooks.Add 'Добавим в Excel новую книгу
    Set obj_Worksheet = obj_Workbook.Worksheets(1) 'Присвоим переменной ссылку на первый лист книги
   
    NumPages = ActiveDocument.ComputeStatistics(wdStatisticPages) 'Количество страниц в Word

    For i = 1 To NumPages

        Documents.Add DocumentType:=wdNewBlankDocument 'Добавить временный документ
        Set odj_Doc_time = ActiveDocument

        odj_Doc.Activate
        Selection.GoTo What:=wdGoToPage, Which:=wdGoToAbsolute, Count:=i
        Set rgePages = Selection.Range
        Selection.GoTo What:=wdGoToPage, Which:=wdGoToAbsolute, Count:=i
        rgePages.End = Selection.Bookmarks("\Page").Range.End
        rgePages.Select: Selection.Copy
               
        odj_Doc_time.Activate: Selection.PasteAndFormat (wdFormatOriginalFormatting)
            Selection.WholeStory
            With Selection.Find
                .Text = "^p"
                .Replacement.Text = "+++"
                .Execute Replace:=wdReplaceAll
            End With
            With Selection.Find
                .Text = "^m"
                .Replacement.Text = ""
                .Execute Replace:=wdReplaceAll
            End With
        Selection.GoTo What:=wdGoToPage, Which:=wdGoToAbsolute, Count:=i
        Set rgePages = Selection.Range
        Selection.GoTo What:=wdGoToPage, Which:=wdGoToAbsolute, Count:=i
        rgePages.End = Selection.Bookmarks("\Page").Range.End
        rgePages.Select
       
        rgePages.Copy
        obj_Worksheet.Cells(i, 1).Select: ActiveSheet.Paste
        obj_Worksheet.Cells.Replace What:="+++", Replacement:="" & Chr(10) & "", LookAt:=xlPart, SearchOrder _
        :=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False
       
        odj_Doc_time.Close (False) 'Закрыть документ
    Next i
       
    obj_Excel.Visible = True
   
    With Application
        .ScreenUpdating = True
        .DisplayAlerts = True
        .StatusBar = True
    End With
   
End Sub


Цитата: mikekaganski от 17 августа 2017, 21:59Ну, если речь только о форматировании символов, тогда возможно
Важно чтобы сохранялись абзацные отступы и списки, если есть. Все остальное не проблема поправить массово уже в таблице.


li11amy

Цитата: economist от 18 августа 2017, 10:40Две волшебные строчки вверху модуля с макросами:
Пробовала, не помогает (вставляла в самое начало макроса)

li11amy

Цитата: economist от 18 августа 2017, 10:38Чтобы "то же самое" было на экране, но с другим расширением (не ODT, а ODS???)

Чтобы текст - обычный текст с заголовками и подзаголовками - оказался в ячейке таблицы. Зачем - вопрос отчасти философский, но вообще затем, чтобы потом эту таблицу подгрузить и получить тексты на сайте без закидывания через админку поштучно, например. Но это уже за пределами моих полномочий  и задач.

Моя проблема - хочу вернуться на ubuntu, которой много лет пользовалась, а тут "познакомилась" в 10-й, и маломощный нетбук постоянно тупит.  Этот макрос - последняя преграда на пути. Впрочем, это тоже лирика за рамками стоящей задачи))))

mikekaganski

Цитата: li11amy от 18 августа 2017, 13:24
Цитата: mikekaganski от 17 августа 2017, 21:59Ну, если речь только о форматировании символов, тогда возможно
Важно чтобы сохранялись абзацные отступы и списки, если есть. Все остальное не проблема поправить массово уже в таблице.

Оба параметра - свойства абзаца (нумерация и отступы).

Я могу себе представить, как кто-то пробует создать макрос, который бы анализировал соответствующие параметры в исходном тексте, и вставлял "скорректированный" текст, где "нумерация" и "отступы" были бы выполнены в тексте, к примеру отступы - пробелами.

Но я даже не буду начинать про "правильность" такого подхода, просто вздохну насчёт того, сколько времени займёт вычистка багов такого кода.

Лучше повторю своё заявление из ответа #3: невозможно.
С уважением,
Михаил Каганский

li11amy

Цитата: mikekaganski от 18 августа 2017, 11:33Я могу себе представить, как кто-то пробует создать макрос, который бы анализировал соответствующие параметры в исходном тексте, и вставлял "скорректированный" текст, где "нумерация" и "отступы" были бы выполнены в тексте, к примеру отступы - пробелами.

Не надо никаких сложностей, просто текст их файла в формате docx или аналогичном вставить "как есть" в calc так, чтобы 1 страница текстового документа (тексты разделены разрывом страницы) = 1 ячейке таблицы, а форматирование абзаца оставалось на месте.

В связке ворд + эксель все работает, то есть это возможно. Вопрос в том, что нужно скорректировать в макросе, чтобы работало в связке writer + calc...

li11amy

#13
Вот еще информация: при попытке запуска макроса в райтере выдает такую ошибку
http://clip2net.com/s/3N2BfxR

или вот такую:
http://clip2net.com/s/3N2DfW0