Экспорт таблицы из Excel в LibreOffice

Автор Fiona, 29 мая 2020, 10:32

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

sokol92

Я в ответе #12 имел в виду оптимизацию конкретного бланка отчетности (знакомого автору вопроса и мне).
Из общих рекомендаций. LO при открытии делает много "лишней" работы по подбору высоты строк (в отличие от Excel): анализирует скрытые листы, скрытые ячейки. Надо минимизировать число ячеек с опцией форматирования "Переносить по словам", как скрытых, так и отображаемых (последнее справедливо и для Excel).
Владимир.

sokol92

Дополнение к  предыдущему сообщению - можно для всех строк листа выставить свойство optimalHeight=False (к сожалению, я не знаю для этого метода, отличного от цикла по строкам). Далее назначить на событие изменения содержимого листа макрос следующего типа:
Sub Change(oRange)
  Dim r
  For Each r In oRange.GetRows()   
    r.OptimalHeight=True
    r.OptimalHeight=False
  Next r 
End Sub
Владимир.

rami

Sub Change(oRange)
Dim oRows
oRows = oRange.getRows()
oRows.OptimalHeight = False
End Sub

sokol92

#18
Здравствуйте, rami!

На доступных мне версиях (6.4.4 и 7.0.1) присвоение свойства OptimalHeight=False одновременно двум строкам и более не работает.
Sub TestOptimalHeight()
 
  With Thiscomponent().sheets(0)
     .rows(0).optimalHeight=True
     .rows(1).optimalHeight=True
     
     .getCellRangeByName("A1:A2").getRows.optimalHeight=False
     
     Msgbox .rows(0).optimalHeight  ' выдает True
     Msgbox .rows(1).optimalHeight  ' Выдает True
  End With
End Sub
Владимир.

rami

Если высота строки соответствует некоторой величине "X", то "optimalHeight" равно True, иначе False.

Sub Main
Dim oSheet, oRange, oRows
oSheet = ThisComponent.sheets(0)
oRange = oSheet.getCellRangeByName("A1:A2")
oRows = oRange.getRows()

'попробуйте закомментировать/раскомментитовать три строки ниже в разных сочетаниях:
oRows.optimalHeight = True      'или False
oRows.Height = 1555
'oRows.optimalHeight = False    'или True

msgbox(oRows.optimalHeight)
End Sub

sokol92

Цитата: rami от 19 сентября 2020, 16:21Если высота строки соответствует некоторой величине "X", то "optimalHeight" равно True, иначе False.
Не согласен. Модифицируем пример. Выполняем на новом документе, высота строк одна и та же.
Sub TestOptimalHeight()
 With Thiscomponent().sheets(0)
    .rows(0).optimalHeight=False
    .rows(1).optimalHeight=True
    Msgbox .rows(0).optimalHeight  ' выдает False
    Msgbox .rows(1).optimalHeight  ' Выдает True
 End With
End Sub

Владимир.

sokol92

#21
Пусть oRows - диапазон последовательных строк (поддерживающий сервис com.sun.star.table.TableRows). Мои эсперименты показывают, что:

1. Свойство oRows.optimalHeight возвращает свойство optimalHeight первой строки диапазона
2. Присвоение oRows.optimalHeight=True присваивает свойство optimalHeight=True для всех строк диапазона
3. Присвоение oRows.optimalHeight=False не производит никаких действий

Кроме того:
4. Присвоение свойства oRows.Height положительной величины кроме изменения высоты строки устанавливает также optimalHeight=False для каждой строки диапазона
5. Присвоение oRows.Height=0 для строк, имеющих свойство optimalHeight=True, вызывает подбор высоты строк. Свойство optimalHeight при этом ни для каких строк не изменяется.
Владимир.