Страницы: 1
RSS
Автовыравнивание по высоте строки
 
Уважаемые знатоки Excel! Буду признателен за помощь в решении проблемы.
В силу обстоятельств используем официально давным-давно купленный Офис 2010
У нас формируются документы xls по заданному шаблону, где программа помещает данные каждые в свои ячейки. Таких документов генерируется порядка 20-30 тысяч в месяц. После формирования, это всё печатается. Печатаем из контекстного меню по правой кн.мыши - и выбираем печать.
В последнее время информация в некоторых ячейках стала составлять несколько строк, но Excel сам не раздвигает эти строки. Т.е. если я встану на ячейку, в которую помещена многострочная информация, то вижу только первую строку. Чтобы увидеть всё полностью, мне нужно руками раздвинуть ячейку по высоте. Соответственно, если в таком документе не раздвинуть ячейку и отправить на печать, то на бумаге получим только первую видимую строку.
Я уже поискал в интернете, но пока ничего дельного не обнаружил, единственное, что попробовал печать ч/з Libre Calc, который сроки с ячейками автоматом раздвигает, но там свои нюансы вылезли. Решил узнать у людей, кто в Экселе более продвинут, можно ли в имеющемся шаблоне сделать какие-то настройки, чтобы при помещении многострочной информации в ячейку она автоматически раздвигалась по высоте? Т.е. чтобы в дальнейшем не приходилось бы заходить в каждый документ и проверять все ли там строки нормально раздвинулось, а сразу можно было бы отправить на печать.
Буду признателен за советы или если будут альтернативные методы решения, то тоже готов их рассмотреть.
 
Цитата
написал:
альтернативные методы решения, то тоже готов их рассмотреть
Печатать документы макросом. Перед печатью автоматически менять высоту строк. Например, так:
Код
Activesheet.Usedrange.Entirerow.Autofit
 
Цитата
написал:
Activesheet.Usedrange.Entirerow.Autofit
Попробовал на Private Sub Workbook_Open() функцию повесить, но либо по другому делать нужно или так лист сделан - не сработало ((
При этом проверял на 21-м офисе - не раздвигает по высоте.
 
Цитата
написал:
либо по другому делать нужно или так лист сделан - не сработало
Приложите файл.
 
Цитата
vu.vovk написал:
Попробовал на Private Sub Workbook_Open() функцию повесить
а на печать отправляете при этом как? Все так же, через контекстное меню файла без его открытия? Если да - то и не сработает.
Надо писать макрос, который будет открывать каждый файл, делать автовысоту строк, отправлять на печать и закрывать.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Цитата
написал:
Приложите файл.
Здравствуйте.
Прикладываю файл. Ячейки Y4, Y6 и Y7 не раздвигаются.
Я по макросам еще плаваю, может не в ту функцию прикрутил.
 
Цитата
написал:
Надо писать макрос, который будет открывать каждый файл, делать автовысоту строк, отправлять на печать и закрывать.
Похоже будет чем заняться в ближайшее время, нужно только с автовысотой разобраться, пока не могу автоматом её сделать.

А в самом шаблоне файла вообще можно заранее зашить, чтобы строки по высоте раздвигались? Либра же как-то их автораздвигает...
 
vu.vovk, Как вариант, сложить все файлы, которые нужно печатать, в одну папку и запустить такой скрипт vbs:
Код
' Указываем путь к папке с Excel-файлами
folderPath = "C:\Ваша_папка" ' Измените на нужный путь

' Создаем объекты
Set objExcel = CreateObject("Excel.Application")
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFolder = objFSO.GetFolder(folderPath)

' Настройки Excel
objExcel.Visible = False
objExcel.ScreenUpdating = False

' Проходим по всем файлам в папке
For Each objFile In objFolder.Files
    ' Проверяем, является ли файл Excel-файлом
    If LCase(objFSO.GetExtensionName(objFile.Name)) = "xls" Or LCase(objFSO.GetExtensionName(objFile.Name)) = "xlsx" Then
        ' Открываем файл
        Set objWorkbook = objExcel.Workbooks.Open(objFile.Path)
        
        ' Применяем Autofit к активному листу
        On Error Resume Next
        objWorkbook.ActiveSheet.UsedRange.EntireRow.AutoFit
        On Error GoTo 0
        
        ' Печатаем файл
        objWorkbook.PrintOut
        
        ' Закрываем файл без сохранения изменений
        objWorkbook.Close False
    End If
Next

' Закрываем Excel
objExcel.Quit

' Освобождаем объекты
Set objWorkbook = Nothing
Set objFolder = Nothing
Set objFSO = Nothing
Set objExcel = Nothing
Либо второй вариант, сохраните код ниже как скрипт vbs в удобном месте, например на рабочем столе, потом просто перетаскиваете мышью нужные файлы на файл скрипта
Код
' Проверяем, были ли переданы аргументы (файлы)
If WScript.Arguments.Count = 0 Then
    MsgBox "Перетащите Excel-файл(ы) на этот скрипт."
    WScript.Quit
End If

' Создаем объекты Excel и файловой системы
Set objExcel = CreateObject("Excel.Application")
Set objFSO = CreateObject("Scripting.FileSystemObject")

' Настройки Excel
objExcel.Visible = False
objExcel.ScreenUpdating = False

' Обрабатываем каждый переданный файл
For Each strFile In WScript.Arguments
    ' Проверяем, является ли файл Excel-файлом
    If LCase(objFSO.GetExtensionName(strFile)) = "xls" Or LCase(objFSO.GetExtensionName(strFile)) = "xlsx" Then
        ' Открываем файл
        On Error Resume Next
        Set objWorkbook = objExcel.Workbooks.Open(strFile)
        If Err.Number = 0 Then
            ' Применяем Autofit к активному листу
            On Error Resume Next
            objWorkbook.ActiveSheet.UsedRange.EntireRow.AutoFit
            On Error GoTo 0
            
            ' Печатаем файл
            objWorkbook.PrintOut
            
            ' Закрываем файл без сохранения изменений
            objWorkbook.Close False
        Else
            MsgBox "Не удалось открыть файл: " & strFile
        End If
        On Error GoTo 0
    Else
        MsgBox "Файл не является Excel-файлом: " & strFile
    End If
Next

' Закрываем Excel
objExcel.Quit

' Освобождаем объекты
Set objWorkbook = Nothing
Set objFSO = Nothing
Set objExcel = Nothing
 
Цитата
написал:
А в самом шаблоне файла вообще можно заранее зашить, чтобы строки по высоте раздвигались? Либра же как-то их автораздвигает...
Проблема в Excel - наличие объединенных ячеек. На форуме есть подобные темы.

В LibreOffice Calc автоподбор высоты строк  в Вашем файле работает.
Владимир
Страницы: 1
Читают тему
Наверх